Какое рекомендуемое решение для поиска / var / log / httpd / error_log предыдущего дня apache в поисках строк, содержащих определенную строку и адрес электронной почты, при обнаружении таких строк?
Его можно запускать ежечасно через cron, а строки в моем случае будут «sigkill» или «достигнуто maxclients».
Nagios, Cacti и т. Д. Было бы излишним. Мне нужно что-нибудь простое.
Спасибо
Для периодического запуска через cron вы можете использовать кеш для хранения последней позиции в файле журнала, а затем использовать grep для новых строк:
#!/bin/bash
logfile=/var/log/apache2/error.log
searchstr='sigkill\|reached maxclients'
cachefile='/var/cache/lastpos-apache2-scan4maxclntOrSigKill'
[ -f $cachefile ] && lastpos=$(<$cachefile)
[ "$lastpos" ] || lastpos=0
newpos=$(stat -c %s $logfile)
[ $lastpos -gt $newpos ] && lastpos=0
tail -c +$lastpos $logfile | grep "$searchstr"
echo $newpos >$cachefile
Но если вы действительно предпочитаете perl, он немного легче bash, но ...
#!/usr/bin/perl -w
use strict;
my $cachefile="/var/cache/lastpos-apache2-scan4maxclntOrSigKill";
my $logfile="/var/log/apache2/error.log";
my $searchstr="sigkill|reached maxclients";
my $lastpos=0;
if (-f $cachefile) {
open FH,"<".$cachefile;
$lastpos=<FH>;
close FH;
};
my $newpos=(stat $logfile)[7];
open FH,"<".$logfile;
seek FH,$lastpos,0;
while (<FH>) {
print if /$searchstr/i;
};
close FH;
open FH,">".$cachefile;
print FH $newpos;
close FH;
Всегда есть Perl, например:
perl -ne 'print if m/sigkill|reached maxclients/i' /var/log/apache2/error_log
Monit - это очень легкий инструмент для мониторинга системы, который отслеживает файлы журналов и отправляет предупреждения при появлении определенных строк. См. Документацию по адресу http://mmonit.com/monit/documentation/monit.html#file_content_testing для использования.