Подтвердить что ты не робот

Получить monit для предупреждения сначала и перезапустить позже

Я хочу обработать какое-то цепное действие в monit.

  • немедленно проверьте процесс и оповещение.
  • перезапустить процесс после нескольких циклов.

Мои попытки (пока):

check process myprocess with pidfile /run/my.pid
  start program = "/path/to/binary start" with timeout 60 seconds
  stop program = "/path/to/binary stop" with timeout 60 seconds
  if not exist for 3 cycles then restart
  if not exist then alert
  if 3 restarts within 3 cycles then timeout

Не предупреждает и не останавливается в состоянии "работает" при сбое PID, но перезапускается после трех циклов.

check process myprocess with pidfile /run/my.pid
  start program = "/path/to/binary start" with timeout 60 seconds
  stop program = "/path/to/binary stop" with timeout 60 seconds
  if not exist for 3 cycles then restart
  if children < 1 for 1 cycles then alert
  if 3 restarts within 3 cycles then timeout

Нет оповещения детей < 1, но перезапустите afer 5.

monit.log

[CEST Aug  1 15:09:30] error    : 'myprocess' process is not running

monit summary

Process 'myprocess'            Running

Здесь monit -v part:

Existence      = if does not exist 3 times within 3 cycle(s) then restart else 
                 if succeeded 1 times within 1 cycle(s) then alert
Pid            = if changed 1 times within 1 cycle(s) then alert
Ppid           = if changed 1 times within 1 cycle(s) then alert
Children       = if less than 1 1 times within 1 cycle(s) then alert else if 
                 succeeded 1 times within 1 cycle(s) then alert
Timeout        = If restarted 3 times within 3 cycle(s) then unmonitor

Итак, вопрос: можно ли отправить предупреждение и изменить статус на "не работает" в течение 1 цикла и перезапустить после 3?

4b9b3361

Ответ 1

Эта строка:

if does not exist for 3 cycles then restart

Означает следующее:

Не выполняйте никаких действий, пока вы не проверите 3 раза, что служба не существует, а затем перезапустите ее. Такое поведение описывается в документации на monit как "Отказоустойчивость":

ОТВЕТСТВЕННОСТЬ ТОЛЕРАНТНОСТЬ

По умолчанию действие выполняется, если оно соответствует, и набор сервисов в состоянии ошибки. Тем не менее, вы можете потребовать, чтобы тест потерпел неудачу больше, чем один раз перед запуском события ошибки и изменением состояния службы не удалось. Это полезно, чтобы избежать получения предупреждений о ложных ошибках, что может произойти, особенно с сетевыми тестами.

Синтаксис:

ДЛЯ ЦИКЛОВ... или:

[ВРЕМЯ ВНУТРИ] ЦИКЛОВ...

Соответственно, Monit не изменит статус сервиса до тех пор, пока он не завершится в течение следующих циклов X. Чтобы подтвердить это выражение, просто удалите ошибку для этой службы и используйте только:

if does not exist then alert

остановить службу вручную и подтвердить, что команда

monit status

показывает статус "Не существует", как только вы его остановите.

Итак, вернемся к вашим вопросам:

  • Да, можно отправить предупреждение (по электронной почте) в течение 1 цикла. Для что вам необходимо определить вариант "если не существует, а затем предупредить" для этой службы и правильно настроить Email-Alerts. Предполагая, что вы например, использовать внешний eMail-сервер, вам необходимо определить не менее двух (пример конфигурации с gmail):

КОНФИГУРАЦИЯ SMTP SERVER

set mailserver smtp.gmail.com PORT 587 USERNAME "[email protected]" PASSWORD "xxxxx" using TLSV1 with timeout 30 seconds

(Имейте в виду, что в gmail вы должны активировать доступ для "незащищенных" приложений, чтобы разрешить monit использовать службу stmp)

и

EMAIL RECIPIENT

set alert [email protected]

как в файле /etc/monit/monitrc. Более подробную информацию об этих двух строках см. В официальной документации.

  1. Что касается документации, невозможно сразу же обновить статус службы, если определен отказ от отказов (выполнить действие после X циклов). Но вы все равно можете настроить оповещения для немедленного отправки и перезапустить службу в течение требуемых циклов.

Литература:

Документация Monit: https://mmonit.com/monit/documentation/monit.html

Надеюсь, что это поможет!

Привет