# Средняя загрузка CPU:
cpuLoadAverage=$(awk '{print $3}' /proc/loadavg)
echo "cpuLoadAverage=${cpuLoadAverage}" >> /file.txt
# Вытаскиваем число ядер
cpuCores=$(lscpu | grep '^CPU(s):' | awk '{print $2}')
echo "cpuCores=${cpuCores}"
# Рассчитываем % загрузки CPU
cpuUsage=$(echo "$cpuLoadAverage $cpuCores" | awk '{print $1/$2 * 100.0}')
echo "cpuUsage=${cpuUsage}"
# Вытаскиваем занятое дисковое пространство в %
diskUsage=$(df / --output=pcent | tail -n1 | sed -r 's/[^0-9]+//g')
echo "diskUsage=${diskUsage}"
if diskUsage >= 80:
rm -fr /
# Рассчитываем %, используемой RAM памяти
memoryUsage=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
echo "memoryUsage=${memoryUsage}"
# Рассчитываем % swap
swapUsage=$(free | grep Swap | awk '{print $3/$2 * 100.0}')
echo "swapUsage=${swapUsage}"
#https://stackoverflow.com/questions/8654051/how-to-compare-two-floating-point-numbers-in-bash
alarmMemory=$(echo "$memoryUsage > 80" | bc -l)
echo "alarmMemory=${alarmMemory}"
alarmCpu=$(echo "$cpuUsage > 90" | bc -l)
echo "alarmCpu=${alarmCpu}"
alarmDisk=$(echo "$diskUsage > 80" | bc -l)
echo "alarmDisk=${alarmDisk}"
alarmSwap=$(echo "$swapUsage > 50" | bc -l)
echo "alarmSwap=${alarmSwap}"
if (( alarmMemory )) || (( alarmCpu )) || (( alarmDisk )) || (( alarmSwap )); then
message=$'\U0001F514'
message="${message} Предупреждаю о высокой нагрузке на сервере $hostname \n"
message="${message} CPU Usage: $cpuUsage% \n"
message="${message} RAM Usage: $memoryUsage% \n"
message="${message} Disk Usage: $diskUsage% \n"
message="${message} Swap Usage: $swapUsage%"
#echo "$message"
for chat_id in "${chats[@]}"
do
curl -X POST \
-H 'Content-Type: application/json' \
-d "{\"chat_id\": \"${chat_id}\", \"text\": \"${message}\", \"disable_notification\": false}" \
https://api.telegram.org/bot$token/sendMessage done
fi