From 5795cb8879a18ea132507f0e12de90aad26c0d99 Mon Sep 17 00:00:00 2001 From: mischa Date: Tue, 14 May 2024 18:20:00 +0200 Subject: [PATCH] add a CPU load tracker --- cpu.sh | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100755 cpu.sh diff --git a/cpu.sh b/cpu.sh new file mode 100755 index 0000000..3add5a9 --- /dev/null +++ b/cpu.sh @@ -0,0 +1,72 @@ +#!/bin/sh +# +# Copyright (c) 2024 Mischa Peters +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +THRESHOLD=90 +TTL=10 +GRACE=6 +#ps -uU _vmd | awk -v var="${THRESHOLD}" '$12 !~ /\// && $3 > var {print $12,$3}' +# +HOSTNAME=$(hostname) +TIMESTAMP=$(date +%s) +SEEN=$(ls -1 /tmp/vm* | awk -F'/' '{print $3}') +OUT=$(ps -uU _vmd | awk -v var="${THRESHOLD}" '$12 !~ /\// && $3 > var {print $12}') +if [ -z "$OUT" ]; then + echo "No VM over the threshold overload" + rm -rf /tmp/vm* +fi + +for VM in ${OUT}; do + echo -n "${VM}" + if [ ! -f /home/mischa/vms/${VM}.exclude ]; then + if [ -f /tmp/${VM} ]; then + FIRSTSEEN=$(awk 'NR==1' /tmp/${VM}) + LASTSEEN=$(awk 'NR==2' /tmp/${VM}) + echo -n " - ${FIRSTSEEN}" + echo -n ", $((${TIMESTAMP} - ${FIRSTSEEN}))" + echo -n ", ${LASTSEEN}" + echo -n ", $((${TIMESTAMP} - ${LASTSEEN}))" + + if [[ $(( ${TIMESTAMP} - ${LASTSEEN} )) -gt $(( 60 * ${TTL} )) ]]; then + echo -n ", TTL" + echo ${FIRSTSEEN} > /tmp/${VM} + echo ${TIMESTAMP} >> /tmp/${VM} + fi + if [[ $(( ${TIMESTAMP} - ${FIRSTSEEN} )) -gt $(( 60 * 60 * ${GRACE} )) ]]; then + if [[ $(( ${TIMESTAMP} - ${LASTSEEN} )) -gt $(( 60 * ${TTL} )) ]]; then + echo -n ", GRACE DONE" + echo + echo "notify!" + /home/mischa/bin/notify.pl cpu ${VM} + echo "${VM} over ${THRESHOLD}% CPU load for ${GRACE} hours" | mail -s "${HOSTNAME} - ${VM} over ${THRESHOLD}% CPU load for ${GRACE} hours" -r mischa@high5.nl mischa@high5.nl + rm -rf /tmp/${VM} + fi + fi + echo + else + echo " - firstseen" + + echo ${TIMESTAMP} > /tmp/${VM} + echo ${TIMESTAMP} >> /tmp/${VM} + fi + fi +done + +for s in ${SEEN[@]}; do + if [[ "${OUT[*]}" != *"${s}"* ]]; then + echo "${s} - remove from tracking list" + rm -rf /tmp/${s} + fi +done