Как заменить пять утилит мониторинга одним бинарником на Go

Если вы когда-нибудь поднимали собственный сервер для пет-проектов или небольшого продакшена, вы наверняка сталкивались с зоопарком утилит. Для проверки доступности сайтов ставят Uptime Kuma. Чтобы смотреть логи и статус контейнеров, запускают Dozzle или Portainer. За сроками жизни TLS-сертификатов следит отдельный скрипт, а для мониторинга фоновых cron-задач прикручивают внешний сервис. В итоге на сервер накатывается пачка разрозненных дашбордов, которые в сумме потребляют больше ресурсов, чем сами полезные сервисы.
Французский разработчик Бенжамен Тушар (kOlapsis) решил эту проблему радикально и выложил проект maintenant. Это легковесный инструмент мониторинга, упакованный в один бинарный файл, который заменяет сразу всю цепочку сервисов наблюдения.
Что умеет проект
Основная идея maintenant проста: один контейнер запускается рядом с вашим стеком и сразу начинает собирать метрики без ручной настройки.

Программа подключается к сокету Docker или API Kubernetes и автоматически находит все запущенные контейнеры. Она группирует сервисы по проектам Docker Compose, отслеживает циклы перезапусков (restart loops), статус healthcheck и транслирует логи в реальном времени.


Конфигурация проверок вынесена прямо в лейблы контейнеров. Чтобы отслеживать HTTP или TCP эндпоинт, не нужно открывать интерфейс и заполнять формы. Достаточно прописать параметры в docker-compose.yml:
labels:
maintenant.endpoint.http: "https://api:3000/health"
maintenant.endpoint.interval: "15s"
maintenant.endpoint.failure-threshold: "3"
Когда контейнер стартует, сервис сразу подхватывает настройки, начинает строить графики времени ответа и сохраняет историю доступности.


Вот еще несколько полезных функций, упакованных в этот инструмент:
- Мониторинг сертификатов. Сервис проверяет цепочки TLS и шлет алерты за 30, 14, 7, 3 и 1 день до истечения срока действия.
- Контроль фоновых задач. Вы получаете уникальный URL для cron-скрипта, добавляете вызов через curl в конец скрипта, и система отслеживает время выполнения, коды возврата и пропущенные дедлайны.
- Анализ безопасности сети. Утилита находит опасные конфигурации: биндинг портов на
0.0.0.0, открытые наружу базы данных, работу в режиме host network или запуск в привилегированном режиме. - Проверка обновлений образов. Программа опрашивает OCI-реестры, сравнивает дайджесты и формирует готовые команды для обновления и отката с учетом Compose-проектов.
- Публичная страница статуса. Встроенная страница с поддержкой Server-Sent Events показывает текущее состояние компонентов в реальном времени.


Необычная деталь: в maintenant встроен сервер протокола Model Context Protocol (MCP). Это значит, что вы можете подключить к мониторингу AI-ассистента вроде Claude, чтобы запрашивать логи, статус контейнеров и текущие алерты на естественном языке.
Как устроен стек
Архитектура maintenant понравится тем, кто устал от тяжелых стеков с Prometheus и Grafana. Весь бэкенд написан на Go, а фронтенд на Vue 3 и Tailwind CSS вшит внутрь бинарника через embed.FS.
В качестве базы данных используется обычный SQLite в режиме WAL. Никаких внешних баз вроде Postgres или Redis поднимать не нужно. Потребление оперативной памяти держится в районе 17 мегабайт, поэтому инструмент спокойно работает на копеечных VPS или Raspberry Pi.
Интерфейс не опрашивает сервер постоянным поллингом. Все обновления приходят через Server-Sent Events (SSE).
У проекта нет встроенной системы пользователей и паролей. Разработчик сделал это намеренно: предполагается, что вы закроете панель через обратный прокси (Traefik, Nginx или Caddy) со связкой Authelia, Authentik или базовой авторизацией. При этом ручки для вебхуков и публичная страница статуса могут оставаться открытыми наружу.
Быстрый запуск
Развернуть мониторинг можно за полминуты через Docker Compose:
services:
maintenant:
image: ghcr.io/kolapsis/maintenant:latest
ports:
- "8080:8080"
read_only: true
security_opt:
- no-new-privileges:true
tmpfs:
- /tmp:noexec,nosuid,size=64m
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /proc:/host/proc:ro
- maintenant-data:/data
environment:
MAINTENANT_ADDR: "0.0.0.0:8080"
MAINTENANT_DB: "/data/maintenant.db"
restart: unless-stopped
volumes:
maintenant-data:
Контейнер работает от непривилегированного пользователя nobody. Скрипт инициализации сам определяет группу сокета /var/run/docker.sock на хосте и подключается к нему в режиме чтения. Никаких правок внутри ваших контейнеров программа не делает.
Модели лицензирования
Базовая версия (Community Edition) распространяется под лицензией AGPL-3.0. Она бесплатна и покрывает нужды одного сервера: автопоиск контейнеров, метрики, проверки до 10 эндпоинтов, до 5 сертификатов и cron-задач, алерты в Discord и через вебхуки.

Для тех, кому нужны агенты на нескольких машинах (до 20 хостов через gRPC-стримы), неограниченное число проверок и сканирование CVE, автор предлагает пожизненную лицензию Personal за разовую оплату. Для команд есть подписка Pro с интеграцией Slack, Teams и цепочками эскалации алертов.
Кому проект пригодится
Maintenant отлично закрывает нишу, где тяжелый стек мониторинга избыточен, а настраивать связку из трех отдельных сервисов лень.
Если вы держите домашний сервер, пару VPS с микросервисами или управляете инфраструктурой небольшого стартапа, проект сэкономит кучу времени. Достаточно прописать пару строк в Compose-файлах, и вся базовая наблюдаемость уже работает. Исходники открыты на GitHub, так что протестировать инструмент на своих контейнерах можно прямо сейчас.
