É possível para a Monit executar um cálculo de média de carga no estilo Sysfence usando condicionais?

2

Estou começando a migrar do Sysfence para o Monit em uma caixa Linux do RHEL e gostaria de saber se é possível criar o seguinte equivalente sysfence em Monit.

Configuração do Sysfence (parcial)

Por exemplo, nosso arquivo sysfence.conf declara o seguinte para verificar as condições de carga média.

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

Monit configuration (uma tentativa de simular as condições da média de carga do Sysfence)

Para o arquivo monitrc, criei a seguinte instrução que passou na verificação de sintaxe de configuração, mas o alerta fornece apenas o valor interceptado da média de carregamento de 15min em vez de todas as condições. Uma diferença notável é que usando "ou" no lugar do segundo "e" produz um erro de sintaxe na inicialização de monit, então AFAIK "ou" lógica não é permitida.

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

Para o caso de teste, estou usando valores de disparo muito menores para alcançar os limites mais rapidamente em uma caixa de teste com muito pouco uso no momento. Quando uma das condições foi atendida (15min loadavg) nesse caso, recebi o seguinte alerta sem mencionar a média de carga de 1min e 5min, embora as outras condições não tenham sido atendidas, portanto, parece que as condições "e" são ignoradas .

Os valores médios reais da carga foram: média da carga: 0,34, 0,47, 0,53 . Estou testando em um servidor com muito pouco tráfego e executei o comando find para aumentar a carga do sistema. Além disso, parece que apenas uma casa decimal é permitida, portanto, o valor de 0,25 para a verificação de 15min foi aparentemente arredondado para baixo.

E-mail de alerta enviado da 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
    
por T.P. 01.11.2012 / 19:52

1 resposta

3

Acho que vejo o que você está tentando realizar ...

Em inglês simples, você está tentando dizer,

"Envie um alerta se a média de carga de 1 minuto for maior ou igual a 5.0 E a média de carga de 5 minutos for maior que 3.0 OU a média de carga de 15 minutos for maior que 2.0"

Essa não é a abordagem de monitoramento que eu gostaria de ver, pois pode gerar muito barulho. Além disso, como os limites restaurados são tratados? O que você realmente quer evitar ou ser notificado? Uma carga alta e persistente, correta?

Em Monit, eu usaria a palavra-chave "cycles" para mantê-la sob controle.

Supondo uma variável de ciclo de 60 segundos,

check system localhost
   # Send alert if 1-minute average is > 5 for 5 minutes
   if loadavg (1min) > 5 for 5 cycles then alert 
    
por 01.11.2012 / 20:05

Tags