Когда сервер тормозил ночью, top утром ничего не покажет. Нужна история: сколько было нагрузки, памяти и трафика в каждый момент. Начать можно с двух лёгких утилит и одного скрипта, а когда серверов станет больше — перейти на полноценную систему мониторинга.
sysstat: история нагрузки
sysstat каждые 10 минут сохраняет срез процессора, памяти, диска и сети. Установите и включите сбор:
$ 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 average | sar -q |
| Диски | sar -d -p |
| Сеть по интерфейсам | sar -n DEV |
| Вчерашний день | sar -u -f /var/log/sysstat/sa$(date -d yesterday +%d) |
vnstat: трафик
$ apt install -y vnstat$ systemctl enable --now vnstat$ vnstat$ vnstat -d$ vnstat -lvnstat показывает трафик по дням и месяцам, а vnstat -l — текущую скорость. Первые данные появятся через несколько минут после запуска.
Проверка сайта с уведомлением в Telegram
Создайте бота через @BotFather в Telegram и получите токен. Напишите боту любое сообщение, затем узнайте свой chat_id: откройте https://api.telegram.org/bot<токен>/getUpdates и найдите поле chat.id.
$ #!/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$ chmod 700 /usr/local/bin/check-site.sh$ crontab -e*/5 * * * * /usr/local/bin/check-site.shПроверьте результат
Временно поменяйте URL на несуществующий адрес и запустите скрипт вручную — в Telegram должно прийти сообщение down. Верните правильный адрес и запустите ещё раз — придёт up.
Когда этого станет мало
- Netdata — ставится одной командой, собирает сотни метрик раз в секунду и показывает их в веб-интерфейсе. Не открывайте его порт в интернет: смотрите через SSH-туннель.
- Prometheus с node_exporter и Grafana — стандарт для нескольких серверов: метрики собираются в одном месте, правила алертов задаются кодом.
- Внешние сервисы проверки доступности — проверяют сайт из разных стран и не зависят от ваших серверов.
Состояние нашей инфраструктуры по странам всегда видно на странице /status.