Beacons
Тема дорожной карты · SaltStack
Beacons — «органы чувств» миньона: фоновые наблюдатели, которые следят за вещами вне Salt — файлами, сервисами, нагрузкой, диском, сетевыми настройками — и превращают замеченные изменения в события на шине мастера. Обычный миньон пассивен между командами; beacon делает его источником сигналов: упал nginx — на мастер улетает событие; кто-то поправил /etc/passwd — событие; диск заполнен на 90% — событие. Настраиваются beacons декларативно — в конфиге миньона или, что удобнее для массового управления, через pillar. Сами по себе beacons ничего не чинят и никого не оповещают — они только публикуют факты; реагирует на них reactor на мастере, и в паре они образуют контур «датчик → реакция».
Как это работает
Конфигурация — словарь beacons в /etc/salt/minion (или в pillar, что позволяет раскатывать наблюдателей стандартным механизмом данных):
beacons:
service:
- services:
nginx: {}
- interval: 10
diskusage:
- /: 90%
Процесс миньона опрашивает каждый beacon со своим интервалом (interval, в секундах) внутри основного цикла. При срабатывании миньон публикует событие с тегом вида salt/beacon/<minion_id>/<beacon>/... и данными о том, что случилось; поток виден на мастере через salt-run state.event pretty=True. Модулей-наблюдателей много: inotify (изменения файлов, требует установленной библиотеки на миньоне), service, diskusage, memusage, load, network_settings, ps и другие — полный список в справочнике beacon-модулей. Управлять можно и на лету, без правки конфигов: salt '*' beacons.add, beacons.list, beacons.disable. Отдельная важная опция — disable_during_state_run: True: она глушит beacon на время применения состояний, чтобы не ловить изменения, которые вносит сам Salt.
Когда применять
Основной сценарий — self-healing в связке с reactor: beacon service замечает умерший процесс, reactor применяет состояние, поднимающее его обратно; время реакции — секунды, без участия человека. Второй — контроль дрейфа конфигурации: inotify на критичных файлах (/etc/ssh/sshd_config, sudoers) даёт мгновенный сигнал о ручных правках, который можно логировать или сразу откатывать highstate'ом. Третий — пороговые события: diskusage и load как триггеры для чистки или уведомлений. Важно честно понимать границу: beacons — это триггеры для автоматики, а не система мониторинга; метрики, графики, алертинг с дедупликацией — задача Prometheus/Zabbix, и заменять их beacons не стоит.
Типичные ошибки
Первая — слишком агрессивные интервалы: beacon с interval: 1 на сотнях миньонов создаёт постоянный шум на шине и фоновую нагрузку; выбирайте интервал от реального времени реакции, которое вам нужно. Вторая — забытый disable_during_state_run: Salt правит конфиг, inotify это ловит, reactor запускает состояние, оно снова правит файл — получается цикл, который находят по загадочно «дёргающемуся» мастеру. Третья — зависимости: тот же inotify не заработает без соответствующей библиотеки Python на миньоне, а ошибка будет видна только в логе миньона. Четвёртая — реакция на каждое событие без агрегации: мигающий сервис (flapping) породит шквал событий и шквал реакций; в reactor-логике нужна защита от повторов.
Связанные понятия
Полезные ресурсы
Проверить знания (2)
Загрузка вопросов…