Перейти к содержимому

История метрик и проверка доступности

sysstat и vnstat для истории нагрузки и трафика, плюс простая проверка сайта по cron с уведомлением в Telegram.

Уровень
Средний
Время чтения
3 мин чтения
Обновлено
Проверено на
Ubuntu 22.04, Ubuntu 24.04, Debian 12
Содержание
  1. sysstat: история нагрузки
  2. vnstat: трафик
  3. Проверка сайта с уведомлением в Telegram
  4. Проверьте результат
  5. Когда этого станет мало

Когда сервер тормозил ночью, top утром ничего не покажет. Нужна история: сколько было нагрузки, памяти и трафика в каждый момент. Начать можно с двух лёгких утилит и одного скрипта, а когда серверов станет больше — перейти на полноценную систему мониторинга.

sysstat: история нагрузки

sysstat каждые 10 минут сохраняет срез процессора, памяти, диска и сети. Установите и включите сбор:

bash
$ apt install -y sysstat$ sed -i 's/^ENABLED="false"/ENABLED="true"/' /etc/default/sysstat$ systemctl enable --now sysstat

Данные появятся через 10–20 минут. Просмотр:

Что смотретьКоманда
Процессор за сегодняsar -u
Памятьsar -r
Очередь и load averagesar -q
Дискиsar -d -p
Сеть по интерфейсамsar -n DEV
Вчерашний деньsar -u -f /var/log/sysstat/sa$(date -d yesterday +%d)

vnstat: трафик

bash
$ apt install -y vnstat$ systemctl enable --now vnstat$ vnstat$ vnstat -d$ vnstat -l

vnstat показывает трафик по дням и месяцам, а vnstat -l — текущую скорость. Первые данные появятся через несколько минут после запуска.

Проверка сайта с уведомлением в Telegram

Создайте бота через @BotFather в Telegram и получите токен. Напишите боту любое сообщение, затем узнайте свой chat_id: откройте https://api.telegram.org/bot<токен>/getUpdates и найдите поле chat.id.

/usr/local/bin/check-site.sh
$ #!/usr/bin/env bash$ URL="https://example.com/"$ TOKEN="123456:ABC..."$ CHAT="123456789"$ STATE=/var/tmp/check-site.state$ $ code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 15 "$URL")$ if [ "$code" = "200" ]; then status=up; else status=down; fi$ $ # Сообщаем только о смене состояния, чтобы не слать одно и то же каждые 5 минут.$ if [ "$status" != "$(cat $STATE 2>/dev/null)" ]; then$   curl -s "https://api.telegram.org/bot$TOKEN/sendMessage" \    -d chat_id="$CHAT" -d text="$URL: $status (HTTP $code)" > /dev/null$   echo "$status" > $STATE$ fi
bash
$ chmod 700 /usr/local/bin/check-site.sh$ crontab -e
Строка в crontab
*/5 * * * * /usr/local/bin/check-site.sh

Проверьте результат

Временно поменяйте URL на несуществующий адрес и запустите скрипт вручную — в Telegram должно прийти сообщение down. Верните правильный адрес и запустите ещё раз — придёт up.

Когда этого станет мало

  • Netdata — ставится одной командой, собирает сотни метрик раз в секунду и показывает их в веб-интерфейсе. Не открывайте его порт в интернет: смотрите через SSH-туннель.
  • Prometheus с node_exporter и Grafana — стандарт для нескольких серверов: метрики собираются в одном месте, правила алертов задаются кодом.
  • Внешние сервисы проверки доступности — проверяют сайт из разных стран и не зависят от ваших серверов.

Состояние нашей инфраструктуры по странам всегда видно на странице /status.

Дочитайте до конца — статья засчитается в обучении автоматически.

  • мониторинг
  • метрики
  • sar
  • vnstat
  • telegram
  • uptime

Статья помогла?