
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 после окна не будет.
Состояние проекта
Статус: активная разработка; текущий стабильный релиз — v0.9.3.
Платформы: сервер — Docker/Portainer; агенты — Linux и Windows.
Технологии: PHP 8.5, Slim 4, Twig 3, FrankenPHP, PostgreSQL 17, TimescaleDB, Go, Bootstrap 5, Chart.js.
Лицензия: MIT.
Что изменилось в MirvMon 0.9.x →
Ссылки
Исходный код · Релизы · Установка · Скриншоты · Сообщить об ошибке
История релизов
v0.9.5 — MirvMon v0.9.5
MirvMon v0.9.5
Что исправлено
- Кнопка профиля пользователя в navbar теперь нормально видна в обычном состоянии: имя пользователя отображается белым, а у кнопки есть заметный светлый контур ещё до наведения курсора.
- Для profile dropdown явно заданы Bootstrap button variables для normal, hover, focus, open и active states. Это исключает повторение регрессии из-за каскада Bootstrap.
- Добавлен UI contract test, который фиксирует наличие явных цветов текста и рамки у кнопки профиля.
Совместимость
Схема БД, agent protocol и backend API не меняются. Новых Compose services и обязательных переменных окружения нет. Обновление агентов не требуется.
Обновление
Используйте ghcr.io/mirivlad/mirvmon:0.9.5. Достаточно обычного re-pull/redeploy image.
v0.9.4 — MirvMon v0.9.4
MirvMon v0.9.4
Что исправлено
- Потеря Интернета у самого MirvMon больше не превращается в ложные offline/online события отдельных серверов. Новое server-offline решение теперь разрешено только когда независимый connectivity probe имеет свежий подтверждённый статус
online. - Удалена эвристика «массовой потери агентов». Количество одновременно недоступных агентов больше не используется как признак наличия или отсутствия Интернета у центрального MirvMon.
- Состояния connectivity
offlineиunknownсчитаются недостоверным окном наблюдения: в этот период новые offline transitions серверов не создаются, а централизованные сетевые проверки сайтов приостанавливаются. - После восстановления Интернета каждому агенту по-прежнему даётся его обычный
offline_timeout_secondsна повторный контакт. Если агент успел вернуться, никакого ложного offline/recovery события для него не возникает. - После перехода connectivity
offline -> onlineMirvMon ставит в штатный notification outbox одно системное сообщение с временем начала outage, временем восстановления и общей продолжительностью. Telegram и SMTP используют существующие глобальные настройки и retry-механику. - Добавлены регрессионные тесты на сценарий, когда во время outage MirvMon успел протухнуть только один агент, на системный outbox и на fail-closed поведение при неизвестном connectivity state.
Совместимость
Схема БД и agent protocol в v0.9.4 не меняются. Новых Compose services и обязательных переменных окружения нет. Обновление агентов не требуется.
Обновление
Используйте ghcr.io/mirivlad/mirvmon:0.9.4. Достаточно обычного re-pull/redeploy image; отдельной миграции нет.
v0.9.3 — MirvMon v0.9.3
MirvMon v0.9.3
Что изменилось
- Отчёт надёжности сайтов теперь учитывает distributed quorum. Для каждой центральной автоматической проверки основного endpoint MirvMon берёт свежие результаты выбранных remote agents и применяет тот же failure quorum, который используется live incident pipeline. Missing/stale remote data не считается отказом.
- Assertions остаются централизованными: availability считается успешной только когда quorum transport доступен и Central MirvMon подтвердил assertions.
- В отчёте распределённые сайты явно помечаются количеством точек и quorum.
- На вкладке События в деталях сайта добавлена компактная история точек проверки за последние 7 дней: переходы доступно/недоступно и последнее состояние каждой Central/agent точки.
- Endpoint с auth, custom headers или
allow_self_signedпо-прежнему не отправляется агентам. Для такого endpoint effective quorum автоматически становится1, поэтому отсутствие remote results не может скрыть центральный outage. - README, ROADMAP, technical specification и документация reliability/distributed probes синхронизированы с фактической семантикой ветки 0.9.
Совместимость
Agent protocol и схема БД в v0.9.3 не меняются. Новых Compose services и обязательных переменных окружения нет. Существующие агенты с capability 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
Что изменилось
- Central MirvMon теперь всегда участвует в проверке сайта. В форме распределённых проверок больше нет отдельного выбора центральной точки: администратор выбирает только дополнительные агентские probe points.
- Добавлена миграция
032_central_website_probe_invariant.sql: существующие сайты с отключённой центральной точкой автоматически переводятся вcentral_probe_enabled = TRUE, а схема БД больше не допускает обратное состояние. - Семантика распределённых проверок зафиксирована окончательно: агенты выполняют только transport HTTP(S)-проверку. TLS expiry, срок регистрации домена, content/status assertions и performance assertions остаются централизованными функциями MirvMon.
- Убрано служебное пояснение про «первую версию» remote probes из пользовательской формы.
- Карточка «Всего серверов» на главном обзоре теперь кликабельна и снимает статусный фильтр, возвращая полный список серверов.
- В отчёте надёжности доступность сайтов показывается сразу по имеющимся автоматическим проверкам. Если полнота выбранного периода ниже 95%, результат помечается как «Неполный период», но само значение availability больше не скрывается. Для серверов прежний строгий критерий полноты сохранён.
- Для всех локальных CSS/JS assets добавлен cache-busting по
APP_VERSION. После обновления MirvMon браузер получает актуальные стили и скрипты без ручногоCtrl+R.
Совместимость
Agent protocol в v0.9.2 не менялся. Remote agents по-прежнему используют capability website_probe_v1 и передают только transport HTTP(S) observations.
Версия содержит одну миграцию БД. Она автоматически исправляет старые сайты с отключённым Central MirvMon и закрепляет Central как обязательную точку проверки.
Обновление
Используйте 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 визуально отличается кольцом. - Рядом с точками добавлен отдельный quorum-индикатор: число текущих отказов сравнивается с числом отказов, необходимым для aggregate failure. Это позволяет увидеть состояние распределённой проверки прямо из списка сайтов.
- Свежесть точек на карточке использует ту же семантику, что и сам quorum:
max(120 секунд, 3 × interval endpoint). Старый успешный результат не остаётся зелёным бесконечно. - Верхняя навигация переработана: Серверы теперь раскрываются в Список серверов / Группы серверов / Агенты.
- Раздел Настройки целиком перенесён из основной навигации в dropdown пользователя.
- В подменю Аналитика добавлены те же иконки, что используются в заголовках соответствующих страниц.
- Активный раздел сохраняет прежнюю подсветку пункта меню, а его иконка получает стабильный цвет раздела. Неактивные иконки остаются светлыми.
Совместимость
Изменений схемы БД и agent protocol в v0.9.1 нет. Распределённые проверки используют введённую в v0.9.0 capability 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
Что изменилось
- Добавлены распределённые HTTP(S)-проверки сайтов через уже установленные MirvMon agents. На сервере агент можно разрешить как probe point, а у сайта выбрать Central MirvMon и нужные удалённые точки.
- Для сайта настраивается failure quorum: transport failure становится агрегированной неудачей только когда недоступность одновременно видит заданное число выбранных точек. После этого сохраняется прежняя защита от дребезга — 3 failure для открытия incident и 2 success для recovery.
- Агент получает
probe_jobsчерез обычный outboundGET /api/v1/agent/config, не открывает входящий порт и возвращаетprobe_resultsчерез обычный metrics envelope и durable delivery queue. - Remote observations хранятся отдельно в TimescaleDB, поэтому существующие графики, continuous aggregates и reliability сохраняют прежнюю central-only статистическую семантику.
- На странице сайта показываются последние transport-результаты по выбранным точкам. Старые queued probe results сохраняются в истории, но не могут откатить текущее incident state назад во времени.
- Добавлена capability
website_probe_v1. Сервер не отправляет новые поля remote config старым агентам с strict decoder, поэтому обновление сервера обратно совместимо.
Ограничения первой версии
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 нельзя исключить.
Обновление
Используйте ghcr.io/mirivlad/mirvmon:0.9.0. Перед обновлением сделайте резервную копию БД. Миграция 031 применяется автоматически и создаёт назначения probe points и отдельный website_probe_samples hypertable. Новых Compose services и обязательных переменных окружения нет.
Сначала можно обновить только MirvMon server: старые агенты продолжат работать с прежним remote config. Чтобы использовать конкретный сервер как распределённую точку, обновите его agent до v0.9.0 (в том числе через существующий self-update), дождитесь capability website_probe_v1, затем включите его как точку проверок и назначьте сайту.
v0.8.0 — MirvMon v0.8.0
MirvMon v0.8.0
Что изменилось
- Отчёт
/reports/reliabilityпоказывает надёжность серверов и сайтов за 7 или 30 дней, полноту наблюдений, длительность инцидентов и среднее время восстановления. При недостаточной полноте доступность не выводится. - Администратор может явно выбрать объекты и публичные имена для
/statusв/admin/public-status. По умолчанию список пуст; публичный ответ не содержит внутренних адресов, метрик и деталей инцидентов. - Оператор может отметить исход каждого эпизода predictive observation. Оценка не изменяет детектор и уведомления. Анализ исходного качества и ограничения метрики confidence описаны в
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
Исправления
- Инцидент сайта закрывается после двух последовательных успешных проверок. Счётчики результатов ограничены порогами переходов, поэтому длительная нормальная работа больше не переполняет PostgreSQL
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
- Fixed a UI regression where the literal characters
\\nwere rendered above application pages. - The regression affected both the main application layout and the login/setup layout.
- Added a contract test so literal escaped newline sequences cannot silently reappear in shared document heads.
Upgrade
Use:
ghcr.io/mirivlad/mirvmon:0.7.6
No database migration, agent protocol change, agent reinstall, new Compose service or new configuration is required.
v0.7.5 — MirvMon v0.7.5
MirvMon v0.7.5
What changed
- Maintenance windows continue collecting agent metrics and running website checks; metric history, alerts and incidents are still recorded.
- Notifications suppressed specifically by maintenance are now retained as deferred delivery state.
- When maintenance ends, MirvMon sends one explicit post-maintenance notification if the underlying alert or observation is still active.
- Problems that start and recover entirely inside maintenance remain silent: there is no delayed trigger/recovery pair after the window.
- The behavior is shared by server metric/service alerts, offline incidents, website incidents and proactive observations.
- Post-maintenance messages explicitly state that the problem survived maintenance and preserve the original event time when available.
- Migration 027 adds the durable deferral state. Current code also tolerates the previous schema revision during DR acceptance.
Upgrade
Use:
ghcr.io/mirivlad/mirvmon:0.7.5
Migration 027 is applied automatically on startup.
No agent protocol change, agent reinstall, new Compose service or new configuration is required.
Источник: GitHub Releases · данные кэшируются на сервере.