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

Может ли Monit выполнить расчет средней нагрузки в стиле Sysfence с использованием условных выражений?

Я начинаю переходить с Sysfence на Monit в системе RHEL Linux, и мне интересно, можно ли создать следующий эквивалент sysfence в Monit.

Конфигурация Sysfence (частичная)

Например, наш файл sysfence.conf объявляет следующее для проверки условий средней нагрузки.

rule "high load" {
  la1 >= 5.0 and
  {
     { la5 > 3.0 }
     or
     { la15 > 2.0 }
  }
}
run '/bin/high-load.sh'
step 300

Конфигурация Monit (попытка смоделировать условия средней нагрузки Sysfence)

Для файла monitrc я создал следующий оператор, который прошел проверку синтаксиса конфигурации, но предупреждение предоставляет только захваченное значение средней нагрузки за 15 минут, а не для всех условий. Одно заметное отличие состоит в том, что использование «или» вместо 2-го и «вызывает синтаксическую ошибку при запуске монитора, поэтому логика AFAIK» или «не разрешена».

check system our.server.tld
  if loadavg (1min) > 1 and loadavg (5min) > 0.5 and loadavg (15min) > 0.25 then alert

Для тестового случая я использую гораздо меньшие значения триггера, чтобы быстрее достичь пороговых значений в тестовом блоке с очень небольшим использованием в то время. Когда в этом случае было выполнено одно из условий (15-минутная загрузка), я получил следующее предупреждение без упоминания средней нагрузки 1 и 5 минут, хотя другие условия не были выполнены, поэтому кажется, что условия «и» игнорируются .

Фактические средние значения нагрузки были: средняя нагрузка: 0,34, 0,47, 0,53. Я тестирую сервер с очень небольшим трафиком и запустил найти команда для увеличения нагрузки на систему. Кроме того, похоже, что разрешен только один десятичный знак, поэтому значение 0,25 для 15-минутной проверки было округлено в меньшую сторону.

Электронное письмо с предупреждением, отправленное от Monit

Resource limit matched Service our.server.tld

Date:        Thu, 01 Nov 2012 11:34:58
Action:      alert
Host:        our.server.tld
Description: loadavg(15min) of 0.5 matches resource limit [loadavg(15min)>0.2]

Your faithful employee,
Monit

Думаю, я понимаю, чего вы пытаетесь достичь ...

На простом английском вы пытаетесь сказать:

«Отправить предупреждение, если средняя загрузка за 1 минуту больше или равна 5,0, И либо средняя загрузка за 5 минут больше 3,0, либо средняя загрузка за 15 минут больше 2,0»

Я бы не хотел видеть такой подход к мониторингу, так как он может создавать много шума. И как лечить восстановленные пороги? Что Вы действительно хотите предотвратить или получать уведомления? Высокая и постоянная нагрузка, верно?

В Monit я бы использовал ключевое слово «циклы», чтобы держать его под контролем.

Предполагая переменную цикла 60 секунд,

check system localhost
   # Send alert if 1-minute average is > 5 for 5 minutes
   if loadavg (1min) > 5 for 5 cycles then alert