
MirvMon — self-hosted-система мониторинга серверов и сайтов для домашней и небольшой рабочей инфраструктуры.
Она рассчитана на ситуацию, когда одному администратору или небольшой команде нужен понятный обзор собственной инфраструктуры без развёртывания тяжёлого enterprise-стека. Нативные агенты сами отправляют данные на сервер по HTTPS, поэтому наблюдаемым машинам не нужны входящие порты или белые IP-адреса.
MirvMon хранит историю метрик и доступности, следит за сайтами и сервисами, умеет проверять сайты сразу из нескольких точек через уже установленные серверные агенты, ведёт инциденты и проактивные наблюдения, считает показатели надёжности, умеет публиковать безопасную status page, отправляет уведомления, позволяет централизованно обновлять агентов и восстанавливать систему из резервной копии через единый веб-интерфейс.

Основные возможности
- мониторинг Linux и Windows нативным Go-агентом;
- исходящие HTTPS-соединения от агентов без необходимости открывать входящие порты;
- метрики CPU, RAM, дисков, I/O, сети, температуры, uptime, процессов и системных сервисов;
- история и графики на PostgreSQL + TimescaleDB с периодами от часа до года;
- группы серверов, оперативные сводки и live-обновление интерфейса;
- пороговые warning/critical-состояния, recovery и единая лента Incidents / Events;
- Telegram и SMTP через outbox с retry/backoff и индивидуальными получателями;
- графики в уведомлениях для серверных метрик и измеряемых проверок сайтов;
- maintenance windows без остановки сбора данных и с post-maintenance уведомлением для сохранившихся проблем;
- проактивные Observations для необычных CPU/RAM-паттернов и прогноза заполнения дисков;
- оценка исходов predictive observations для последующего анализа качества без автоматического переобучения детектора;
- отчёт о надёжности серверов и сайтов за 7/30 дней: availability, coverage, инциденты и среднее время восстановления;
- opt-in публичная status page с явно выбранными объектами и публичными именами;
- мониторинг HTTP/HTTPS-сайтов: несколько endpoint, допустимые статусы, redirects, TLS, проверка текста, auth/headers, время ответа и сроки доменов;
- распределённые transport HTTP(S)-проверки сайтов через выбранные серверные агенты с Central MirvMon как обязательной точкой и настраиваемым failure quorum;
- диагностика очереди website checks и ручной requeue исчерпанных заданий;
- установка и самообновление агентов из веб-интерфейса, массовое обновление и обзор версий парка;
- совместимые сборки и сценарии обновления для legacy Windows и SysV-систем;
- самодиагностика MirvMon, PostgreSQL/TimescaleDB, worker’ов, очереди уведомлений и хоста;
- проверка внешней сетевой связности по контрольным узлам и кворуму;
- роли user, operator и admin;
- append-only журнал административных действий;
- зашифрованный Backup & Disaster Recovery с переносом действующих credentials агентов;
- русский и английский интерфейс;
- Docker/Portainer-развёртывание, multi-arch образы amd64/arm64 и работа за reverse proxy.
Проактивные наблюдения
Обычный пороговый мониторинг отвечает на вопрос: «что уже вышло за допустимые пределы?» Отдельный слой Observations пытается раньше заметить другое: «что ведёт себя необычно для конкретного сервера, хотя warning ещё не достигнут?»
Для CPU и RAM MirvMon строит контекстный профиль по истории до восьми недель. Нагрузка сравнивается прежде всего с тем же днём недели и локальным временем, затем с более широкими временными контекстами. Поэтому обычные дневные 25–70% CPU не должны считаться аномалией только потому, что ночью этот же сервер работает на 5–10%.
Одно непрерывное отклонение считается одним эпизодом даже при изменении уровня нагрузки. Кратковременное ослабление признака аномалии не считается восстановлением: для закрытия observation требуется устойчивый возврат к нормальному диапазону. Если нагрузка уже дошла до обычного warning threshold, сигнал передаётся incident pipeline, а observation не создаёт конкурирующую аварию.
Для дисков MirvMon анализирует тренд заполнения и оценивает время до warning-порога и полного заполнения. После заметной очистки старый тренд не продолжается механически — начинается новый участок анализа. Алиасы одного filesystem объединяются, чтобы один и тот же диск не порождал несколько одинаковых прогнозов.
Оператор может отметить эпизод как Проверено, не обучая систему считать его нормой. Отдельное действие Считать это нормальным создаёт обратимое контекстное исключение: учитываются день недели, время и диапазон нагрузки, поэтому, например, подтверждённый ночной backup не должен подавлять похожую нагрузку в рабочее время.
Начиная с v0.8.0 исход каждого predictive-эпизода можно отдельно оценить как полезный сигнал, обычное поведение, предотвращённую действием проблему или неясный результат. Эта оценка нужна для анализа качества и не меняет работу детектора.
Подробнее об истории появления Observations →
Распределённые проверки сайтов
Начиная с ветки 0.9 один сайт может проверяться не только самим MirvMon, но и выбранными серверными агентами. Central MirvMon участвует всегда, а агенты становятся дополнительными точками наблюдения без новых входящих портов: задания и результаты проходят через существующий outbound-only протокол агента.
Для сайта задаётся failure quorum — сколько точек должны одновременно видеть transport failure, чтобы проверка считалась неуспешной. Отсутствующий или устаревший результат агента считается неизвестным состоянием, а не отказом.
Удалённые агенты выполняют только transport HTTP(S)-проверку. TLS expiry, срок регистрации домена, content/status assertions и другие семантические проверки остаются централизованными. Auth secrets и custom headers агентам не передаются; endpoint, который нельзя безопасно отдать агенту, автоматически проверяется с effective quorum 1 только через Central.
На карточках сайтов видны состояния точек и текущий quorum, а во вкладке событий хранится компактная семидневная история переходов по каждой точке.
Надёжность и публичный статус
Раздел Аналитика → Отчёт о надёжности собирает эксплуатационную картину за 7 или 30 дней: доступность, полноту наблюдений, число и длительность инцидентов и среднее время восстановления для серверов и сайтов.
Для распределённо проверяемых сайтов availability использует ту же transport-семантику, что и live monitoring: свежие результаты Central и выбранных agents сравниваются с failure quorum, а assertions остаются Central-only. В отчёте видно количество точек и quorum.
Если сайт наблюдается меньше выбранного периода, MirvMon всё равно показывает availability по реально полученным автоматическим проверкам и помечает результат как «Неполный период» при coverage ниже 95%. Для серверов строгий порог полноты 95% сохраняется.
Публичная страница /status включается только явно. Администратор выбирает конкретные серверы и сайты и задаёт им публичные имена. По умолчанию список пуст; внутренние адреса, метрики и подробности инцидентов наружу не публикуются.
Maintenance windows
Режим обслуживания в MirvMon означает «не будить оператора», а не «перестать наблюдать». Во время maintenance агенты и website checks продолжают работать, метрики и история сохраняются, а alerts/incidents фиксируются как обычно.
Если проблема возникла во время обслуживания и остаётся активной после окончания окна, MirvMon отправляет одно явно помеченное post-maintenance уведомление. Если проблема успела начаться и закончиться внутри maintenance, догоняющей пары trigger/recovery после окна не будет.
Состояние проекта
Статус: активная разработка; актуальный стабильный релиз — .
Платформы: сервер — Docker/Portainer; агенты — Linux и Windows.
Технологии: PHP 8.5, Slim 4, Twig 3, FrankenPHP, PostgreSQL 17, TimescaleDB, Go, Bootstrap 5, Chart.js.
Лицензия: MIT.
Подробнее о распределённых проверках в MirvMon v0.9.3 →
Ссылки
Исходный код · Релизы · Установка · Скриншоты · Сообщить об ошибке
The Settings → Notifications page now has a single, responsive configuration form containing three first-class delivery methods: Email (SMTP), Telegram Bot, and ChimePort. No database migration, agent protocol change or new service is required. Legacy POST endpoints continue to work for older forms, but the current UI uses unified save and per-transport test endpoints. Existing SMTP, Telegram and ChimePort settings persist unchanged when upgrading. Pull/redeploy In Settings → Notifications, the dedicated ChimePort card allows administrators to enable/disable notifications, enter a server HTTPS address, configure a channel slug (e.g. The source token is encrypted at rest in PostgreSQL using the same existing MirvMon SecretCipher and APP_KEY as the SMTP and Telegram secrets. It is never returned to the browser. After CI publishes The old token file may be retained until the web migration has been verified. Pull and redeploy Новых SQL-миграций, обязательных переменных окружения и изменений протокола агентов нет. Установленные агенты обновлять или переустанавливать не нужно. После успешной публикации multi-arch образа используйте Настройки контроля соединения, сохранённые в интерфейсе, сохраняются при обновлении. Для сетей с нестабильным DNS можно использовать IP-адреса контрольных целей, например This supersedes the unpublished v0.9.6 candidate, which was not released because its CI contract tests still expected outdated runtime and documentation pins. No migrations, application API or agent protocol changes. Existing agents remain compatible. Use Схема БД, agent protocol и backend API не меняются. Новых Compose services и обязательных переменных окружения нет. Обновление агентов не требуется. Используйте Схема БД и agent protocol в v0.9.4 не меняются. Новых Compose services и обязательных переменных окружения нет. Обновление агентов не требуется. Используйте Agent protocol и схема БД в v0.9.3 не меняются. Новых Compose services и обязательных переменных окружения нет. Существующие агенты с capability Используйте Agent protocol в v0.9.2 не менялся. Remote agents по-прежнему используют capability Версия содержит одну миграцию БД. Она автоматически исправляет старые сайты с отключённым Central MirvMon и закрепляет Central как обязательную точку проверки. Используйте Изменений схемы БД и agent protocol в v0.9.1 нет. Распределённые проверки используют введённую в v0.9.0 capability Используйте Источник: GitHub Releases · данные кэшируются на сервере.
История релизов
v0.9.11 — MirvMon v0.9.11
MirvMon v0.9.11 — Unified notifications settings
Interface
Compatibility
Deployment
ghcr.io/mirivlad/mirvmon:0.9.11 through Portainer while keeping the existing PostgreSQL and application volumes. Check the notifications settings page and independent tests. Telegram remains enabled.v0.9.10 — MirvMon v0.9.10
MirvMon v0.9.10 — ChimePort settings in the web UI
New admin interface
servers), enter or replace the masked source token, and queue a ChimePort-only test message.Safe upgrade and compatibility
034_chimeport_web_settings.sql adds optional settings columns.Deploy
ghcr.io/mirivlad/mirvmon:0.9.10, back up PostgreSQL and re-pull/redeploy MirvMon in Portainer with app_data and db_data preserved. Confirm /readyz, test the ChimePort-only action, and verify existing Telegram notifications.v0.9.9 — MirvMon v0.9.9
MirvMon v0.9.9 — ChimePort as a parallel notification channel
Changes
429/Retry-After backoff.CHIMEPORT_CHANNEL=servers, all MirvMon alerts and recoveries go to one user channel called Серверы (slug servers).033_chimeport_notifications.sql safely extends notification_outbox_channel_check. Existing events and Telegram/email notification records are preserved.docs/CHIMEPORT.md.Compatibility
CHIMEPORT_ENABLED=0 by default.Deployment
ghcr.io/mirivlad/mirvmon:0.9.9 (linux/amd64, linux/arm64) in Portainer with the existing app_data and db_data volumes intact. Follow docs/CHIMEPORT.md for token provisioning and CHIMEPORT_CHANNEL=servers. Keep Telegram enabled.v0.9.8 — MirvMon v0.9.8
MirvMon v0.9.8 — стабильная проверка интернета и выравнивание настроек
Исправления
offline теперь требует трёх последовательных неудачных проверок (с учётом заданного кворума). Одиночные ошибки больше не порождают ложные циклы отключения/восстановления и Telegram-спам.online подтверждается двумя последовательными успешными проверками. При прерывании серии счётчик сбрасывается.unknown, а не ошибочный online.connectivity_probe_failed_targets содержат адреса неудавшихся проверок, классы ошибок DNS/timeout/TCP/cURL, фактическую длительность проверки и последнее подтверждённое состояние.Совместимость
Обновление
ghcr.io/mirivlad/mirvmon:0.9.8 (linux/amd64, linux/arm64). В Portainer выполните Re-pull image and redeploy, сохранив тома app_data и db_data.1.1.1.1:443, 8.8.8.8:443, 9.9.9.9:443, кворум 2, интервал 30 секунд и тайм-аут 3 секунды. Диагностику DNS при необходимости проводите отдельно.v0.9.7 — MirvMon v0.9.7
MirvMon v0.9.7 — security-only PHP2Shell hotfix
Security
Compatibility
Upgrade
ghcr.io/mirivlad/mirvmon:0.9.7 after GHCR publication succeeds, and re-pull/redeploy your Portainer app while keeping app_data and db_data. Verify php -r 'echo PHP_VERSION;' inside the running container is at least 8.5.12.v0.9.5 — MirvMon v0.9.5
MirvMon v0.9.5
Что исправлено
Совместимость
Обновление
ghcr.io/mirivlad/mirvmon:0.9.5. Достаточно обычного re-pull/redeploy image.v0.9.4 — MirvMon v0.9.4
MirvMon v0.9.4
Что исправлено
online.offline и unknown считаются недостоверным окном наблюдения: в этот период новые offline transitions серверов не создаются, а централизованные сетевые проверки сайтов приостанавливаются.offline_timeout_seconds на повторный контакт. Если агент успел вернуться, никакого ложного offline/recovery события для него не возникает.offline -> online MirvMon ставит в штатный notification outbox одно системное сообщение с временем начала outage, временем восстановления и общей продолжительностью. Telegram и SMTP используют существующие глобальные настройки и retry-механику.Совместимость
Обновление
ghcr.io/mirivlad/mirvmon:0.9.4. Достаточно обычного re-pull/redeploy image; отдельной миграции нет.v0.9.3 — MirvMon v0.9.3
MirvMon v0.9.3
Что изменилось
allow_self_signed по-прежнему не отправляется агентам. Для такого endpoint effective quorum автоматически становится 1, поэтому отсутствие remote results не может скрыть центральный outage.Совместимость
website_probe_v1 продолжают работать без обновления протокола.Обновление
ghcr.io/mirivlad/mirvmon:0.9.3. Обычного обновления image достаточно; отдельной миграции для v0.9.3 нет.v0.9.2 — MirvMon v0.9.2
MirvMon v0.9.2
Что изменилось
032_central_website_probe_invariant.sql: существующие сайты с отключённой центральной точкой автоматически переводятся в central_probe_enabled = TRUE, а схема БД больше не допускает обратное состояние.APP_VERSION. После обновления MirvMon браузер получает актуальные стили и скрипты без ручного Ctrl+R.Совместимость
website_probe_v1 и передают только transport HTTP(S) observations.Обновление
ghcr.io/mirivlad/mirvmon:0.9.2. Новых Compose services и обязательных переменных окружения нет; миграция применяется штатным механизмом MirvMon при запуске.v0.9.1 — MirvMon v0.9.1
MirvMon v0.9.1
Что изменилось
website_probe_v1 агент можно сразу разрешить или запретить как probe point без захода в его настройки.website_probe_v1 переключатель недоступен и прямо показывает, что требуется обновление. Если отключаемая точка уже назначена сайтам, MirvMon предупреждает об этом, снимает назначения и безопасно корректирует quorum./sites теперь показывают состояние выбранных probe points: зелёная точка — endpoint доступен, красная — transport failure, серая — свежих данных нет. Central MirvMon визуально отличается кольцом.max(120 секунд, 3 × interval endpoint). Старый успешный результат не остаётся зелёным бесконечно.Совместимость
website_probe_v1; старые агенты продолжают работать как раньше, но не могут быть включены как remote probe point до обновления.Обновление
ghcr.io/mirivlad/mirvmon:0.9.1. Новых Compose services, обязательных переменных окружения и миграций нет.