Серверы и агент

Сервер подключается одной командой: агент раз в 30 секунд шлёт метрики по HTTPS, а пороги, историю и алерты ведёт сервис. Агент написан на Python без сторонних библиотек и работает не от root.

Установка

«Серверы» → «Установить агента»: одна команда на весь проект. Выполните её под root на любом числе машин — руками, через Ansible или cloud-init.

curl -fsSL https://test.assyr.nl/install.sh | sudo sh -s -- --enroll me_… --name web-01 --group prod
  • Каждый сервер появляется в списке сам, под своим hostname; --name и --group необязательны.
  • Повторный запуск на той же машине переподключает её, а не создаёт копию.
  • «Выпустить новую команду» — старая перестаёт работать, уже подключённые серверы не затронуты.
  • Для Ansible есть готовая роль monitor_agent (переменные monitor_agent_*).

Файлы на сервере: агент /opt/monitor-agent/, конфиг /etc/monitor-agent/config.json, логи — journalctl -u monitor-agent.

Что собирает агент

Что Подробности
CPU загрузка, user / system / iowait / steal
Память RAM и swap
Load average 1, 5, 15 минут, с пересчётом на одно ядро
Диски заполнение (как в df), иноды, чтение и запись
Сеть входящий и исходящий трафик
Сервисы состояние отмеченных systemd-юнитов
Логи число совпадений с шаблонами в journald — сами строки не уходят
О системе ОС, ядро, ядра и память, виртуализация, время работы

Если связи с сервисом нет, агент складывает замеры в очередь на диске (до 240 замеров, около 1 МБ) и досылает потом — на графиках не будет дыры. Память агента ограничена systemd.

Что мониторить

Сервер → «Что мониторить». Агент сам находит запущенные systemd-сервисы, диски и сайты из конфигов nginx, Apache и Caddy; вы отмечаете нужное галочками.

  • Сервисы — топ-20 известных (nginx, postgres, mysql, redis, docker, php-fpm и другие) узнаются по имени, любой другой следится по правилу «юнит активен».
  • Диски — какие точки монтирования проверять на заполнение.
  • Сайты — домены из конфигов можно одним нажатием превратить в мониторы.
  • Логи — шаблоны по journald, см. раздел «Логи».

Пороги

Алерт срабатывает, когда значение держится за порогом дольше заданного времени: для CPU, steal и load average считается среднее за окно (одиночный всплеск — не проблема), для памяти, диска и сервисов — «за порогом всё это время».

Проверка Порог по умолчанию Держится, мин
Сервис упал юнит не active 1
Диск 90 % 2
Иноды 90 % 2
RAM 90 % 3
Swap 80 % 5
CPU 90 % в среднем 5
Load average на ядро 2,0 в среднем 5
CPU steal 10 % в среднем 10
  • Пороги меняются для всех серверов («Серверы» → «Настройки для всех серверов») или у одного сервера на его вкладке «Настройки».
  • «Восстановлено» приходит, когда значение 2 минуты держится ниже 90 % порога: без пинг-понга алерт/восстановлено у границы.
  • На физических серверах steal скрыт: там его не бывает.

Сервер не отвечает

Если от сервера нет данных дольше 3 минут (можно выбрать 1, 2, 3, 5, 10, 15 или 30), приходит критичный «🔴 сервер не отвечает» с последними известными значениями. Это замечает сервис, а не агент, — поэтому работает и при полном падении сервера. Свои сбои сети сервис отличает: если замолчала половина серверов и не отвечают внешние адреса, алертов «не отвечает» не будет.

Сервер перезагрузился

Быструю перезагрузку «не отвечает» не ловит: сервер молчит меньше порога, сервисы поднимаются сами. Поэтому сервис сравнивает время загрузки системы, которое присылает агент: если оно сдвинулось вперёд, приходит «🔄 сервер перезагрузился» со временем загрузки и тем, сколько не было данных. Это событие, а не состояние: в журнале алертов оно сразу закрыто. Перезагрузка во время обслуживания записывается в журнал без уведомления. Выключить — «Уведомления» → «Что присылать» → «Сообщать, что сервер перезагрузился».

Группы и массовые действия

  • Группа (prod, client-a) задаётся при установке или в настройках сервера; по ней фильтруется список.
  • Галочки в списке → заглушить, сменить группу или удалить несколько серверов сразу.
  • «Заглушить» на 1 час, 4 часа, сутки или насовсем: проблемы пишутся в историю, но не отправляются.

Обновление и удаление

  • Автообновление включено по умолчанию: агент ставит только релиз, подписанный ключом Ed25519, и сам откатывается, если новая версия за 150 с не прислала данные. Выключается для проекта или отдельного сервера; тогда обновить можно кнопкой «Обновить сейчас».
  • Удаление агента — «Серверы» → «Удалить агента»: команда убирает файлы, юнит и пользователя. Сервер в кабинете удаляется отдельно, вместе с историей.