Перейти к содержанию

Наблюдение за самим DumbMonit

Кто следит за наблюдателем? DumbMonit отвечает двумя частями:

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

Оба находятся в Settings → System → DumbMonit itself, где также показано текущее состояние движка.

Исходящий heartbeat

DumbMonit обращается к вашему URL через регулярные интервалы (по умолчанию 60 секунд), только пока движок здоров:

  • планировщик работает (он завершил цикл за последние две минуты);
  • база данных SQLite отвечает;
  • VictoriaMetrics отвечает.

Когда что-то из этого не выполняется, ничего не отправляется. Сервис «выключателя мёртвого человека» (dead man's switch) ждёт этих обращений и оповещает вас, когда они прекращаются, будь причиной весь хост, контейнер или один компонент.

Настройка

  1. Создайте проверку в выбранном вами сервисе и скопируйте её ping URL:
  2. Healthchecks.io (или собственный Healthchecks): проверка с периодом, равным интервалу, и временем отсрочки чуть больше (https://hc-ping.com/<uuid>);
  3. Uptime Kuma: монитор типа Push (https://kuma.example.com/api/push/<token>?status=up&msg=OK&ping=);
  4. Better Stack: heartbeat (https://uptime.betterstack.com/api/v1/heartbeat/<token>);
  5. любой сервис, принимающий простой GET и оповещающий, когда обращения прекращаются (Cronitor, Dead Man's Snitch…).
  6. В Settings → System → DumbMonit itself вставьте URL, выберите интервал (от 30 до 3600 секунд), включите Send a heartbeat и сохраните.
  7. Нажмите Test: одно обращение уходит сразу, и результат показывается. Сервис должен отметить проверку как работающую.

Обращение — это GET с тайм-аутом 10 секунд. Оно подчиняется той же защите, что и каналы уведомлений: оно никогда не отправляется на собственный веб-интерфейс DumbMonit или на его VictoriaMetrics.

ntfy

ntfy доставляет каждое полученное сообщение, поэтому если направить heartbeat на тему ntfy, вы будете получать уведомление каждую минуту, а не когда обращения прекратятся. Используйте сервис dead man's switch, а ntfy оставьте как канал для самих оповещений.

Сигнал о сбое

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

Сервис URL сбоя
Healthchecks.io, Better Stack /fail добавляется к пути: https://hc-ping.com/<uuid>/fail
Uptime Kuma status=up заменяется на status=down в запросе

Оставьте выключенным для любого другого сервиса: неизвестный URL с /fail в конце, скорее всего, ответит 404, что в любом случае выглядит так, будто ничего не отправляется.

URL — это секрет

Ping URL обычно содержит собственный токен: тот, кто его знает, может заставить вашу проверку выглядеть здоровой. DumbMonit хранит его зашифрованным секретом экземпляра, никогда не возвращает через API (показывается только его хост) и не включает в журналы и сообщения об ошибках. Чтобы изменить его, введите новый; чтобы оставить, оставьте поле пустым. Remove the URL забывает его и выключает heartbeat.

Эта настройка не входит в зашифрованный пакет конфигурации: задайте её снова после восстановления на новом экземпляре.

Встроенные правила

Каждую минуту DumbMonit записывает в VictoriaMetrics несколько измерений о себе, и встроенные правила группы DumbMonit itself читают их. Они ведут себя как все остальные правила: те же каналы, те же отключения, те же пороги для каждого правила в Alerts → Rules.

Правило Срабатывает, когда По умолчанию
DumbMonit data volume almost full Менее 10 % свободного места на томе, где находится /data 15 мин, warning
DumbMonit metrics database restarting in a loop Встроенный VictoriaMetrics перезапускался 3 раза или более за 30 минут 1 мин, critical
DumbMonit scheduler stalled Нет цикла планирования более двух минут 5 мин, critical
DumbMonit polls running late Мониторы остаются просроченными после каждого цикла в течение 15 минут 15 мин, warning
DumbMonit metric writes failing Пакеты, отклонённые VictoriaMetrics, или отброшенные сэмплы за последние 15 минут 5 мин, warning
DumbMonit database growing fast dumbmonit.db более чем удвоилась за сутки и превышает 100 МБ 1 ч, warning
DumbMonit backup did not run Нет успешной локальной резервной копии два дня (подробности) 1 ч, warning

Для вычисления этих правил нужен VictoriaMetrics. Когда сам VictoriaMetrics недоступен насовсем или недоступен весь хост, ни одно правило не может сработать: это задача heartbeat.

Измерения

Метрика Значение
dumbmonit_instance_data_free_bytes Свободное место на томе, где находится /data, для непривилегированного пользователя.
dumbmonit_instance_data_size_bytes Размер этого тома.
dumbmonit_instance_database_bytes Размер dumbmonit.db и её журнала упреждающей записи.
dumbmonit_instance_scheduler_lag_seconds Секунды с момента, когда планировщик последний раз завершил цикл (обычно менее 2).
dumbmonit_instance_scheduler_backlog Мониторы, которым после последнего цикла всё ещё требуется опрос.
dumbmonit_instance_sample_writes_failed_total Пакеты, которые VictoriaMetrics отклонил или на которые не ответил, с момента запуска сервера.
dumbmonit_instance_samples_dropped_total Сэмплы, отброшенные до попадания в буфер записи, с момента запуска сервера.
dumbmonit_instance_vm_restarts_total Перезапуски встроенного VictoriaMetrics с момента запуска сервера (только встроенный).

У них нет метки target: вызываемые ими оповещения не привязаны к монитору. Для собственного Prometheus GET /metrics отдаёт такие же показатели, см. Скрейпинг DumbMonit.

API

Метод Маршрут
GET /api/self-monitoring Состояние движка, том данных, размер базы, настройка heartbeat и последний heartbeat.
PUT /api/self-monitoring/heartbeat { "enabled", "interval_seconds", "send_fail", "url" }. Если url опущен, он сохраняется, "" стирает его.
POST /api/self-monitoring/heartbeat/test Одно обращение сейчас, к { "url" } или к сохранённому URL.

Две записи доступны администраторам (или токену с областью write).