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

Мониторинг журналов ошибок Apache для определенных строк

Какое рекомендуемое решение для поиска / 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 для использования.