#linux #развертывание #ansible #monit
Есть сервер на linux, на нем работает некий сервис myservice, за сервисом наблюдает
monit. Сообщает на почту обо всех изменениях и при необходимости перезагружает сервис.
Есть ansible playbook, который переустанавливает сервис, конфигурирует и перезапускает.
И monit тоже конфигурирует и перезапускает при необходимости. Работает это отлично,
но плохо то, что при этом monit шлет пачку писем:
service instance пропал
service instance появился
service instance сменил PID
monit перезагрузился
Можно в роли давать monit задачу приостанавливать мониторинг, но об этой задаче он
тоже сообщает. Дважды.
- name: monit не наблюдает за myservice
shell: monit unmonitor myservice
- name: monit наблюдает за myservice
shell: monit monitor myservice
Можно перезапускать сервис из самого monit'a. Тогда письма приходят с менее угрожающими
заголовками, вроде Action done myservice. Но всё равно одно или два письма + одно про
релоад монита.
- name: Перезапуск myservice через monit
shell: monit restart myservice
Я беспокоюсь о том, что это всё сработает как у мальчика, который кричал «Волки!».
Все привыкнут, что с почты постоянно валится куча писем и что это нормальный процесс,
волноваться не о чем. Поэтому хочу, чтобы штатные работы не приводили ни к каким тревогам
вообще.
Можно ли это как-то реализовать на этом стеке технологий? Или я категорически неправ
в своих опасениях?
Ответы
Ответ 1
Решение monit config: /etc/monit/monitrc set alert {{mail_recipient}} but not on { action, instance } ansible: Во всех командах параметр -I нужен, почему — смотри ниже. В начале установки через monit останавливаем сервис, это считается action - name: Остановка myservice через monit shell: monit -I stop myservice Потом производим всю необходимую установку и настройку. Убеждаемся, что сам monit запущен. Перезагружаем конфиги через сам monit, это событие типа instance - name: Убедиться, что monit запущен service: name=monit state=started - name: Перезагрузка конфигов monit shell: monit -I reload Потом перезагружаем сервис, это считается action - name: Перезапуск myservice через monit shell: monit -I restart myservice Конфигурация monit Получать только определенные события set alert foo@bar only on { timeout, nonexist } Получать все события кроме некоторых: set alert foo@bar but not on { instance } Подробнее про фильтрацию событий в monit: https://mmonit.com/monit/documentation/monit.html#Setting-an-event-filter Оставшиеся проблемы monit "забывает" команды, отданные после перезагрузки — решено. Разобрано в отдельном вопросе, здесь я просто добавляю -I к командам. C такой конфигурацией monit перестает сообщать об изменениях собственного instance не только на период развертывания, а вообще. То есть, если он был перезагружен вручную, либо если упал а потом был поднят при развертывании — то сообщения не будет. Можно оставить только такой конфиг: set alert {{mail_recipient}} but not on { action } Но тогда при развертывании все равно будет одно сообщение на почту про sudo monit reload. Безуспешно пробовал такую схему, она не работает. name: monit - приостановить мониторинг shell: monit unmonitor all name: monit - перезагрузка конфигов shell: monit reload name: monit - возобновить мониторинг shell: monit monitor all
Комментариев нет:
Отправить комментарий