Перейти к содержимому
ServerDeskОставить заявку
// агент

Агент на сервере: что видно изнутри

Снаружи видно одно: сайт отвечает или нет. Забитый диск или упавшую службу инженер узнаёт, когда сайт уже лёг. Агент Pulse смотрит на сервер изнутри и предупреждает раньше. Разбираем, как он устанавливается, что присылает и что умеет предсказывать.

6 мин чтения

Программа, которая только отправляет

Агент — небольшая программа для Linux (amd64 и arm64), где он работает службой systemd, и для Windows 10, Windows Server 2016 и новее (x64), где он работает службой PulseAgent. В основе — открытый агент MirvMon (лицензия MIT, авторские права сохранены).

Агент сам ходит к Pulse: забирает настройки и отправляет замеры исходящими запросами. Входящих портов он не открывает, произвольных команд не выполняет. Серверу не нужен белый адрес, а безопаснику не нужно объяснять, зачем кому-то снаружи доступ внутрь.

Если связь с Pulse пропала, замеры копятся в очереди на диске и досылаются позже. Повторная доставка безопасна: у каждого замера свой номер, и Pulse не запишет его дважды.

Установка: два одноразовых секрета

Команда установки берётся в разделе «Серверы». Ссылка в ней одноразовая и действует час. Открыть её в мессенджере не страшно: превью ссылки в чате её не тратит, тратит только сама установка.

Установщик получает второй одноразовый ключ, тоже на час, и обменивает его на постоянный токен агента. Секреты хранятся в Pulse только в виде хэшей SHA-256, загрузка проверяется по SHA-256, а отзыв токена гасит всё.

// установка: от ссылки до токена
команда из «Серверов»
ссылка: один раз и на час; превью в чате её не тратит
установщик
ключ установщика: тоже один раз и на час
pulse-agent activate
постоянный токен агента; в Pulse хранится только его хэш

На репетиции запуска команду из панели выполнили на чистой 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 — без лимита. Монитор сервера не занимает места в лимите мониторов.

Агент может работать и точкой проверки ваших сайтов — об этом в статье «Как подтвердить отказ».

serverdesk // pulseбесплатный тариф без карты
Попробуйте на своём проекте

Pulse — бесплатно, без карты и без срока. Если нужны ещё и инженеры, на абонементе ServerDesk проверки настраивает наша смена, она же реагирует на инциденты по SLA.

// read next

Читайте также

// инциденты

Как подтвердить отказ, прежде чем будить человека

Какие фильтры стоят в Pulse между первой неудачной проверкой и пейджем: проверка своей сети, предохранитель, порог отказов, кворум точек и защита от флаппинга.

6 мин чтения

// дежурства

Дежурство без хаоса: ротация по людям, подмены и подтверждение из Telegram

Как в Pulse устроены дежурства: кто может дежурить, куда приходит пейдж, лестница эскалации, подмены, напоминание о смене и кнопка «Подтвердить» в Telegram.

6 мин чтения

// кейс

Как мы держим собственный общий сервер под Pulse

Восемь проектов на одном сервере: мониторы и агент Pulse, канарейка обновлений, пересчёт копий и места на диске, тревоги в Telegram — и что ещё впереди.

5 мин чтения