Два слоя. Изнутри следит наблюдатель на сервере агентов, снаружи — Uptime Kuma на отдельной машине у другого провайдера.
Разделение не случайно: наблюдатель, стоящий на той же машине, за которой следит, ляжет вместе с ней и промолчит ровно тогда, когда нужен.
Uptime Kuma — https://monitor.tvoe.es, живёт на vls17831.dinaserver.com. Следит за сайтами ex-bazar, их сертификатами и живостью трёх серверов. Туда же три сервера сами сообщают о своём состоянии.
Наблюдатель агентов — контейнер devsystem-monitor на сервере агентов. Каждую минуту проверяет контейнеры, место на диске, живость claude, остаток подписки и доступность стендов. Пишет в Telegram.
Признак жизни наружу — /opt/devbot/heartbeat.sh по расписанию раз в минуту. Смотрит отметку, оставленную наблюдателем, и стучится в healthchecks.io.
| Что случилось | Как узнаем |
|---|---|
| Упал контейнер агента | наблюдатель, тревога в Telegram |
| Умер сам наблюдатель | сценарий видит устаревшую отметку и говорит «сервер жив, следить некому» |
| Умер сервер целиком | сценарий не запустился, healthchecks замечает молчание |
| Лёг сайт | Uptime Kuma со стороны |
| Кончилось место или память | сервер перестаёт слать сигнал, Kuma поднимает тревогу |
На каждом сервере лежит короткий сценарий, который раз в пять минут смотрит диск и память и сообщает наблюдателю, что всё в норме. Вышло за порог — сообщает о беде прямо. Не отработал вовсе — молчание, и тревогу поднимает Kuma.
Пороги: диск 85%, память 90%. На боевой машине ex-bazar есть ещё проверка свежести ночного дампа базы.
Переменные в файле настроек должны быть с export. Без него cron читает файл, но сценарию ничего не достаётся — проверка молча не работает.