Назад | Перейти на главную страницу

Monit: как запретить monit запускать оператор exec каждый раз, когда тест не проходит?

Как запретить monit запускать оператор exec каждый раз, когда тест не проходит? Утверждение в моем monitrc:

check filesystem tmpfs with path /var                                           
    if space > 90% then exec "/usr/bin/logger -p daemon.crit 'MAJOR: space test'"

Это кажется странным, потому что кто-то другой задал вопрос, в котором он делал предупреждение, и оно имело желаемое мной поведение. Я готов начать душить хлопая по ящикам linux.

Изменить: вот противоположный случай Повторять оповещения о мониторинге

Это потому, что он использует alert, а не exec?

Поведение действия exec (с повторением каждый раз) изменилось с версии Monit 5.16.

https://mmonit.com/monit/changes/

Действие exec теперь выполняется только один раз при изменении состояния, так же, как и действие предупреждения.

Несколько раз мне приходилось сталкиваться с подобной проблемой.

Это факт monit не может этого сделать, насколько я знаю.

С участием monit ты можешь справиться с X times и / или Y cycles директивы, но более или менее быстро exec действие будет запускаться более одного раза, в зависимости от времени, которое вы потратите на устранение проблемы.

Итак, наконец, я решил написать свой собственный сценарий проверки для обработки всей логики, основанной на флагах.

Я поделюсь этим с вами, потом брать или нет, решать вам.


Первый : Напишите скрипт для мониторинга использования ФС, скажем /root/check_fsspace.sh :

#!/bin/sh

myFS=/var
myTreshold=90
flagFile=/tmp/flag

spaceused=$(df -h | grep "$myFS" | tr -s " " | cut -d" " -f5 | cut -d"%" -f1)

if [ $spaceused -gt $myTreshold ]; then
  if [ ! -f $flagFile ]; then
     touch $flagFile
     exit 1
  else
     exit 0
  fi
fi

if [ $spaceused -le $myTreshold ]; then
   rm -f $flagFile
   exit 0
fi

Полагаю, вы понимаете сценарий. Если нет, скажите, я объясню.

Второй: Настройте свой monit определение услуги:

check program check_fs with path "/root/check_fsspace.sh"
  if status != 0 then exec "/usr/bin/logger -p daemon.crit 'MAJOR: space test'"

Вы контролируете это с помощью cycles директива. Как часто вы хотите, чтобы это регистрировалось?

Предполагая, что интервал проверки демона Monit составляет 60 секунд, вы можете сказать что-то вроде: «Если это не удается в течение X циклов, выполните сценарий».

Но Monit прост ... Он будет предупреждать об отказе каждый раз, когда вы достигнете этого порога диска. Это по замыслу. Если вы достигаете порога достаточно часто, чтобы это действие регистрации раздражало, попробуйте изменить порог.

Monit будет регистрировать свой статус каждый цикл в журнал сообщений.

Mar 12 00:07:06 yo-mama monit[8577]: 'ppro' space usage 92.4% matches resource limit [space usage>85.0%] 
Mar 12 00:08:06 yo-mama monit[8577]: 'ppro' space usage 92.4% matches resource limit [space usage>85.0%] 
Mar 12 00:09:06 yo-mama monit[8577]: 'ppro' space usage 92.4% matches resource limit [space usage>85.0%] 
Mar 12 00:09:07 yo-mama monit[8577]: 'ppro' space usage 92.4% matches resource limit [space usage>85.0%] 

Он будет предупреждать каждый раз, когда превышается порог:

Resource limit matched Service ppro

    Date:        Wed, 12 Mar 2014 00:09:07
    Action:      alert
    Host:        yo-mama
    Description: space usage 92.4% matches resource limit [space usage>85.0%]

Your faithful employee,
Monit