Событийная модель

Тема дорожной карты · SaltStack

Событийная модель отличает Salt от классических систем управления конфигурацией. Внутри Salt работает шина событий: миньоны и мастер постоянно публикуют на неё сообщения, такие как подключение миньона, принятие ключа, завершение job или падение state. Эта шина не просто журнал событий, а рабочий механизм, на который можно подписаться и автоматически реагировать. Из трёх компонентов — шины, beacons (генераторов событий на миньонах) и reactor (обработчика на мастере) — собирается автоматизация, которую невозможно достичь с помощью запуска плейбуков по расписанию: инфраструктура сама сообщает о проблеме и запускает исправление.

Как это работает

Каждое событие состоит из тега (иерархической строки вида salt/job/<jid>/ret/<minion>) и полезных данных. Шину можно просматривать с помощью раннера salt-run state.event pretty=True, что полезно для отладки. События публикуются как системными механизмами, так и пользователем: salt-call event.send 'myapp/deploy/done' '{"version": "1.2"}' отправляет произвольное событие с миньона на мастер.

Beacons — сторожа на миньонах, настраиваются в конфигурации миньона и опрашивают локальную систему: изменение файла, падение процесса, заполнение диска, увеличение нагрузки. Обнаружив условие, beacon публикует событие на шину. Reactor — карта «тег события → SLS-файл реакции» в конфигурации мастера: при совпадении тега мастер рендерит указанный reactor-SLS и выполняет действие — вызов execution-модуля на миньоне, применение state, запуск runner или оркестрации. Цепочка «beacon заметил → событие → reactor исправил» и есть самовосстановление.

Когда применять

Типовые сценарии включают авторегистрацию, когда новый миньон присылает ключ, и reactor принимает его по правилам и сразу применяет highstate; самовосстановление, когда beacon видит, что сервис умер, и reactor его перезапускает и отправляет оповещение; реакция на дрейф конфигурации, когда beacon отслеживает критичный файл, и при ручной правке reactor немедленно возвращает эталон. Событийная модель также позволяет интегрировать Salt с внешними системами: CI/CD или мониторинг отправляют событие через salt-api, а reactor раскатывает релиз или гасит инцидент. Применяйте reactor для короткой связки «событие → действие»; для многошаговой реакции лучше запускать оркестрацию из reactor'а, а не городить логику в самом reactor-SLS.

Типичные ошибки

Главный недостаток — сложная логика в reactor-SLS: он рендерится на мастере в момент события, и отлаживать многоэтажные условия в нём сложно — выносите логику в оркестрацию или state'ы. Вторая ошибка — событийные штормы: слишком чувствительный beacon (например, на активно меняющемся файле) заваливает шину, а reactor умножает нагрузку своими реакциями; настраивайте интервалы beacon'ов осознанно. Третья ошибка — реакция-петля: reactor меняет то, за чем следит beacon, и цикл замыкается. Не забывайте про отладку через salt-run state.event — попытки чинить reactor вслепую, без просмотра реальных тегов и данных, отнимают часы.

Связанные понятия

Полезные ресурсы

🔤 Английские термины в этой теме

Слова из этой темы, которые русскоязычные часто произносят неверно. Кнопка 🔊 произносит голосом браузера.

Весь словарь терминов →