Простой мониторинг сервера
Как следить за состоянием своих серверов, если у вас их больше одного, да еще и на разных хостинга, а бегать по личным кабинетам не хочется?
Я сделал простенький sh скрипт и закинул его на сервера и добавил в cron. Теперь каждое утро получаю обновления в Telegram о состоянии памяти, диска и загруженности CPU.
#!/bin/bash
# === Настройки ===
BOT_TOKEN=""
CHAT_ID=""
HOSTNAME=$(hostname)
get_cpu_load() {
top -bn2 | grep "Cpu(s)" | tail -n1 | awk -F',' '{print 100-$4}' | awk '{printf "%.1f\n", $1}'
}
# === Сбор метрик ===
CPU_LOAD=$(get_cpu_load)
MEMORY=$(free -h | awk '/Mem:/ {print $3 " / " $2}')
DISK=$(df -h / | awk 'NR==2 {print $4 " свободно из " $2}')
UPTIME=$(uptime -p)
SERVER_IP=$(hostname -I | awk '{print $1}')
# === Формирование сообщения ===
MESSAGE="🖥️ *Отчёт с сервера ${HOSTNAME}*
🌐 IP: ${SERVER_IP}
⏱️ Аптайм: ${UPTIME}
🔥 CPU: ${CPU_LOAD}
💾 RAM: ${MEMORY}
📀 Disk: ${DISK}"
# === Отправка в Telegram ===
curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d parse_mode="Markdown" \
-d text="${MESSAGE}"Что делать с этим скриптом
- Заходите на свой сервер по ssh
- Создаете папку где душе угодно и создаете там этот скрипт (например через nano: nano monitoring.sh и вставляете туда текст). В тексте не забудьте указать токен Telegram бота и чат, в который ему нужно писать.
- Перед добавлением его в cron (планировщик заданий в ubuntu) узнаем полный путь до файла с помощью команды
pwdи получим например/home/jem/monitoring/ - Добавим запуск нашего скрипта по расписанию в cron
crontab -e - В открывшемся окне внизу введем
4 6 * * * /home/jem/monitoring/monitoring.sh- это значит: запускай скрипт каждый день в 6:04. Сохраним через Ctrl + O и выйдем через Ctrl + X - Проверим список заданий командой
crontab -l
Все. Теперь каждое утро вам будет приходить уведомление в Telegram.
Если на вашем сервере недоступен Telegram из за блокировок, есть вариант отправки запросов через socks5 прокси. Со времен прошлых блокировок я еще не потушил свой socks5. Для этого в скрипте нужно заменить строку
curl -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d parse_mode="Markdown" \
-d text="${MESSAGE}"на
curl -s -x "socks5h://user:password@serverIp:1080" \
-X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \
-d chat_id="${CHAT_ID}" \
-d parse_mode="Markdown" \
-d text="${MESSAGE}"Теперь все)
Подписывайтесь на мой Telegram канал