Живость проверять пульсом данных, а не тем, что код написан
«Наблюдение включено» и «наблюдение пишет данные» — разные утверждения, и второе проверяется только по данным.
Почему это важно
Молчание наблюдателя выглядит одинаково в двух совершенно разных случаях: событий действительно нет, или наблюдатель давно умер. Снаружи отличить невозможно.
И умирает он тихо. Обрыв связи с базой, перезапуск, выключенный флаг, переименованное поле в чужом ответе — любая мелочь, и данные перестают писаться. Никто не узнаёт, потому что признак один: тишина. А тишина ожидаема.
Как это делается
Не спрашивать код, работает ли он. Спрашивать данные: когда была последняя запись.
Для этого у каждого наблюдателя должна быть отметка времени, которую он обновляет на каждом круге — даже когда событий нет. Тогда «событий нет» и «наблюдатель мёртв» становятся разными состояниями: в первом отметка свежая, во втором старая.
Дальше это выносится на страницу: у каждой цифры стоит время. Если время старое, цифра гаснет сама, и читателю не надо догадываться.
Что обычно выясняется
Что часть наблюдателей, которые считались работающими, стоят месяцами. Иногда выясняется и обратное: наблюдатель, который считался снятым, исправно пишет данные, которые никто не читает.
Комментарий в коде — худший источник правды о состоянии системы. Он описывает то, что думал автор в момент написания, а не то, что происходит сейчас.
Чего это не даёт
Свежая отметка времени говорит, что процесс жив, а не что он собирает правильное. Наблюдатель может исправно писать мусор — это отдельная проверка.