Sensu Go — платформа мониторинга, в которой проверки, события и оповещения описаны через API и YAML. В отличие от систем с жёсткой схемой, здесь агент лишь запускает команду и отправляет результат, а backend решает, что с ним делать: сохранить, отфильтровать, отправить в обработчик или заглушить. Такая схема удобна для распределённых систем, где часть узлов находится за NAT, часть работает в контейнерах, а часть вообще не имеет агента.

Как устроен Sensu

Backend объединяет API, dashboard, встроенный etcd и приём подключений от агентов. Агент держит websocket-соединение, получает задания и возвращает результат. Каждый узел представлен сущностью с подписками, а проверка публикуется в подписку и выполняется на всех подходящих сущностях. События проходят через фильтры и попадают в обработчики.

sudo ss -ltnp | grep -E '8080|8081|3000|2379'
curl -s http://127.0.0.1:8080/health
sensuctl cluster member-list
sensuctl version

Порты 8080 и 3000 нужны администратору, 8081 — агентам, 2379 и 2380 — etcd. Наружу открывайте только API за обратным прокси с TLS.

Установка компонентов

Пакеты распространяются через официальный репозиторий. На сервере ставят backend и CLI, на наблюдаемых узлах достаточно агента. После установки проверьте, что компоненты одной ветки.

curl -s https://packagecloud.io/install/repositories/sensu/stable/script.deb.sh | sudo bash
sudo apt install sensu-go-backend sensu-go-agent sensu-go-cli
sensu-backend version
sensuctl version

Для RHEL и производных есть аналогичный репозиторий с rpm-пакетами. CLI ставьте только на машину администратора: на каждом узле он не нужен.

Первый запуск backend

Для одного узла подойдёт встроенный etcd. Параметры задаются в backend.yml: адреса etcd, порты API, dashboard и агентов. После старта создайте администратора.

sudo systemctl enable --now sensu-backend
sudo sensu-backend init --cluster-admin-username admin --cluster-admin-password 'change-me'
sensuctl configure -n --url http://127.0.0.1:8080 --username admin --password 'change-me' --namespace default
journalctl -u sensu-backend -n 30 --no-pager

Команда init выполняется один раз. Пароль храните в файле с ограниченными правами, а не в истории shell. Для нескольких backend etcd настраивают кластером с нечётным числом участников.

Агент на узлах

Агент подключается по websocket и указывает подписки, по которым будут приходить проверки. Имя сущности по умолчанию совпадает с hostname, поэтому следите за уникальностью имён в сети.

sudo systemctl enable --now sensu-agent
sensuctl entity list
sensuctl entity info web01 --format yaml
sudo systemctl status sensu-agent --no-pager

В конфигурации агента задают backend-url с адресом ws:// или wss://, подписки и интервал keepalive. Если агент перестаёт выходить на связь, появляется событие keepalive. Устройства без агента добавляют как proxy-сущности.

Проверки

Проверка — это команда с интервалом и подпиской. Код возврата 0 означает норму, 1 — предупреждение, 2 — критическую ошибку. Первая строка вывода становится текстом события, поэтому команда должна печатать короткий и понятный результат.

type: CheckConfig
api_version: core/v2
metadata:
  name: check-disk
  namespace: default
spec:
  command: df -P -x tmpfs -x devtmpfs | awk 'NR>1 && $5+0 > 85 {print; exit 1}'
  interval: 60
  subscriptions:
    - linux
  handlers:
    - alert-script
  timeout: 15
  publish: true

Файл применяют командой sensuctl create -f: не нужно экранировать кавычки и символы shell. Результат виден сразу, без ожидания интервала.

sensuctl create -f check-disk.yaml
sensuctl check list
sensuctl event list
sensuctl event resolve web01 check-disk

Для тяжёлых проверок используют round_robin: команда выполняется только на одном узле из подписки. Расписание задают cron-выражением.

Обработчики и фильтры

Обработчик получает событие в JSON на стандартный ввод и выполняет скрипт: отправляет письмо или создаёт заявку. Фильтр отсекает повторные срабатывания.

type: HandlerConfig
api_version: core/v2
metadata:
  name: alert-script
  namespace: default
spec:
  type: pipe
  command: /usr/local/bin/notify.sh
  timeout: 10
  filters:
    - repeat-guard

Фильтр с выражением event.check.occurrences == 3 пропускает только третье подряд срабатывание. На время плановых работ проверку удобно заглушить, а не отключать совсем: история событий сохранится.

sensuctl filter create repeat-guard --action allow --expressions 'event.check.occurrences == 3'
sensuctl handler create alert-script --type pipe --command /usr/local/bin/notify.sh --filters repeat-guard
sensuctl silenced create --subscription linux --check check-disk --begin "2026-11-05T10:00:00Z" --expire 3600 --reason "maintenance"
sensuctl event list --format json

Если один обработчик должен вызываться для набора проверок, создайте handler set и укажите его в проверке. Скрипт обработчика должен завершаться быстро и не блокировать очередь событий.

Ассеты

Ассеты позволяют доставлять бинарники и скрипты без установки пакетов на каждый узел. Компонент, которому нужен ассет, скачивает архив, проверяет контрольную сумму и распаковывает его во временный каталог. Это удобно для плагинов, но требует доступа к источнику и доверия к нему.

sensuctl asset add sensu/sensu-slack-handler
sensuctl asset list
sensuctl asset info sensu/sensu-slack-handler --format yaml
sensuctl dump all --format yaml > backup.yaml

В закрытом контуре ассет создают вручную с URL и sha512, размещая файл на внутреннем сервере. Ассет выполняется с правами агента, поэтому источник должен быть доверенным.

Диагностика

Если проверка не появляется, начните с сущности и подписки. Затем посмотрите события и журнал backend: ошибки аутентификации и подключения к etcd видны именно там.

sensuctl event list
sensuctl entity list
curl -s http://127.0.0.1:8080/health
journalctl -u sensu-backend -n 100 --no-pager

Чаще всего причина в одном из трёх мест:

  • агент указывает на старый адрес backend;
  • порт 8081 закрыт межсетевым экраном;
  • событие отсекает фильтр, нет обработчика или расходятся часы.

Эксплуатация

Разделяйте окружения через namespace, а доступ к API выдавайте отдельными ключами. Конфигурацию храните в git.

sensuctl namespace create staging
sensuctl api-key grant admin
sensuctl dump all --format yaml > sensu-config.yaml
sensuctl cluster member-list

Резервируйте состояние etcd и проверяйте восстановление до инцидента. Обновляйте backend и агентов последовательно, начиная с тестового узла.

Итог

Sensu Go даёт управляемый мониторинг распределённых систем: агенты, подписки, проверки и гибкие обработчики. Он требует аккуратной настройки backend и etcd, но предлагает прозрачную модель событий. Начните с одной проверки.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте