Хорошо, сначала небольшая предыстория,
У нас есть экземпляр Tomcat, который подключается к нескольким поставщикам услуг как своего рода «шлюз». Этот экземпляр Tomcat будет генерировать ошибки, если он не может подключиться к данному провайдеру. Эти ошибки сохраняются в файле журнала.
Проблема в том, что нам нужно отслеживать файл не только по заданной строке, нам нужно использовать несколько регулярных выражений для фильтрации всего бессмысленного материала, чтобы мы не просыпались в 3 часа ночи, потому что пользователь забыл свой пароль. ;)
Я уже пробовал создать скрипт python, который будет находиться между Zabbix и Tomcat, но с файлами журнала (которые меняются ежедневно), размер которых превышает 200 МБ, это слишком интенсивно загружает процессор (100% в течение 15+ секунд). Я попытался добавить "сон (0,000005)", чтобы немного замедлить его, но теперь это занимает много времени (> 1 мин) и по-прежнему использует 25% ЦП ...
В общем, решение затмевает проблему, и я хотел обратиться к вам, ребята, и узнать, знаете ли вы лучшее решение или что-нибудь еще, что могло бы помочь.
(1) Zabbix может обрабатывать регулярные выражения самостоятельно. Вы можете отслеживать журналы, используя регулярное выражение с zabbix агентом.
https://www.zabbix.com/documentation/1.8/manual/log_file_monitoring
(2) Использование команды «nice» позволяет снизить приоритет использования ЦП сценария.
http://linux.die.net/man/1/nice
Помимо этого, потребуется более подробная информация. * спецификация машины (ЦП, память, запоминающее устройство и т. д.) * источник скрипта Python
Что ж, в конце концов, мы использовали слишком сложный скрипт Python, чтобы выполнить эту работу, пока не появится что-то более жизнеспособное.
Чтобы дать вам представление о том, насколько сложен этот "сценарий", вот МИНИМАЛЬНЫЕ файлы / папки, которые должны существовать для его работы:
/usr/local/bin/tomcat_log_alert.py (755)
/usr/local/bin/tomcat_ack_errors.py (755)
/etc/${COMPANY}/tomcat-log-alert.conf (644)
/etc/cron.d/tomcat-log-alert (644)
/var/log/${COMPANY}/tomcat_errors/ (755)
/var/log/${COMPANY}/tomcat_errors_ack/ (755)
/etc/zabbix/zabbix_agentd.d/tomcat-log-alert.conf (644)
Я действительно не собираюсь быть единственным специалистом по обслуживанию этого пластыря для гидроразрыва пласта.
Стоит обратить внимание на следующее:
logrobot autonda /prod/tomcat/error.log 60m 'tomcat errors' 'password forgotten|failed login' 1 2 -show
Приведенная выше команда будет искать в файле журнала любые строки, содержащие «ошибки tomcat». И из найденных строк он удалит все строки, содержащие:
Вышеупомянутый поиск только ОДНОГО файла журнала для определенных записей. Что произойдет, если вы захотите найти записи в нескольких файлах журнала?
Вы можете попробовать что-то вроде этого:
logrobot automul /prod/tomcat/error.log_MULTIPLE 60m 'tomcat errors' 'password forgotten|failed login' 1 2 -show
Я могу быть немного не в себе, поэтому вам следует проверить любой из этих сайтов, чтобы узнать точное использование: