Событийная модель
Тема дорожной карты · 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 вслепую, без просмотра реальных тегов и данных, отнимают часы.
Связанные понятия
Полезные ресурсы
🔤 Английские термины в этой теме
Слова из этой темы, которые русскоязычные часто произносят неверно. Кнопка 🔊 произносит голосом браузера.
- incident /ˈɪnsɪdənt/ ударение на первый слог разбор: Митинги и инциденты
- release /rɪˈliːs/ ударение на второй слог, «релис», а не «релиз» с русским «з» разбор: Версии и числа: two point oh, semver
- event /ɪˈvɛnt/ ударение на второй слог разбор: Немые буквы и ударение: cache, queue, suite, height
- infrastructure /ˈɪnfrəstrʌktʃər/ ударение на первый слог разбор: Немые буквы и ударение: cache, queue, suite, height