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

Как следить за состоянием своих серверов, если у вас их больше одного, да еще и на разных хостинга, а бегать по личным кабинетам не хочется?

Я сделал простенький 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 канал