node_dump 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #!/bin/sh
  2. set -eu
  3. # shellcheck disable=SC1090,SC1091
  4. RUNNER_ROOT_DIR="$(cd "$(dirname "$(readlink "$0" || echo "$0")")"/..; pwd -P)"
  5. echo "Running node dump in ${RUNNER_ROOT_DIR}"
  6. BASE_RUNNER_ROOT_DIR="${BASE_RUNNER_ROOT_DIR:-$RUNNER_ROOT_DIR}"
  7. # shellcheck disable=SC1090,SC1091
  8. . "$RUNNER_ROOT_DIR"/releases/emqx_vars
  9. cd "${RUNNER_ROOT_DIR}"
  10. DUMP="$EMQX_LOG_DIR/node_dump_$(date +"%Y%m%d_%H%M%S").tar.gz"
  11. CONF_DUMP="$EMQX_LOG_DIR/conf.dump"
  12. LICENSE_INFO="$EMQX_LOG_DIR/license_info.txt"
  13. SYSINFO="$EMQX_LOG_DIR/sysinfo.txt"
  14. LOG_MAX_AGE_DAYS=3
  15. collect() {
  16. echo "========================================================"
  17. echo " $*"
  18. echo "========================================================"
  19. eval "$*" || echo "Unavailable"
  20. echo
  21. }
  22. show_help() {
  23. echo "Collect information about the EMQX node
  24. USAGE:
  25. $0 [-a DAYS]
  26. OPTIONS:
  27. -a n Set maximum age of collected log files in days (3 by default)"
  28. exit 1
  29. }
  30. while getopts "a:h" opt; do
  31. case "${opt}" in
  32. a) LOG_MAX_AGE_DAYS="${OPTARG}" ;;
  33. h) show_help ;;
  34. *) ;;
  35. esac
  36. done
  37. # Collect system info:
  38. {
  39. collect "$RUNNER_BIN_DIR"/emqx_ctl broker
  40. collect "$RUNNER_BIN_DIR"/emqx eval "'emqx_node_dump:sys_info()'"
  41. collect uname -a
  42. collect uptime
  43. collect free
  44. collect netstat -tnl
  45. collect "$RUNNER_BIN_DIR"/emqx_ctl plugins list
  46. collect "$RUNNER_BIN_DIR"/emqx_ctl vm all
  47. collect "$RUNNER_BIN_DIR"/emqx_ctl listeners
  48. } > "${SYSINFO}"
  49. # Collect information about the configuration:
  50. {
  51. collect "$RUNNER_BIN_DIR"/emqx eval "'emqx_node_dump:app_env_dump()'"
  52. } > "${CONF_DUMP}"
  53. # Collect license info:
  54. {
  55. collect "$RUNNER_BIN_DIR"/emqx_ctl license info
  56. } > "${LICENSE_INFO}"
  57. # Pack files
  58. {
  59. find "$EMQX_LOG_DIR" -mtime -"${LOG_MAX_AGE_DAYS}" \( -name '*.log.*' -or -name 'run_erl.log*' \)
  60. echo "${SYSINFO}"
  61. echo "${CONF_DUMP}"
  62. echo "${LICENSE_INFO}"
  63. } | tar czf "${DUMP}" -T -
  64. ## Cleanup:
  65. rm "${SYSINFO}" "${LICENSE_INFO}"
  66. #rm "${CONF_DUMP}" # Keep it for inspection
  67. echo "Created a node dump ${DUMP}"
  68. echo
  69. echo "WARNING: this script tries to obfuscate secrets, but make sure to
  70. inspect log/conf.dump file manually before uploading the node dump
  71. to a public location."