Como personalizar o texto da mensagem de alerta munin

1

Então, eu uso munin para monitorar algumas centenas de servidores e eu adoro isso. Eu estou tentando ajustar o texto de alerta para parecer um pouco diferente, no entanto, e não estou entendendo como fazê-lo para fazer o que eu quero.

Eu li o link e link e não tem problemas com as variáveis, etc. Eu quero mudar a sintaxe. Mais especificamente, aqui está a formatação de texto padrão do módulo perl:

'${var:group} :: ${var:host} :: ${var:graph_title}${if:cfields \n\tCRITICALs:${loop<,>:cfields  ${var:label} is ${var:value} (outside range [${var:crange}])${if:extinfo : ${var:extinfo}}}.}${if:wfields \n\tWARNINGs:${loop<,>:wfields  ${var:label} is ${var:value} (outside range [${var:wrange}])${if:extinfo : ${var:extinfo}}}.}${if:ufields \n\tUNKNOWNs:${loop<,>:ufields  ${var:label} is ${var:value}${if:extinfo : ${var:extinfo}}}.}${if:fofields \n\tOKs:${loop<,>:fofields  ${var:label} is ${var:value}${if:extinfo : ${var:extinfo}}}.}\n',

como o documento acima indica, isso produzirá algo assim:

dev :: hostname.dev :: Memory usage OKs: swap is 779112448.00.

Atualmente, reescrevi a formatação como:

${if:cfields CRITICAL} ${if:wfields WARNING} ${if:fofields OK} '${var:group} :: ${var:host} :: ${var:graph_title}\n${if:cfields CRITICAL :${loop<,>:cfields  ${var:label} is ${var:value} (outside range [${var:crange}])${if:extinfo : ${var:extinfo}}}.\n\t}${if:wfields WARNING :${loop<,>:wfields  ${var:label} is ${var:value} (outside range [${var:wrange}])${if:extinfo : ${var:extinfo}}}.\n\t}${if:ufields UNKNOWN :${loop<,>:ufields  ${var:label} is ${var:value}${if:extinfo : ${var:extinfo}}}.\n\t}${if:fofields OK :${loop<,>:fofields  ${var:label} is ${var:value}${if:extinfo : ${var:extinfo}}}.}'

A razão por trás disso é que eu quero que a Gravidade apareça primeiro na ordem da mais grave a menos grave.

A saída acaba assim, e então eu posso filtrar mensagens pela sua gravidade muito bem.:

'CRITICAL':'dev :: hostname.dev :: Memory usage CRITICAL : swap is 1706340352.00 (outside range [:1000000000]).'

Isto está "funcionando" para o que eu quero em termos de severidade, mas eu gostaria de torná-lo mais bonito porque algumas mensagens vêm com CRITICAL e WARNING e OK todas ao mesmo tempo e acabam ficando assim:

'WARNING':'OK dev :: hostname.dev .....

Eu sei porque isso é, a lógica no meu formato diz: "Se houver cfield, a saída CRITICAL. Então, se houver wfield, a saída AVISO ..." etc. Eu gostaria que ele apenas produzir o mais grave do três e não 2 ou todos os três, se todos existirem.

No meu cérebro eu posso inventar a lógica para isso (se houver cfields, saída CRÍTICA, se não houver cfields, e houver wfields, teca WARNING, se não houver cfields ou wfields, mas lá são fofields, então imprimam OK.) No entanto, não tenho idéia de qual método de formato ou idioma isso está escrito. Munin o programa é todo escrito em Perl, mas não consigo encontrar nada online referenciando essa sintaxe em Perl ou em qualquer outro idioma para esse assunto (meu google fu não deve ser strong hoje).

Então, alguém sabe como me ajudar aqui? TLDR, nesta sintaxe (onde $ {if: cfields CRITICAL} significa que existem cfields, então imprima CRÍTICO) qual é a maneira correta de escrever: SE cfields não existem E wfields existem THEN print WARNING.

TIA

    
por Joe 18.04.2015 / 01:18

1 resposta

2

A sintaxe permitida para a expansão pode ser vista na função message_expand em LimitsOld.pm . Tanto quanto eu posso dizer, ele não implementa estruturas de controle suficientes para fazer o que você quer.

A abordagem alternativa seria passar as notificações através de um intermediário (Nagios, por exemplo, ou um script de sua própria concepção) e aplicar lógica / reformatação lá.

    
por 18.04.2015 / 10:19