Агент на сервере: что видно изнутри
Снаружи видно одно: сайт отвечает или нет. Забитый диск или упавшую службу инженер узнаёт, когда сайт уже лёг. Агент Pulse смотрит на сервер изнутри и предупреждает раньше. Разбираем, как он устанавливается, что присылает и что умеет предсказывать.
6 мин чтения
Программа, которая только отправляет
Агент — небольшая программа для Linux (amd64 и arm64), где он работает службой systemd, и для Windows 10, Windows Server 2016 и новее (x64), где он работает службой PulseAgent. В основе — открытый агент MirvMon (лицензия MIT, авторские права сохранены).
Агент сам ходит к Pulse: забирает настройки и отправляет замеры исходящими запросами. Входящих портов он не открывает, произвольных команд не выполняет. Серверу не нужен белый адрес, а безопаснику не нужно объяснять, зачем кому-то снаружи доступ внутрь.
Если связь с Pulse пропала, замеры копятся в очереди на диске и досылаются позже. Повторная доставка безопасна: у каждого замера свой номер, и Pulse не запишет его дважды.
Установка: два одноразовых секрета
Команда установки берётся в разделе «Серверы». Ссылка в ней одноразовая и действует час. Открыть её в мессенджере не страшно: превью ссылки в чате её не тратит, тратит только сама установка.
Установщик получает второй одноразовый ключ, тоже на час, и обменивает его на постоянный токен агента. Секреты хранятся в Pulse только в виде хэшей SHA-256, загрузка проверяется по SHA-256, а отзыв токена гасит всё.
На репетиции запуска команду из панели выполнили на чистой Ubuntu 24.04 как есть: через минуту в панели появились нагрузка, память и диски. На Windows команда та же по смыслу, только для PowerShell от имени администратора; установку, замеры, список служб и самообновление проверили на Windows 11.
Что агент присылает раз в минуту
Загрузку процессора, память, заполненность дисков и состояние служб. Пороги для инцидентов:
- диск заполнен на 90 % и больше — инцидент, на 80 % — предупреждение раз в сутки;
- процессор или память заняты на 90 % и больше 10 минут подряд — инцидент;
- агент молчит три интервала, но не меньше трёх минут, — инцидент;
- отмеченная служба остановлена дольше минуты — инцидент.
Службы вы отмечаете сами — например, nginx, базу данных, docker или ssh. После каждого запуска агент присылает полный список служб, а дальше — только изменения.
Мелочь из практики: внутри Docker-контейнера агент показывал среди дисков смонтированный файл /etc/hosts. С версии 1.0.7 смонтированный файл диском не считается, а смонтированный каталог — как и раньше, диск.
Прогноз диска
Порог в 90 % срабатывает, когда места уже почти нет. Прогноз предупреждает раньше. Раз в час Pulse строит для каждого диска линейный тренд — по истории после последней заметной чистки, иначе удалённые логи сбивали бы расчёт. Тренд идёт в дело, только если он достаточно ровный.
Если по тренду диск заполнится до 90 % в течение недели, открывается наблюдение. Закрывается оно, когда прогноз уходит дальше десяти дней: зазор между порогами не даёт наблюдению мигать.
Норма нагрузки по дню недели и часу
Высокая загрузка процессора в ночь на субботу может быть плановым бэкапом, а во вторник днём — признаком проблемы. Поэтому нагрузку последнего часа Pulse сравнивает не с общим средним, а с нормой того же времени недели:
- сначала — тот же день недели и тот же час ±1 за прошлые недели;
- если истории мало — будни или выходные в этот час;
- если мало и её — просто этот час суток.
Необычной считается нагрузка, которая выше медианы нормы больше чем на три стандартных отклонения (но не меньше минимального запаса) и при этом не ниже 40 % в абсолютных значениях — чтобы скачок с 2 до 9 % никого не беспокоил. Норма складывается за две-три недели работы агента. Для неё Pulse раз в час сворачивает замеры в почасовые сводки и хранит их 70 дней. Сами замеры хранятся три дня: графики на странице сервера показывают сутки.
Наблюдение — не инцидент. Оно один раз оповещает каналы как предупреждение, а объяснение считается один раз и показывается как есть. «Проверено» оставляет наблюдение открытым, но убирает его из внимания; когда нагрузка возвращается в норму, наблюдение снимается само.
Если необычная нагрузка — это план, например бэкап по субботам, нажмите «Считать нормой». Получится исключение: окно ±1 час вокруг этого часа — в этот день недели или каждый день — до заданного уровня. Внутри окна такая нагрузка считается планом, выше уровня — снова наблюдение. Исключения видны на странице сервера, снимаются там же и записываются в журнал доступа.
Процессы — только с согласия
Список самых нагруженных процессов помогает при разборе, но это уже данные вашего бизнеса. Поэтому процессы Pulse хранит только с вашего согласия, а командные строки — только со вторым, отдельным согласием.
Даже тогда агент вырезает из командных строк то, что похоже на секреты: пароли в mysql -p… и redis-cli -a …, curl -u user:…, заголовки X-API-Key и Cookie, aws_secret_access_key, JWT и токены GitHub, GitLab и Slack. Порты остаются: -p8080:80 и ssh -p 22 не трогаются. Если отозвать согласие на командные строки, сохранённые строки стираются сразу.
Обновления: сначала на нашем сервере
Ошибка в самообновлении могла бы разом попасть на все серверы, поэтому обновления идут по каналам. Новая версия сначала приходит на канарейку — наш собственный общий сервер. Остальным — только после того, как руководитель выпустит её для всех. Версию можно заморозить, а клиент может выключить автообновление у себя.
Скачанный файл проверяется по хэшу до запуска и ещё раз — привилегированным помощником, который подменяет бинарник. Пути зашиты в агент и не берутся из ответа сервера. Успех обновления Pulse определяет по самим замерам — агент о нём не докладывает.
Тонкость: бинарник подменяет уже установленная версия. Поэтому исправление в самом механизме обновления начинает работать только со следующего обновления — ещё один довод обкатывать версии сначала на своём сервере. Как это выглядит у нас — в кейсе про наш общий сервер.
Всё, что делают с сервером, попадает в журнал доступа организации с отметкой, чьё это действие: участника, инженера ServerDesk или самого Pulse при установке агента.
Сколько серверов
Серверов с агентом: Free — 1, Pro — 5, Business — 25, на обслуживании ServerDesk — без лимита. Монитор сервера не занимает места в лимите мониторов.
Агент может работать и точкой проверки ваших сайтов — об этом в статье «Как подтвердить отказ».