Итак, я использую munin для мониторинга пары сотен серверов, и мне это нравится. Однако я пытаюсь настроить текст предупреждения, чтобы он выглядел немного иначе, и я не понимаю, как заставить его делать то, что я хочу.
я прочитал http://guide.munin-monitoring.org/en/latest/tutorial/alert.html и http://munin-monitoring.org/wiki/MuninAlertVariables и нет проблем с переменными и т. д. Я хочу изменить синтаксис. В частности, вот форматирование текста по умолчанию из модуля 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',
как указано в приведенном выше документе, это будет примерно так:
dev :: hostname.dev :: Использование памяти Нормы: swap - 779112448.00.
В настоящее время я переписал форматирование как:
${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}}}.}'
Причина этого в том, что я хочу, чтобы уровень серьезности отображался первым в порядке от самого серьезного до наименее серьезного.
Результат выглядит примерно так, и тогда я могу довольно хорошо фильтровать сообщения по их серьезности:
'КРИТИЧЕСКИЙ': 'dev :: hostname.dev :: Использование памяти КРИТИЧЕСКОЕ: значение подкачки 1706340352.00 (вне диапазона [: 1000000000]).'
Это "работает" для того, что я хочу с точки зрения серьезности, но я хотел бы сделать его красивее, потому что некоторые сообщения приходят одновременно с CRITICAL и WARNING и OK и в итоге выглядят следующим образом:
'ВНИМАНИЕ': 'ОК dev :: hostname.dev .....
Я знаю, почему это так, логика в моем формате гласит: «Если есть cfield, выведите CRITICAL. Затем, если есть wfield, выведите WARNING ...» и т. Д. Я бы хотел, чтобы он выводил только самые серьезные из трех, а не 2 или все три, если все они существуют.
В моем мозгу я могу придумать логику для этого (если есть cfields, выведите CRITICAL, если нет cfields, и есть wfields, выведите WARNING, если нет cfields или wfields, но есть поля, затем выведите ОК.) Однако я понятия не имею, на каком методе формата или языке это написано. Munin, программа полностью написана на Perl, но я не могу найти в Интернете ничего, ссылающегося на этот синтаксис на Perl или на любом другом языке, если на то пошло. (мой гугл-фу сегодня не должен быть сильным).
Итак, кто-нибудь знает, как мне здесь помочь? TL; DR в этом синтаксисе (где $ {if: cfields CRITICAL} означает, ЕСЛИ cfields существуют, затем печатать CRITICAL) как правильно писать: ЕСЛИ cfields не существует И wfields существуют ТОГДА напечатайте WARNING.
TIA
Допустимый синтаксис для расширения можно увидеть в message_expand
функционировать в LimitsOld.pm
. Насколько я могу судить, он не реализует достаточно управляющих структур, чтобы делать то, что вы хотите.
Альтернативным подходом было бы передать уведомления через посредника (например, Nagios или сценарий вашего собственного изобретения) и применить там логику / переформатирование.