約30台のサーバーがあり、すべてのログを単一のログサーバーに送信するために、Syslogをそのまま使用しています。バックアップのために、すべてのマシンは、logrotateを使用して古いログのローテーションと削除を処理し、独自のログを数日間ローカルに保存するようにも構成されています。
各アプリケーションサーバーは、小さなperlスクリプトを実行してログをsyslogに送信し、syslogがログホストに転送します(以下のperlスクリプト)。
次に、loghostにはlogcheckに似たカスタムスクリプトがあり、基本的には受信ログで疑わしいものを監視します。
また、すべてのホストからのすべての電子メールが1か所に送信されるため、プログラムがそのように文句を言う場合、すべてのメッセージを取得できます。これは、理論的には、プログラムが動作して分析できる単一のメールボックスに送られる可能性があります。
これがロギングperlスクリプトです。プログラムの出力をパイプすることで機能し、出力をsyslogに出力し、別の場所に送信できるように出力します(マルチログに送信します)。また、syslogに移動するだけの-qオプションを指定することもできます。
#!/usr/bin/perl
use Sys::Syslog;
use Getopt::Long;
$SERVER_NAME = `hostname`;
chomp $SERVER_NAME;
$FACILITY = 'local0';
$PRIORITY = 'info';
GetOptions ('s=s' => \$SERVER_NAME, 'f=s' => \$FACILITY, 'p=s' => \$PRIORITY, 'q+' => \$quiet);
#print "$SERVER_NAME\n$FACILITY\n$PRIORITY\n";
#Sys::Syslog::setlogsock('unix');
openlog ($SERVER_NAME,'ndelay',$FACILITY);
if (!($quiet)) {syslog($PRIORITY,"Logging Started -- Logger version 1.1");}
$| = 1;
while (<>) {
if (!($quiet)) {print $_ unless $_ =~ /^\s+$/};
chomp;
syslog($PRIORITY,$_) if $_;
}
closelog;
$| = 0;