Есть ли способ сообщить monit, чтобы он предупреждал меня, если в файле журнала за определенное время будет больше X ошибок (например, строк, соответствующих "ERROR")?
Мой вариант использования: ошибки иногда появляются в моем файле журнала (например, сетевые ошибки, сбой удаленного сервера и т. Д.), И они не критичны. Но я хотел бы получить уведомление, если произойдет всплеск, потому что это потребует быстрого расследования (например, неудачное развертывание, недавно появившаяся ошибка).
В идеале я думаю о чем-то вроде
check file myapplog with path /var/myapp.log every 2 cycles
if lines matching "ERR" > 10% then alert
Я думаю, что могу получить это, написав внешний скрипт, а затем сделав что-то вроде
check program cer with path /usr/local/bin/checkerrorrate.sh
if status != 0 then alert
но мне интересно, есть ли вариант получше.
Я не думаю Монит - лучший выбор для оценки частоты появления этих сообщений об ошибках. Ограничения процедур тестирования содержимого файла могут усложнить задачу без обращения к внешнему решению. Видеть: http://mmonit.com/monit/documentation/monit.html#file_content_testing
В частности:
Контент проверяется только каждый цикл. Если контент добавляется и удаляется между двумя проверками, они остаются незамеченными.
При запуске позиция чтения устанавливается в конец файла, и Monit продолжает сканирование до конца файла в каждом цикле. Но если размер файла должен уменьшиться или измениться индексный дескриптор, позиция чтения устанавливается на начало файла.
Проверяются только строки, заканчивающиеся символом новой строки. Таким образом, строки игнорируются, пока они не будут заполнены этим символом. Также обратите внимание, что проверяются только первые 511 символов строки.
Вместо этого я бы опросил удаленные серверы или связанные службы, чтобы проверить их работоспособность.