ADG Оставить заявку
Блог Системное администрирование 5 мин чтения

Nagios: алерты, а не графики

Ставим Nagios 2.0 с оповещениями по e-mail и SMS: первый же реальный сбой - кончился своп на сервере базы - поймали за минуты вместо утренних жалоб. Что мониторить в первую очередь и как не утонуть в ложных срабатываниях.

Контекст момента

Nagios 2.0 приносит зрелые уведомления и эскалации - мониторинг превращается из графиков в алертинг

Красивые графики никто не смотрел. Это честный вывод после нескольких лет работы с MRTG и самодельными скриптами. Графики висят на внутреннем сервере, выглядят убедительно, показывают трафик, загрузку CPU и место на дисках. Проблема одна: чтобы что-то увидеть, надо туда зайти. А заходишь туда только когда что-то уже сломалось - и в этот момент ты и так знаешь, что сломалось, потому что тебе уже позвонили.

Мониторинг как идею мы обсуждали ещё в 2002-м, но тогда ограничились пингом и самописными проверками. Пора было вырасти.

Почему Nagios

Nagios существует уже несколько лет под именем NetSaint, сменил название, постепенно обрастает экосистемой плагинов. Версия 2.0 вышла в январе, принесла нормальный механизм эскалаций и зависимостей между хостами - именно это нас и убедило.

Главная мысль Nagios простая: система сама замечает проблему и сообщает тебе. Не ты смотришь на графики, а система смотрит на инфраструктуру и кричит когда что-то не так. Это принципиальный сдвиг - из режима «зайди посмотри» в режим «тебя позвали».

Сам Nagios написан на C, конфиги текстовые, плагины - отдельные скрипты на чём угодно. Стандартный набор nagios-plugins покрывает большую часть базовых проверок из коробки: ping, HTTP, SMTP, дисковое место, загрузку, процессы, порты.

Что и как ставили

Развернули на отдельной виртуалке под Debian. Установка несложная, но конфиги Nagios с первого взгляда пугают - там шаблоны, наследование, define-блоки. Разобравшись, понимаешь логику: хосты, сервисы, контакты, временные окна, эскалации - всё отдельными объектами, которые ссылаются друг на друга.

Оповещения настроили двухуровневые. Первый уровень - e-mail дежурному администратору. Если через 30 минут проблема не подтверждена как «видим, работаем» - уходит SMS через шлюз. Для этого нашли простой HTTP-шлюз к SMS-агрегатору, написали скрипт в десяток строк - он и отправляет. Nagios вызывает скрипт при эскалации.

Дополнительно настроили «окна обслуживания» - scheduled downtime. Плановые перезагрузки, обновления, резервное копирование в ночное время - на этот период алерты заглушаются. Без этого Nagios будет орать каждую ночь что СУБД недоступна во время бэкапа.

Первый реальный сбой - и он случился быстро

Прошло три дня после запуска. Около двух ночи Nagios отправил e-mail: «CRITICAL - swap использован на 98%, swap free = 47 MB». Администратор увидел утром - пока нормально, SMS-эскалация на ночь была отключена. Зашли, посмотрели: сервер базы данных медленно течёт по памяти уже несколько дней. PostgreSQL держит открытые соединения, которые не закрываются корректно из приложения, память потихоньку уходит в своп, производительность падает. До этого момента это никак не проявлялось - сервер работал, запросы шли, пусть и медленнее обычного.

Раньше это обнаружили бы утром по жалобам пользователей на тормоза - или не обнаружили бы вообще до момента когда сервер встал. Теперь - нашли за три дня до катастрофы, перезапустили PostgreSQL в плановом окне, разобрались с утечкой соединений в коде.

Вот ради этого и ставили.

Что мониторить в первую очередь

Когда начинаешь, хочется мониторить всё. Это ошибка - через неделю получишь поток алертов, половина которых ложные, и начнёшь их игнорировать. Мы пришли к такому приоритету:

Доступность сервисов. Это важнее метрик. HTTP 200, SMTP отвечает, PostgreSQL принимает соединения, 1С-сервер живой. Если сервис не отвечает - всё остальное неважно.

Дисковое место. Warning на 80%, Critical на 90%. Диск заканчивается предсказуемо, и заблаговременный алерт даёт время разобраться спокойно, а не в панике когда уже 100%.

Свободная память и своп. Память заканчивается по-разному: иногда резко (утечка), иногда постепенно (накопление). Мониторинг свопа - ранний индикатор проблем с памятью, потому что своп начинает расти до того как всё встало.

Загрузка CPU. Но без фанатизма - кратковременные пики нормальны. Ставим порог выше и смотрим на длительность, а не на моментальный снимок.

Время отклика ключевых запросов. Это уже следующий уровень: не просто «сервис живой», а «сервис отвечает за разумное время». Можно делать через check_http с порогом по времени.

Всё остальное - почта, бэкапы, обновления, специфические процессы - добавляем постепенно, по мере появления конкретных поводов.

Ложные срабатывания - это отдельная война

Nagios по умолчанию алертит сразу при первом сбое. Сеть моргнула на секунду - алерт. Это плохо: если алерты приходят часто и оказываются ложными, их перестают читать.

Параметр max_check_attempts решает это: ставим 3-4 попытки перед тем как считать сбой реальным. Между попытками 1-2 минуты. Реальный сбой подтвердится, случайный пинг-пропуск - нет.

Кроме того, правило: если алерт пришёл и ты его не понял - разберись, а не игнорируй. Хронически игнорируемые алерты надо или починить или отключить. Мусор в оповещениях - это хуже чем их отсутствие.

Где это живёт у нас

Сейчас Nagios стоит у нескольких клиентов в рамках сопровождения инфраструктуры. Мониторинг мы держим на нашей стороне - не на серверах клиента, а отдельно - и алерты получаем мы, а не только клиент. Это означает что проблему видим одновременно с её появлением, а не тогда когда нам позвонили.

Это и есть смысл мониторинга с оповещениями: не красивые графики для отчётов, а система которая смотрит за тебя пока ты спишь.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.