entrypoint-sysstat.sh 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #!/bin/bash
  2. # Just die if not root.
  3. if [ ${UID} -ne 0 ]; then
  4. echo "FATAL: Need to run as root."
  5. exit 1
  6. fi
  7. # Announce collection period.
  8. PERIOD=10
  9. if [ -n "$1" ]; then
  10. PERIOD=$1
  11. fi
  12. REPORT_LENGTH=$((2 * PERIOD - 1))
  13. echo "Collecting and reporting system activity statistics every ${PERIOD} seconds..."
  14. # Clean up /var/log/sa on startup if so requested.
  15. case ${STARTUP_SCRATCH:-0} in
  16. 1|yes|true)
  17. echo "Removing existing SA1 data due to scratch-on-startup being ${STARTUP_SCRATCH}..."
  18. rm -rf /var/log/sa
  19. ;;
  20. *)
  21. echo "Skipping scratch-on-startup..."
  22. ;;
  23. esac
  24. # Add a record of rotation to existing logs if so requested.
  25. case ${STARTUP_ROTATE:-0} in
  26. 1|yes|true)
  27. echo "Marking existing SA1 data as rotated due to rotate-on-startup being ${STARTUP_ROTATE}..."
  28. /usr/lib64/sa/sa1 --rotate
  29. ;;
  30. *)
  31. echo "Skipping rotate-on-startup..."
  32. ;;
  33. esac
  34. # Mark a reboot.
  35. /usr/lib64/sa/sa1 --boot
  36. # Remember the hour-of-day.
  37. PREV_HOUR="$(date +%H)"
  38. # Do the loop.
  39. while [ 1 ]; do
  40. # Start sa1.
  41. /usr/lib64/sa/sa1 ${PERIOD} 1
  42. # Produce the report.
  43. REPORT_FROM=$(date +%H:%M:%S -d "${REPORT_LENGTH} seconds ago")
  44. REPORT_UNTIL=$(date +%H:%M:%S)
  45. /usr/bin/sadf -s ${REPORT_FROM} -e ${REPORT_UNTIL} -j -- -A > /var/log/sa/dump.json
  46. # Have we awoken in a new day? Rotation record, please!
  47. NEW_HOUR="$(date +%H)"
  48. if [ ${NEW_HOUR} -lt ${PREV_HOUR} ]; then
  49. echo "Marking last saXX as rotated..."
  50. /usr/lib64/sa/sa1 --rotate
  51. fi
  52. PREV_HOUR=${NEW_HOUR}
  53. sleep ${PERIOD}
  54. done
  55. # End of entrypoint-sysstat.sh