Перейти к содержимому

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ПравилоСрабатывает, когдаПо умолчанию
DumbMonit data volume almost fullМенее 10 % свободного места на томе, где находится /data15 мин, 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 fastdumbmonit.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.

МетодМаршрут
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).