Назад | Перейти на главную страницу

Каков самый простой способ отслеживать файлы журнала на предмет (а) совпадений строк / регулярных выражений И (б) отсутствия вывода?

На одном сервере Linux часто имеется множество независимых (возможно, связанных) служб, выводящих многочисленные журналы в файлы по известным путям.

Иногда случаются плохие вещи, и о них пишут в журналы. Иногда службы блокируются, и в журналах нет новых записей (или, возможно, очень мало).

Какой самый простой способ отслеживать оба этих типа событий с помощью одного инструмента / службы / системы?

Я не знаю, является ли это «самым простым способом», но я думаю, что это правильный способ: использовать системы / службы оповещения / мониторинга, такие как Nagios, Zabbix, Zenoss или любой из сотен других подобных инструментов. Они будут отслеживать ваш сервер на предмет указанных параметров (процесс запущен / активен, порт, принимающий соединения, активность в файле журнала, содержимое файлов журнала) и выполнять действия на основе правил (предупреждать вас, перезапускать службу и т. Д.).

Теперь доступен плагин Nagios Log Monitoring. См. Следующую ссылку:

Мониторинг журналов Nagios

Прочтите внимательно и посмотрите, хотите ли вы этого.

Ваш первый вопрос; журналы мониторинга для строк / регулярных выражений:

Из моего опыта работы с логробот инструмент, используемый на этой странице, я знаю, что мониторинг любого типа журнала не является проблемой, независимо от формата журнала. пример, использованный на этой странице, должен это подтвердить.

Ваш второй вопрос; отслеживать журнал, чтобы убедиться, что есть вывод:

теперь, чтобы также отслеживать и предупреждать, если есть какой-либо результат, это тоже возможно. Я пытаюсь придумать, как это сделать. но попробуйте это:

logrobot autonda / log / file / путь 60 м '.' '.' 2 2 maxclient -ndnotfoundn

логробот = название инструмента

Autonda = функция, которая будет использоваться в вашем сценарии

/ журнал / файл / путь = путь к вашему файлу журнала

60м = если в последний раз файл был изменен более 60 м, инструмент не пойдет дальше.

'.' = это ищет что-либо в файле журнала

'.' = это ищет что-либо в файле журнала

2 = если хотя бы две строки не найдены, предупредить

maxclient = имя, которое вы даете этой сессии. вы можете называть это как угодно.

-ndnotfound = это параметр, который вы передаете инструменту

вы, конечно, можете изменить параметры в соответствии со своими потребностями.

SNMP (Nagios Net-Snmp) очень хорош, но его сложно настроить правильно. Если вы хотите минимальных затрат, рассмотрите возможность использования задания cron - вы пишете скрипт на bash, cron периодически отправляет его.

Бездействие:

создайте файл, например list.txt, из каталогов и файлов журнала с такими именами, это фиктивные образцы. Столбцы - это путь имя файла журнала max_hours_inactive:

/var/log  syslog     9
/var/adm  message    12

#!/bin/bash
# inactive.sh
while read path fname mxhrs
do
   oops=$( /usr/bin/find $path -mtime +${mxhrs} -name $fname)
   [ $#oops -gt 0 ]  &&  echo "$fname inactive for $mxhrs" |/usr/bin/mailx -s "$fname warning"
done < /path/to/list.txt

Создайте еще один файл, list1.txt, со спецификацией файла столбцов и регулярным выражением EX:

/path/to/mylfile.log   "(Warning|Fatal)"

#!/bin/bash
# error.sh
while read path regex
do
   /usr/bin/egrep -q "$regex" $path  &&
        echo "$path has error notification" |/usr/bin/mailx -s "$path warning"
done < /path/to/list1.txt

Используйте crontab-e для ввода, когда вы хотите, чтобы задания выполнялись, например: каждые 10 минут в рабочие дни, каждый час по выходным.

0,10,20,30,40,50 * * * 1-5 /path/to/error.sh >> /tmp/error.log.$(date +%Y%m%d) 2&>1
0 * * * 0,6  /path/to/error.sh >> /tmp/error.log.$(date +%Y%m%d) 2&>1
0,10,20,30,40,50 * * * 1-5 /path/to/inactive.sh >> /tmp/error.log.$(date +%Y%m%d) 2&>1
0 * * * 0,6  /path/to/inactive.sh >> /tmp/error.log.$(date +%Y%m%d) 2&>1