Поскольку журналы собираются в syslog-ng, я хотел бы иметь возможность автоматически отслеживать журналы и получать предупреждение, если Нет появляются события журнала, соответствующие определенным критериям. Например, для веб-сайта на основе подписки, если прошло 6 часов без заказов, то отправьте электронное письмо или текстовое сообщение этому человеку или группе людей.
Как это сделать?
Zabbix - еще одно решение для мониторинга, похожее на Nagios. Zabbix имеет возможность отслеживать файлы для различных строк и инициировать срабатывающее оповещение на основе заданных вами критериев (найдено или не найдено). Zabbix также поддерживает "просмотр" назад или с другого момента времени в журнале, что помогает предотвратить ложные срабатывания старых событий. Оповещения можно настроить для отправки электронных писем или SMS.
Веб-сайт Zabbix: http://www.zabbix.com/
Некоторые из документов мониторинга журналов Zabbix: http://www.zabbix.com/documentation/2.0/manual/config/items/itemtypes/log_items
Поскольку информация о том, что определенное событие должно происходить не реже, чем каждые шесть часов, относится к приложению, которое записывает в журнал, было бы лучше, если бы оно могло отслеживать себя и записывать запись в журнал, если событие не происходит должным образом. Если информация журнала записи приложения разрабатывается локально, я бы порекомендовал это решение.
Если это невозможно, я бы сохранил механизм, который следит за тем, чтобы событие произошло как можно ближе к приложению. Возможно, сторожевой таймер можно запустить в фоновом режиме из того же сценария запуска, который запускает приложение, ведущее журналы. Когда приложение остановлено, сценарий также останавливает сторожевой таймер.
Другой вариант, если вы по какой-то причине хотите сохранить стартовый скрипт в исходном состоянии, - это создать cron-job, который выполняет просмотр журнала.
В любом случае. Убедитесь, что уровень записи в журнале достаточно серьезный, чтобы вас предупредили о необходимости взглянуть на нее с помощью любого инструмента, который вы используете для мониторинга журналов. Лучше, более перспективно и инклюзивно для вещей, о которых вы не задумывались, но должны отслеживать, тогда прослушивать уровень журнала, чем конкретную запись в журнале. Это означает как минимум уровень ПРЕДУПРЕЖДЕНИЕ.
http://labs.consol.de/nagios/check_logfiles это плагин Nagios, который используется для мониторинга файлов журналов. Обычно вы проверяете, есть ли определенный шаблон (сообщение об ошибке). Но это также возможно изменить. Например, если вы запускаете check_logfiles --logfile /var/log/mybackup.log --criticalpattern '! Резервное копирование выполнено успешно' каждое утро, вы получите предупреждение, если с момента последнего запуска check_logfiles не было записи сообщения «резервное копирование выполнено успешно». .
Герхард
Nagios может сделать это с легкостью. Лично мне нравится все, что я могу легко запустить из командной строки и / или легко настроить через Nagios или Crontab.
ЛОГРОБОТ может делать именно то, что просит OP ... в одной простой записи командной строки:
./logrobot autonda / prod / apps / mylogfile 60 мес. 'заказы отправлены' '. 1 2 subscription_orders -ndnotfoundn
Просто измените выделенные жирным шрифтом строки и, конечно же, путь к файлу журнала в соответствии с вашими потребностями.
По сути, эта команда выдаст предупреждение, если хотя бы 1 запись «отправленные заказы» НЕ найдена в файле журнала / prod / apps / mylogfile. Он будет предупреждать о критическом состоянии, если в журнале не будет найдено как минимум 2 записей о «отправленных заказах».
Вы можете использовать сценарии Shell / Perl для выполнения этой задачи. Вы можете запускать сценарии Shell / Perl через Cron.
Nagios был бы лучшим решением. Это инструмент с открытым исходным кодом, поэтому не нужно ничего платить, но нужно борьба с ним для его настройки. ;)
Если вам нужен коммерческий продукт, Splunk известен анализом файлов журнала.
Раньше я подходил к этому, перенаправляя трафик системного журнала в базу данных, а затем просто запрашивая у базы данных последнее полученное сообщение журнала с определенного имени хоста с его меткой времени.
Это лишь одно из положительных преимуществ регистрации в базе данных.
Я считаю, что самый простой способ решить эту проблему - написать очень простой сценарий на языке по вашему выбору. Вам просто нужно grep
через системный журнал для определенных сообщений и отправить электронное письмо, если ничего не найдено. Включая некоторые проверки работоспособности, я не могу представить более 20 строк. Вставьте это cron, и все готово. Недостатком является то, что при использовании этого метода задание cron должно запускаться от имени пользователя root, чтобы читать журналы.
Вы также можете взглянуть на LogAnalyzer. К сожалению, я не помню, может ли он отправлять электронные письма. Тем не менее, он использует MySQL и хранит там информацию журнала. При установке LogAnalyzer у вас будет две копии ваших журналов, поскольку они идут параллельно: одна в системном журнале, другая в БД. Если у вас есть пользователь для этой БД, способный читать ее содержимое, вы можете избежать выполнения вышеупомянутого задания cron. Это может быть не намного лучше, но может добавить еще один уровень защиты.
Мы сделали нечто подобное, когда получаем предупреждение, если мы не получаем новый заказ на веб-сайте в течение последних N часов. Мы создали PushMon URL с расписанием «каждые 3 часа». Затем мы назвали URL PushMon на нашей странице благодарности (JavaScript). Если мы не получим заказ, PushMon заметит отсутствующий звонок и отправит уведомление.
PushMon хорошо работает для предупреждения вас о событиях, которые не происходят.