← Все статьи

SiteGuard13 мин чтения

Как заметить отказ самого мониторинга: свежесть проверок и независимый контроль

Мониторинг системы мониторинга нужен, чтобы заметить остановку проверок, потерю данных или отказ уведомлений. Если сайт не работает, а предупреждений нет, возможны две разные ситуации: проверяемый сценарий ещё не обнаружил проблему либо сам механизм наблюдения перестал выполнять свою работу. Зелёный индикатор без свежего измерения не позволяет отличить исправность от отсутствия информации.

Для владельца сайта это вполне прикладная задача. Реклама продолжает приводить людей, заявки не поступают, а последнее сообщение от системы контроля было вчера. Поэтому вместе с доступностью страниц стоит отслеживать время последней завершённой проверки и работоспособность пути, по которому предупреждение доходит до ответственного.

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

Почему отсутствие тревог ещё ничего не доказывает

Между запросом к сайту и сообщением специалисту работает несколько звеньев. Планировщик запускает проверку, исполнитель получает результат, хранилище сохраняет измерение, правило оценивает его, а канал доставки передаёт предупреждение. Интерфейс может оставаться доступным, когда один из этих этапов уже остановился.

Представим условный магазин: исполнитель проверок завершился после обновления, но панель продолжает показывать последний успешный ответ. Или результаты приходят, однако правило отключено при технических работах. В обоих случаях экран выглядит спокойно, хотя причины этого спокойствия различаются. Проверка только доступности панели не обнаружит ни одну из проблем.

В рекомендациях Prometheus по оповещениям контроль самой инфраструктуры наблюдения выделен отдельно. Документация предлагает дополнять внутренние показатели внешней проверкой прохождения сигнала через цепочку. Практический вывод: нужно знать не только состояние отдельных компонентов, но и способен ли весь механизм сообщить о проблеме.

Как измерять свежесть данных правильно

Начните с простого вопроса: когда последний раз завершилась именно эта проверка? Возраст результата — разница между текущим временем и временем её завершения. Если проверка выполняется регулярно, слишком старый результат означает потерю наблюдения независимо от того, был он положительным или отрицательным.

Не смешивайте три разных отметки времени. «Последний запуск» подтверждает старт работы. «Последний завершённый результат» подтверждает получение вывода, включая ошибку сайта. «Последний успешный ответ сайта» показывает, когда проверяемая страница соответствовала условиям. Для контроля самого мониторинга главным обычно становится второй показатель.

Что видимЧто это означаетКак реагировать
Свежий положительный результатПроверка завершилась, её условия выполненыПродолжать наблюдение
Свежий отрицательный результатМеханизм работает, но обнаружил проблемуРазбирать состояние сайта
Старый положительный результатТекущее состояние неизвестноПроверить выполнение и доставку измерений
Никогда не было результатаПроверка не подтверждена даже первоначальноВыполнить приёмочный запуск

Дополнительно различайте время события и время его поступления. Буфер может отправить накопленные результаты после восстановления сети: они только что появились в хранилище, но описывают прошлое. Панель должна показывать возраст самого измерения. Если часы на узлах расходятся, сначала устраните это расхождение; отрицательный возраст или скачок времени нельзя трактовать как особенно свежие данные.

Контролируйте свежесть по каждой важной проверке. Общая отметка «обновлено минуту назад» способна относиться к главной странице, пока контроль формы остановлен. Список ожидаемых проверок должен быть задан отдельно: исчезнувшая запись не должна незаметно исчезать и из списка того, что требуется проверять.

Как работает dead man switch и watchdog мониторинга

Dead man switch — схема, при которой независимый получатель регулярно ожидает контрольный сигнал. Пока сигнал приходит вовремя, механизм считается наблюдаемым. Если ожидаемое сообщение не поступило за установленный срок, получатель поднимает тревогу. Такой подход удобен именно для отказа, при котором сломавшаяся система сама ничего сообщить уже не может.

Название watchdog мониторинга часто используют для похожего сторожевого механизма. Важно договориться о конкретном поведении: один watchdog только уведомляет, другой ещё пытается перезапустить процесс. Автоматический перезапуск требует отдельного решения; для обнаружения потери наблюдения он не обязателен.

Документация Healthchecks.io описывает ожидание регулярных сигналов и дополнительный допустимый интервал опоздания. Это пример реализации принципа, а не требование выбрать определённый продукт. В собственной схеме можно использовать другой независимый приёмник, если понятны условия ожидания и доставки тревоги.

Главная ошибка — отправлять heartbeat из отдельного бесконечного цикла, который никак не связан с проверками. Такой цикл продолжит сообщать «всё живо», пока исполнитель зависает. Лучше связывать контрольный сигнал с подтверждённым завершением нужного этапа. При этом отрицательный ответ сайта тоже является результатом выполненной проверки: heartbeat не должен пропадать только потому, что сайт вернул ошибку.

Как определить, что именно подтверждает контрольный сигнал

Один heartbeat редко доказывает исправность всей цепочки. Сигнал после сохранения результатов подтверждает работу исполнителя и запись данных, однако ничего не говорит о доставке предупреждения человеку. Поэтому полезно отдельно описать границу каждой контрольной проверки.

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

Для небольшого проекта можно начать с возраста последней проверки и периодического тестового уведомления. Для критичного процесса добавьте автоматический сквозной сигнал. В нём нужен узнаваемый идентификатор запуска: получатель должен отличать новое сообщение от повторно доставленного старого.

Не считайте принятие сообщения внешним API подтверждением того, что сотрудник его увидел. Это разные этапы. Технический тест проверяет доставку до выбранной границы, а дежурство и подтверждение принятия инцидента обеспечиваются процессом работы команды.

Как выбрать порог устаревания без постоянных ложных тревог

Порог зависит от периода запуска, допустимой длительности проверки и задержек доставки. Если система обычно запускается раз в минуту, но запросу разрешено выполняться двадцать секунд, тревога ровно через минуту после предыдущего старта будет слишком чувствительной. Сначала определите, от какой отметки идёт отсчёт: начала, завершения или получения сигнала.

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

К порогу добавляется собственный период опроса независимого получателя и время доставки уведомления. В Prometheus отдельно учитывайте выдержку for в правиле, если она задана: условие должно сохраняться в течение этого времени. Поэтому «порог три минуты» не равен гарантированному сообщению через три минуты после любого отказа. Проверьте фактическое время в эксперименте и оставьте запас для обычных колебаний.

Для ручного обслуживания предусмотрите ограниченную по времени паузу с владельцем и причиной. Бессрочное отключение watchdog превращает временную меру в постоянную слепую зону. После окончания работ требуется свежее измерение, а не просто снятие отметки о паузе.

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

Что проверять в сборщике и хранилище результатов

Запущенный процесс может перестать выполнять полезную работу. Он способен ждать зависший запрос, упереться в очередь или записывать результаты в недоступное хранилище. Поэтому состояние «процесс существует» полезно как диагностическая подсказка, но недостаточно как подтверждение работоспособности.

Проверьте число ожидаемых и завершённых заданий за выбранное окно, задержку очереди, ошибки записи и доступность свежих результатов для чтения. Необязательно сразу собирать десятки показателей. Начните с тех, по которым можно ответить: какая проверка должна была завершиться и почему её результата нет.

В Prometheus функция absent_over_time() возвращает единичный результат, только если за выбранный интервал нет ни одного подходящего образца. Широкий селектор нескольких проверок не обнаружит исчезновение одной, пока другая продолжает присылать данные. Для отдельных маршрутов задайте точные метки ожидаемой проверки либо сравнивайте полученные ряды с отдельным реестром.

Учебный пример предполагает ровно один ожидаемый ряд с указанными метками. Собственная метрика site_check_last_completed_timestamp_seconds содержит время завершения проверки в секундах Unix, включая отрицательный результат сайта. Два выражения для отдельных правил:

time() - site_check_last_completed_timestamp_seconds{job="site-checker",check="catalog"} > 180

absent_over_time(site_check_last_completed_timestamp_seconds{job="site-checker",check="catalog"}[3m])

Первое условие проверяет возраст результата больше 180 секунд, второе — отсутствие образцов за три минуты. time() обозначает время вычисления выражения. Не подменяйте значение метрики функцией timestamp(): она возвращает время образца, а не завершения задачи.

Проверьте два отказа на тестовой проверке. Заморозьте значение времени завершения, сохраняя экспорт новых образцов: сработать должно первое условие. Затем прекратите экспорт только ряда catalog, оставив другие проверки работающими: после опустошения трёхминутного окна должно сработать второе. Имена метрик и меток здесь условные; их нужно реализовать в вашей системе.

Правило, вычисляемое внутри остановившегося экземпляра Prometheus, не сможет сообщить о его собственной полной остановке. Для этого и нужен внешний наблюдатель. Аналогично копия панели на другом сервере не обеспечивает независимость, если она получает данные из того же недоступного хранилища.

Как проверить канал уведомлений целиком

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

Создайте служебное тестовое условие, которое проходит обычную цепочку обработки. В сообщении явно укажите, что это проверка доставки, чтобы не запускать ненужный разбор производственного инцидента. Для автоматического контроля независимый получатель должен ожидать именно этот сигнал и фиксировать его отсутствие.

В настройках Alertmanager маршруты, получатели и интервалы отправки задаются отдельно. Поэтому успешное вычисление правила ещё не подтверждает корректность конечного маршрута. Для новой группы Alertmanager ждёт group_wait; если тестовая тревога разрешится раньше, сообщение о ней не отправится. Согласуйте длительность теста с настройками ожидания. Проверяйте маршрут после изменения адресатов, группировки, секретов и правил подавления уведомлений.

Запишите границы теста. Доставка в технический почтовый ящик не доказывает доставку в личный ящик сотрудника; тестовый канал мессенджера не подтверждает права рабочего бота в другом чате. Чем ближе маршрут теста к реальному, тем полезнее результат. При этом технические сообщения не должны содержать пароли, полные пользовательские запросы или персональные данные.

Что делает резервный контроль действительно независимым

Независимость определяется общими точками отказа. Два процесса на одном сервере одновременно исчезнут при его выключении. Два внешних сервиса могут отправлять предупреждения в один недоступный почтовый домен. Отдельный канал не помогает, если доступ к нему есть только у сотрудника, который сейчас недоступен.

Для своей схемы перечислите инфраструктуру, сеть, DNS, хранилище, учётные записи и пути доставки. Затем выберите, какие общие зависимости необходимо разделить с учётом важности сайта. Не требуется строить полностью дублирующую инфраструктуру для каждой страницы; полезнее закрыть несколько конкретных сценариев отказа.

Общая зависимостьЧто проверить
Сервер или площадкаСохранится ли резервное наблюдение при их отключении
Сеть и DNSСможет ли независимый получатель принять сигнал и отправить тревогу
Канал уведомленийЕсть ли отдельный рабочий способ связаться с ответственным
Доступ сотрудниковКто сможет проверить ситуацию при отсутствии основного специалиста

Если внешний сервис не предоставляет heartbeat или данные о свежести проверок, не подменяйте их проверкой его главной страницы. Уточните доступные способы подтверждения работы и при необходимости добавьте независимую проверку ключевого URL своего сайта. Она даёт резервный сигнал о сайте, но не диагностирует все внутренние неисправности основного сервиса.

Как безопасно проверить отказ самого мониторинга

Работоспособность схемы лучше подтверждать контролируемым испытанием. Выберите стенд или отдельную тестовую проверку, согласуйте время и заранее определите способ возврата. Не останавливайте производственное наблюдение целиком ради проверки, если можно изолировать эксперимент.

  1. Зафиксируйте исходное состояние. Есть свежий результат, контрольный сигнал и доступный получатель.
  2. Остановите один тестовый этап. Например, прекратите heartbeat отдельной проверки, оставив сайт доступным.
  3. Дождитесь ожидаемого перехода. Состояние должно стать «нет свежих данных», а не оставаться зелёным.
  4. Проверьте доставку. Запишите время нарушения, обнаружения и получения сообщения.
  5. Восстановите этап. Убедитесь, что пришёл новый результат и предупреждение корректно завершилось.

Другим тестом проверьте остановку доставки при продолжающемся сборе данных. Затем отдельно убедитесь, что обычная ошибка сайта вызывает обычное предупреждение, а не ошибочно объявляет неисправным сам мониторинг. Эти ситуации требуют разных действий, поэтому сообщения должны различаться.

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

Пример: как выглядит потеря наблюдения по времени

Рассмотрим учебный сценарий с проверками раз в минуту. Последний результат сохранён в 12:00:10, исполнитель остановился в 12:00:20. Независимый получатель проверяет возраст данных каждые тридцать секунд, на нулевой и тридцатой секундах минуты. Порог устаревания составляет три минуты, доставка сообщения в примере занимает двадцать секунд.

ВремяСобытиеЧто известно команде
12:00:10Сохранён успешный результатПроверенные условия были выполнены в этот момент
12:00:20Исполнитель остановилсяАвтоматического подтверждения отказа пока нет
12:03:10Возраст результата достиг трёх минутСледующая независимая оценка ещё впереди
12:03:30Получатель обнаружил превышение порогаСформировано предупреждение о потере наблюдения
12:03:50Уведомление доставленоОтветственный может начать проверку

От остановки исполнителя до сообщения прошло три минуты тридцать секунд. Это результат выбранных условий примера, а не обещание конкретного инструмента. Если обработка уведомлений задержится, итоговый интервал увеличится. Если остановка произойдёт в другой момент относительно последней проверки, изменится и задержка от фактического отказа.

Теперь предположим, что исполнитель восстановлен в 12:05:00, но первый новый результат получен только в 12:05:40. Именно второе событие подтверждает возврат наблюдения за проверяемым сценарием. Интервал без свежих данных нельзя автоматически записать как простой магазина: покупатели могли всё это время оформлять заказы.

Такая временная шкала помогает обсуждать настройки с подрядчиком предметно. Вместо вопроса «почему не сразу?» можно выяснить, где появляется задержка: в расписании, пороге, опросе независимого получателя или доставке. Затем менять именно этот участок, если бизнесу нужно быстрее узнавать об отказе.

Что делать после сообщения «нет свежих проверок»

Сначала независимо выясните, работает ли критическое действие на сайте. Отсутствие измерений само по себе не доказывает простой, но лишает команду привычного подтверждения. Откройте нужную страницу, выполните разрешённую проверку формы или используйте заранее подготовленный резервный способ наблюдения.

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

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

Не забудьте защитить сам контрольный сигнал. Если любой человек может отправить heartbeat по опубликованному адресу, он способен поддерживать видимость исправности при остановленных проверках. Храните секретные адреса и ключи в предназначенном для этого хранилище, ограничивайте доступ и меняйте их при раскрытии. В отчёте об испытании достаточно идентификатора проверки; полный секретный URL туда переносить не нужно.

Полезная карточка контроля помещается в несколько полей: название проверки, её владелец, ожидаемый период, точка формирования heartbeat, порог устаревания, независимый получатель и резервный контакт. Добавьте дату последнего испытания и ссылку на инструкцию восстановления. Эта карточка помогает новому специалисту понять смысл тревоги без изучения всей инфраструктуры.

Вопросы о контроле системы мониторинга

Обязательно ли покупать второй сервис?

Нет универсального требования. Нужен независимый способ заметить потерю наблюдения и получить сообщение. Для небольшого проекта достаточно простой резервной проверки и регулярного теста доставки; для критичных операций может потребоваться отдельный автоматический получатель heartbeat.

Доказывает ли heartbeat, что сайт работает?

Только если это явно входит в его условия, и даже тогда — в пределах конкретной проверки. Обычно heartbeat подтверждает выполнение механизма наблюдения. Свежий результат «сайт недоступен» совместим с исправным heartbeat.

Кто проверит сам watchdog?

Абсолютная цепочка без последнего звена невозможна. Выберите приемлемую схему независимости, периодически проверяйте доставку и сохраняйте резервный способ оценки сайта. Цель — уменьшить конкретные слепые зоны до разумного для бизнеса уровня.

С чего начать владельцу сайта

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

Для внешнего контроля HTTP-доступности важных страниц используйте SiteGuard. Свежесть измерений, независимый watchdog и проверку доставки тревог включите в отдельный регламент команды.