Простой мониторинг uptime сервера с отчетами в Telegram

Чтобы держать руку на пульсе сервера, существует масса ПО. Но если у вас мало ресурсов, например впс-ка с 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

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *