Монит не запускает скрипт после проверки “если не существует”

Вопрос или проблема

Я настроил мониторинг с помощью Monit. Однако у меня возникли проблемы с проверкой процесса. Если процесс не запущен, я хочу запустить конкретный скрипт, который создаст уведомление в PagerDuty.

Мой файл Monit выглядит так:

check process "myapp" matching "myapp"
  start program = "/usr/local/myapp start"
  stop program  = "/usr/local/myapp stop"
  if does not exist then exec "/bin/bash pagerduty_script 'MyApp Down' trigger"

Скрипт pagerduty_script — это просто обертка, которая принимает два аргумента: "string event" и действие trigger.

Скрипт работает. Я тестировал его в терминале, и он выполняется нормально. События действительно создаются в PagerDuty. Однако, кажется, что Monit на самом деле его не запускает, хотя ни один процесс не работает:

ps -ef | grep myapp
vagrant  23950 23136  0 17:40 pts/0    00:00:00 grep --color=auto myapp

sudo monit status:

Process 'myapp'
  status                            Execution failed
  monitoring status                 Monitored
  data collected                    Tue, 16 Sep 2014 17:40:11

Я не понимаю, почему это работает в консоли, но Monit на самом деле не генерирует событие.

Я сталкивался с подобной проблемой и выяснил, что скрипт pagerduty создает временный файл для триггера, и если этот файл был изменен не более 4 часов назад, он не перезапускает уведомление.

Возможно, когда вы выполняли это из консоли, вы уже создали временный файл. Вы можете это проверить, удалив временный файл непосредственно перед тем, как Monit должен сгенерировать уведомление.

Другим вариантом является использование другого уникального типа события, чтобы просто протестировать это.

Ответ или решение

Чтобы разобраться с проблемой, связанной с работой Monit после проверки "if does not exist", рассмотрим ключевые аспекты вашего сценария.

Проблема

Вы установили мониторинг с помощью Monit для процесса myapp и хотите, чтобы при отсутствии этого процесса запускался скрипт, который создает оповещение в PagerDuty. Тем не менее, Monit не вызывает указанный скрипт, даже когда процесс действительно не работает.

Анализ конфигурации

Ваш конфигурационный файл Monit выглядит следующим образом:

check process "myapp" matching "myapp"
  start program = "/usr/local/myapp start"
  stop program  = "/usr/local/myapp stop"
  if does not exist then exec "/bin/bash pagerduty_script 'MyApp Down' trigger"

В этом коде вы правильно определили процесс и прописали команды для его старта и остановки. Однако возникает проблема с тем, что тот факт, что myapp не работает, не приводит к вызову скрипта.

Возможные причины и решения

  1. Состояние процесса:
    Убедитесь, что myapp действительно не запущен. Команда ps -ef | grep myapp показывает, что нет запущенного процесса, кроме самой команды grep. Это подтверждает, что процесс отсутствует.

  2. Правильность пути к скрипту:
    Проверьте, что путь к скрипту pagerduty_script указан верно. Убедитесь, что Monit имеет права на выполнение этого скрипта. Добавьте полные пути к исполняемым файлам внутри вашего скрипта, чтобы избежать проблем с окружением.

  3. Логи Monit:
    Проверьте логи Monit (обычно находятся по пути /var/log/monit.log). Это поможет выявить, успешен ли был вызов скрипта и не возникли ли какие-либо ошибки во время его выполнения.

  4. Темп-файл:
    Как вы упомянули, PagerDuty создает временный файл для триггера и, если он был изменен менее чем 4 часа назад, оповещение не отправляется. Вы можете попробовать удалить этот временный файл перед запуском Monit, чтобы протестировать, сработает ли вызов.

  5. Тестирование с уникальным событием:
    Для тестирования вы можете изменить параметры передаваемые в ваш скрипт, например указать другое событие, чтобы проверить, создает ли оно оповещение. Это поможет исключить проблемы, связанные с кэшированием или временными файлами.

Заключение

Проблема, которую вы испытываете, может быть решена несколькими способами. Основные моменты включают в себя проверку корректности пути к скрипту, мониторинг логов Monit, а также выполнение очистки временных файлов, влияющих на отправку оповещений. Убедитесь, что все команды и параметры вписываются корректно и проверяются на наличие прав доступа. Так вы сможете настроить Monit для успешного выполнения вашего скрипта в случае остановки приложения.

Оцените материал
Добавить комментарий

Капча загружается...