node_dump 2.1 KB

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