На одном сервере Linux часто имеется множество независимых (возможно, связанных) служб, выводящих многочисленные журналы в файлы по известным путям.
Иногда случаются плохие вещи, и о них пишут в журналы. Иногда службы блокируются, и в журналах нет новых записей (или, возможно, очень мало).
Какой самый простой способ отслеживать оба этих типа событий с помощью одного инструмента / службы / системы?
Я не знаю, является ли это «самым простым способом», но я думаю, что это правильный способ: использовать системы / службы оповещения / мониторинга, такие как Nagios, Zabbix, Zenoss или любой из сотен других подобных инструментов. Они будут отслеживать ваш сервер на предмет указанных параметров (процесс запущен / активен, порт, принимающий соединения, активность в файле журнала, содержимое файлов журнала) и выполнять действия на основе правил (предупреждать вас, перезапускать службу и т. Д.).
Теперь доступен плагин Nagios Log Monitoring. См. Следующую ссылку:
Прочтите внимательно и посмотрите, хотите ли вы этого.
Ваш первый вопрос; журналы мониторинга для строк / регулярных выражений:
Из моего опыта работы с логробот инструмент, используемый на этой странице, я знаю, что мониторинг любого типа журнала не является проблемой, независимо от формата журнала. пример, использованный на этой странице, должен это подтвердить.
Ваш второй вопрос; отслеживать журнал, чтобы убедиться, что есть вывод:
теперь, чтобы также отслеживать и предупреждать, если есть какой-либо результат, это тоже возможно. Я пытаюсь придумать, как это сделать. но попробуйте это:
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