Чтобы держать руку на пульсе сервера, существует масса ПО. Но если у вас мало ресурсов, например впс-ка с 1-2 гб ОЗУ и одним единственным ядром, то не стоит ставить какие-то сложные системы мониторинга, ведь они будут жрать и без того скудные ресурсы. Да и установка с настройкой того же munin могут вызвать затруднения у не опытных пользователей. Куда проще добавить одну строчку кода в cron задачи и в случае проблем — получать сообщения в телегу, как и в случае устранения проблем.
Набросаем простенький скрипт:
#!/bin/bash AVG_MAX=2 BOT_ID="your_telegram_bot_id" CHAT_ID="your_chat_id" AVG=$(awk -v avg_max=${AVG_MAX} '$1>avg_max{print $1}' /proc/loadavg) if [ -n "$AVG" ]; then curl -L "https://api.telegram.org/bot$BOT_ID/sendMessage?chat_id=$CHAT_ID&parse_mode=html&text=HIGH AVG: $AVG" sleep 61s AVG=$(awk -v avg_max=${AVG_MAX} '$1<=avg_max{print $1}' /proc/loadavg) if [ -n "$AVG" ]; then curl -L "https://api.telegram.org/bot$BOT_ID/sendMessage?chat_id=$CHAT_ID&parse_mode=html&text=NORMAL AVG: $AVG"; fi fi
- AVG_MAX — тут задаём максимальный показатель load average при превышении которого, бот будет стучать нам в чат о проблемах или сообщать о решении проблемы
- BOT_ID — это HTTP API token выданный BotFather при создании бота.
- CHAT_ID — id чата (вашего с ботом или чата группы)
Принцип работы следующий — при превышении заданного показателя loadavg, бот стучит в чат с сообщением HIGH AVG: $AVG — показатель load average. Если показатель превышен, то спустя минуту при нормализации показателя — отправляется сообщение NORMAL AVG: $AVG — показатель load average
Ставим сервер на мониторинг uptime одной строчкой.
Создаём в каталоге /etc/cron.d/ файлик loadavg_watcher и в него пишем ежеминутную крон задачу:
* * * * * root (AVG_MAX=2;BOT_ID="your_telegram_bot_id";CHAT_ID="your_chat_id";AVG=$(awk -v avg_max=${AVG_MAX} '$1>avg_max{print $1}' /proc/loadavg);if [ -n "$AVG" ]; then curl -L "https://api.telegram.org/bot$BOT_ID/sendMessage?chat_id=$CHAT_ID&parse_mode=html&text=HIGH AVG: $AVG";sleep 61s;AVG=$(awk -v avg_max=${AVG_MAX} '$1<=avg_max{print $1}' /proc/loadavg);if [ -n "$AVG" ]; then curl -L "https://api.telegram.org/bot$BOT_ID/sendMessage?chat_id=$CHAT_ID&parse_mode=html&text=NORMAL AVG: $AVG";fi;fi;) > /dev/null 2>&1