
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 →
Ссылки
Исходный код · Релизы · Установка · Скриншоты · Сообщить об ошибке
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 Используйте Remote probe проверяет transport/HTTP reachability. Auth secrets, custom headers и разрешение self-signed TLS агентам не передаются; content/status assertions, TLS expiry и domain expiry остаются central-only. Для endpoint с auth/custom headers/self-signed Central MirvMon нельзя исключить. Используйте Сначала можно обновить только MirvMon server: старые агенты продолжат работать с прежним remote config. Чтобы использовать конкретный сервер как распределённую точку, обновите его agent до v0.9.0 (в том числе через существующий self-update), дождитесь capability Используйте Используйте Use: No database migration, agent protocol change, agent reinstall, new Compose service or new configuration is required. Источник: GitHub Releases · данные кэшируются на сервере.
История релизов
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, обязательных переменных окружения и миграций нет.v0.9.0 — MirvMon v0.9.0
MirvMon v0.9.0
Что изменилось
probe_jobs через обычный outbound GET /api/v1/agent/config, не открывает входящий порт и возвращает probe_results через обычный metrics envelope и durable delivery queue.website_probe_v1. Сервер не отправляет новые поля remote config старым агентам с strict decoder, поэтому обновление сервера обратно совместимо.Ограничения первой версии
Обновление
ghcr.io/mirivlad/mirvmon:0.9.0. Перед обновлением сделайте резервную копию БД. Миграция 031 применяется автоматически и создаёт назначения probe points и отдельный website_probe_samples hypertable. Новых Compose services и обязательных переменных окружения нет.website_probe_v1, затем включите его как точку проверок и назначьте сайту.v0.8.0 — MirvMon v0.8.0
MirvMon v0.8.0
Что изменилось
/reports/reliability показывает надёжность серверов и сайтов за 7 или 30 дней, полноту наблюдений, длительность инцидентов и среднее время восстановления. При недостаточной полноте доступность не выводится./status в /admin/public-status. По умолчанию список пуст; публичный ответ не содержит внутренних адресов, метрик и деталей инцидентов.docs/predictive-quality.md.Обновление
ghcr.io/mirivlad/mirvmon:0.8.0. Перед обновлением сделайте резервную копию БД. Миграции 029 и 030 выполняются автоматически; старые явно принятые как нормальные аномалии получают соответствующую оценку. Новых сервисов Compose, переменных окружения и изменений протокола агента нет.v0.7.7 — MirvMon v0.7.7
MirvMon v0.7.7
Исправления
smallint и не останавливает проверки.failed. Задания с истёкшей арендой также переводятся в него, а ручная проверка может поставить новое задание. /admin/system показывает состояние очереди проверок.Диагностика и производительность
bin/benchmark-websites теперь честно показывает чтение raw проб для точной доступности за последние 24 часа и использует более представительную историю для 50 и 1000 сайтов. Два запроса к модели чтения сохранены; изменение SQL без подтверждённого выигрыша не включено.Обновление
ghcr.io/mirivlad/mirvmon:0.7.7. Перед обновлением сделайте резервную копию БД. Миграция 028_website_check_job_terminal.sql выполняется автоматически; ранее исчерпавшие попытки задания переводятся в failed без изменения статусов сайтов и инцидентов вручную. Новых переменных окружения и сервисов Compose нет.v0.7.6 — MirvMon v0.7.6
MirvMon v0.7.6
What changed
\\n were rendered above application pages.Upgrade
ghcr.io/mirivlad/mirvmon:0.7.6