У меня было четыре VPS, два бота и один мониторинг из облака. В то воскресенье прод-сайт лежал четыре часа — и я узнал об этом не из алертов, а из сообщения знакомого. Облачный пробер честно показывал зелёный: он пинговал из-за границы, а хостер как раз резал зарубежный ICMP. Канал алертов к тому моменту я уже заглушил — после двадцати ложных «сайт упал» за месяц читать его перестал. Так мониторинг из «ещё одного сервиса» превратился в собственную задачу: как отличать аварию от гео-блока и не врать тому, кто читает алерты.
Прежде чем писать код, я сформулировал, что именно врёт в готовых решениях. Вышло три отдельные проблемы — и ни одна не решалась настройкой порогов.
Зарубежный пробер видит «down» там, где на самом деле гео-блок, и «up» там, где изнутри страны всё лежит. Точка наблюдения — часть результата.
Одиночный таймаут = «сайт упал». Двадцать таких за месяц — и человек ставит канал алертов на мьют. Дальше можно не мониторить вовсе.
Тот самый мьют плюс блокировки мессенджеров: даже честный алерт должен уметь дойти физически, через собственный релей.
Главное инженерное решение проекта: каждую цель пробуют два независимых контура — один внутри страны, второй на хабе в Германии. Дальше работает не порог, а таблица истинности.
| КОНТУР A (RU) | КОНТУР B (DE) | ВЕРДИКТ | ЧТО ДЕЛАЕТ СИСТЕМА |
|---|---|---|---|
| up | up | доступно | тишина — это тоже сигнал |
| down | down | авария | эскалация, алерт с причиной |
| down | up | частичная доступность | жёлтый статус, проверка гео-блока |
| up | down | частичная доступность | то же, с другой стороны |
Уровень тревоги привязан к длительности, а не к мгновенному значению. Telegram — через собственный релей в обход блокировок, дубль в Max.
Жёлтая карточка в ленте. Никаких уведомлений — сеть дышит, это нормально.
Красный статус, алерт в мессенджеры с причиной и мнением обоих контуров.
«Восстановлен, простой 4 ч 12 мин» — инцидент закрывается сам, с длительностью в журнал.
Вторая половина мониторинга родилась из бытового наблюдения: домашний интернет «работает», но мессенджер не отправляет, а банк крутит спиннер. Проблема последней мили не видна с серверов — её видно на маяках операторов. Теперь карта маяков — часть дашборда: точки по стране, авто-рескан, статусы по операторам. Когда у провайдера региональная авария — видно, у кого именно.
Имя домена — plohoserve.ru, «плохо серверу» — осталось от внутренней шутки первого скрипта. Теперь это домен, который объясняет себя сам.
Это не «ещё один uptime-монитор». Это система, у которой точка наблюдения — часть модели мира: два контура, консенсус вместо порогов, эскалация по длительности и доставка алертов, которая доходит даже когда мессенджеры заблокированы. Написан для себя — и потому работает с 2024 года без единого пропущенного инцидента.
| ЯДРО | Go 1.22 · пробер + консенсус · PostgreSQL 16 |
| КОНТУРЫ | RU-прод и hub-DE · systemd-микроагенты на VPS · hot-reload по SIGHUP |
| ПРОВЕРКИ | TCP / ICMP каждую минуту · маяки операторов с геолокацией |
| АЛЕРТЫ | Telegram через собственный релей · Max · журнал с причиной и длительностью |
| ДОСТУП | plohoserve.ru ↗ — в проде с 2024 |