サーバのログ監視に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の出力のようなのですが、patchの当て方があまり良くわかってない上に、実際の設定ファイルと違いがあるのもこまるので、マニュアルでパッチを当てた所(^^;;、翌日のメールからは例の”unmatched entries”は出力されなくなってました。

これでログの確認も捗りそうです。

カテゴリー: Linux

0件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です