Как подтвердить отказ, прежде чем будить человека
Одна неудачная проверка — ещё не авария. Мог моргнуть канал связи, мог перезапуститься балансировщик, могла сломаться сеть самого мониторинга. Если будить человека на каждый такой случай, оповещения быстро перестанут читать. Разбираем, какие фильтры стоят в Pulse между первым отказом и пейджем и как настроить их под свой сервис.
6 мин чтения
Сначала — проверить себя
Перед каждым циклом проверок Pulse опрашивает несколько публичных узлов. Это «канарейка»: если большинство узлов не отвечает, проблема скорее в сети самого мониторинга, чем у ваших сайтов. Тогда цикл признаётся неубедительным: мониторы не берутся в работу, результаты не записываются, инциденты не открываются.
Молча такой сбой не проходит. Эндпоинт готовности /api/ready в этот момент сообщает о сбое; он же отвечает 503, если недоступна база или планировщик проверок давно не запускался. Такой адрес и нужно наблюдать снаружи: мониторинг не может сам сообщить о том, что не работает.
Предохранитель от массового падения
Вторая защита нужна, когда сеть вроде бы работает, но ведёт себя странно. Если за один цикл больше половины мониторов должны перейти из «работает» в «недоступен» — при условии, что мониторов в цикле не меньше десяти, — Pulse такой результат не принимает. Успешные проверки записываются, а отказы ставятся на перепроверку через 30 секунд.
Логика простая: одновременное падение многих несвязанных сервисов вероятнее объясняется сбоем на стороне мониторинга, чем совпадением. Перепроверка через полминуты отделит одно от другого.
Порог отказов и быстрая перепроверка
У каждого монитора есть порог — сколько отказов подряд нужно, чтобы открыть инцидент. Пока отказов меньше порога, Pulse не ждёт следующего планового интервала, а назначает перепроверку через 30 секунд. Поэтому при пятиминутном интервале и пороге в два отказа инцидент откроется на перепроверке примерно через полминуты, а не через пять минут.
Порог — компромисс между скоростью и тишиной. Чем он выше, тем реже вас будят зря и тем позже вы узнаёте о настоящей аварии. Для сервиса, который изредка отвечает ошибкой и тут же приходит в себя, порог стоит поднять. Там, где важна каждая минута, его лучше держать минимальным.
Что считать отказом
Часть ложных тревог рождается не в сети, а в настройках: монитор ждёт ровно 200, а сайт отвечает редиректом, или тяжёлая страница иногда отвечает дольше обычного. В Pulse для этого есть:
- Допустимые коды ответа — диапазоном:
2xxили200-299, 301. Пустое поле означает ровно ожидаемый код. - Редиректы можно не проходить — тогда ответ 301 или 307 сам становится результатом проверки.
- Лимит времени ответа. Ответ медленнее лимита — это «деградация»: предупреждение, а не отказ и не инцидент.
- Ключевое слово, заголовок или путь в JSON — чтобы убедиться, что отвечает именно ваше приложение, а не страница-заглушка.
- До четырёх дополнительных адресов в одном мониторе. Они проверяются параллельно с основным; монитор считается работающим, только если ответили все, а текст ошибки называет адрес, который не ответил.
Кворум: отказ должны увидеть несколько точек
Центральная проверка идёт с сервера Pulse в России. Одна точка наблюдения — это одна сеть: если сломался маршрут между нами и вашим сайтом, сайт может быть доступен всем, кроме нас. Против этого работает кворум.
Точкой проверки может стать ваш сервер с агентом Pulse: вы сами разрешаете ему проверять сайты своей организации. Другой вид точек — проберы, отдельные процессы на других площадках, которые проверяют те же мониторы тем же кодом.
В настройках монитора есть «Подтверждение отказа точками» — сколько точек должны увидеть отказ. По умолчанию это одна, то есть решает центральная проверка. Если поставить больше, центральный отказ HTTP-монитора идёт на голосование:
- голосуют только свежие результаты — не старше двух интервалов точки;
- молчащая точка не голосует, и кворум уменьшается до числа живых точек: иначе падение самой точки превращало бы работающий сайт в аварию;
- неподтверждённый отказ записывается как неудачная проверка, но монитор остаётся работающим с пометкой «деградация», и инцидент не открывается;
- восстановление по-прежнему определяет центральная проверка.
Секреты на точки не уезжают. Агент получает только HTTP-мониторы без логина в адресе и без проверки содержимого, и только запросы GET или HEAD. Адреса с параметрами вроде ?token= остаются за центральной проверкой, а агент вдобавок отказывается соединяться с непубличным адресом — и после своего DNS-запроса, и на каждом редиректе. Сервер, включённый в группу мониторов, проверяет только сайты своей группы.
На странице монитора видно, как он выглядит из разных мест, — например, «1 из 2 недоступно». Статус-страница показывает, из скольких локаций сервис недоступен.
Восстановление и флаппинг
Закрыть инцидент так же важно, как открыть. Автоматический инцидент закрывается только после серии успешных проверок подряд, и до этого монитор для всех остаётся недоступным. Инцидент, открытый вручную, сам не закрывается.
Сложнее всего с сервисом, который мигает: упал, поднялся, снова упал. Каждое падение честное, но череда пейджей за полчаса не помогает никому. Поэтому у оповещений свои правила:
- после закрытия инцидента, о котором уже оповестили, пейджи по этому монитору молчат 10 минут;
- если монитор открыл инцидент четыре раза за 30 минут, уходит одно сообщение «нестабилен», и оповещения молчат час; это сообщение получает и текущий дежурный, а за ним — и «восстановлен»;
- у SMS есть дневной лимит по тарифу организации.
Глушатся только оповещения. Инциденты, хронология и эскалация работают как обычно: история остаётся полной, и отчёт за месяц ничего не теряет.
При этом — никогда не молчать
Фильтры не должны превращаться в тишину. Поэтому у доставки свои гарантии:
- каждое оповещение — строка в журнале доставки: канал, замаскированный адрес, статус и попытки; журнал виден на странице инцидента;
- неудачную отправку Pulse повторяет три раза с интервалом в две минуты — но не после восстановления и не после «Подтвердить»: устаревший «недоступен» никого не будит;
- если все каналы уровня эскалации на паузе, удалены или ждут подтверждения получателем, уровень уходит во все рабочие каналы организации, а у каждого молчащего канала в журнале записана причина;
- если не доставлено ничего, оповещение уходит на резервный e‑mail оператора, если он задан.
Плановые работы оформляйте окном обслуживания: пока оно идёт, новые инциденты по затронутым мониторам не открываются. Уже открытый инцидент окно не закрывает.
Короткий чек-лист
- Укажите допустимые коды ответа, если сайт отвечает редиректом.
- Задайте лимит времени ответа: медленный ответ станет предупреждением, а не инцидентом.
- Связанные адреса одного сервиса добавьте в монитор как дополнительные — ошибка назовёт тот, что не ответил.
- Если у вас несколько серверов с агентом, разрешите им проверять ваши сайты и включите подтверждение отказа двумя точками.
- Плановые работы проводите в окне обслуживания.
- Загляните в журнал доставки последнего инцидента: там видно, куда и когда дошло каждое оповещение.
Как устроены дежурства по людям и эскалация — в статье «Дежурство без хаоса». Что видно изнутри сервера — в статье «Агент на сервере».