#!/bin/sh set -eu RUNNER_ROOT_DIR="$(cd "$(dirname "$(readlink "$0" || echo "$0")")"/..; pwd -P)" echo "Running node dump in ${RUNNER_ROOT_DIR}" # shellcheck disable=SC1090 . "$RUNNER_ROOT_DIR"/releases/emqx_vars cd "${RUNNER_ROOT_DIR}" DUMP="$RUNNER_LOG_DIR/node_dump_$(date +"%Y%m%d_%H%M%S").tar.gz" CONF_DUMP="$RUNNER_LOG_DIR/conf.dump" SYSINFO="$RUNNER_LOG_DIR/sysinfo.txt" LOG_MAX_AGE_DAYS=3 collect() { echo "========================================================" echo " $*" echo "========================================================" eval "$*" || echo "Unavailable" echo } show_help() { echo "Collect information about the EMQX node USAGE: $0 [-a DAYS] OPTIONS: -a n Set maximum age of collected log files in days (3 by default)" exit 1 } while getopts "a:h" opt; do case "${opt}" in a) LOG_MAX_AGE_DAYS="${OPTARG}" ;; h) show_help ;; *) ;; esac done # Collect system info: { collect "$RUNNER_BIN_DIR"/emqx_ctl broker collect "$RUNNER_BIN_DIR"/emqx eval "'emqx_node_dump:sys_info()'" collect uname -a collect uptime collect free collect netstat -tnl collect "$RUNNER_BIN_DIR"/emqx_ctl plugins list collect "$RUNNER_BIN_DIR"/emqx_ctl modules list collect "$RUNNER_BIN_DIR"/emqx_ctl vm all collect "$RUNNER_BIN_DIR"/emqx_ctl listeners } > "${SYSINFO}" # Collect information about the configuration: { collect "$RUNNER_BIN_DIR"/emqx eval "'emqx_node_dump:app_env_dump()'" } > "${CONF_DUMP}" # Pack files { find "$RUNNER_LOG_DIR" -mtime -"${LOG_MAX_AGE_DAYS}" \( -name '*.log.*' -or -name 'run_erl.log*' \) echo "${SYSINFO}" echo "${CONF_DUMP}" } | tar czf "${DUMP}" -T - ## Cleanup: rm "${SYSINFO}" #rm "${CONF_DUMP}" # Keep it for inspection echo "Created a node dump ${DUMP}" echo echo "WARNING: this script tries to obfuscate secrets, but make sure to inspect log/conf.dump file manually before uploading the node dump to a public location."