サーバのログ監視にlogwatchを入れていて、毎日メールが送られて来るのはいいのですが、そのメールのdovecotの項目の中に、大量の"unmatched entries"が出てきて、メールの内容をスクロールさせるのも大変です。
そこで何かいい方法はないものかと探してみたところ、次のようなものがありました。
/usr/share/logwatch/scripts/services/dovecot.orig 2012-09-29 14:58:32.910765365 -0400
+++ /usr/share/logwatch/scripts/services/dovecot 2012-09-29 16:20:28.154757388 -0400
@@ -105,9 +105,9 @@
my $dovecottag = qr/dovecot:(?:\s*\[[^]]+\])?/;
while (defined($ThisLine = )) {
- # remove timestamp. We can't use *RemoveHeaders because we need the
- # service name
- $ThisLine =~ s/^\w{3} .\d \d\d:\d\d:\d\d //;
+ # remove timestamp and hostname. We can't use *RemoveHeaders
+ # because we need the service name
+ $ThisLine =~ s/^\w{3} .\d \d\d:\d\d:\d\d .*? //;
if ( ($ThisLine =~ /(?:ssl-build-param|ssl-params): SSL parameters regeneration completed/) or
($ThisLine =~ /ssl-params: Generating SSL parameters/) or
($ThisLine =~ /auth-worker/) or
@@ -133,8 +133,9 @@
$ConnectionPOP3{$Host}++;
$Connection{$Host}++;
}
- } elsif ( ( ($User, $Host) = ( $ThisLine =~ /^imap-login: Login: (.*?) \[(.*)\]/ ) ) or
- ( ($User, $Host) = ( $ThisLine =~ /^imap-login: Info: Login: user=\<(.*?)\>.*rip=(.*)\, lip=/ ) ) ) {
+ } elsif ( ( ($User, $Host) = ( $ThisLine =~ /^$dovecottag imap-login: Login: (.*?) \[(.*)\]/ ) ) or
+ ( ($User, $Host) = ( $ThisLine =~ /^$dovecottag imap-login: Info: Login: user=\<(.*?)\>.*rip=(.*)\, lip=/ ) ) or
+ ( ($User, $Host) = ( $ThisLine =~ /^$dovecottag imap-login: Login: user=\<(.*?)\>.*rip=(.*)\, lip=/ ) ) ) {
if ($Host !~ /$IgnoreHost/) {
$Login{$User}{$Host}++;
$LoginIMAP{$User}++;
[/diff]
diffの出力のようなのですが、patchの当て方があまり良くわかってない上に、実際の設定ファイルと違いがあるのもこまるので、マニュアルでパッチを当てた所(^^;;、翌日のメールからは例の"unmatched entries"は出力されなくなってました。
これでログの確認も捗りそうです。
0件のコメント