Tôi đã có khoảng 30 máy chủ và tôi chỉ sử dụng syslog ngay lập tức để gửi tất cả các bản ghi đến một máy chủ ghi nhật ký. Để sao lưu, tất cả các máy cũng được cấu hình để lưu trữ nhật ký riêng của chúng cục bộ trong vài ngày, sử dụng logrotate để xử lý việc xoay và xóa nhật ký cũ.
Mỗi máy chủ ứng dụng của tôi chạy một tập lệnh perl nhỏ để gửi nhật ký của chúng tới syslog, sau đó chuyển tiếp tới loghost (tập lệnh perl bên dưới).
Sau đó, trên loghost, chúng tôi có một số tập lệnh tùy chỉnh tương tự như logcheck, về cơ bản xem các bản ghi đến cho bất kỳ điều gì đáng ngờ.
Chúng tôi cũng có tất cả các email từ mọi máy chủ lưu trữ đến một nơi, do đó, nếu bất kỳ chương trình nào phàn nàn theo cách đó, chúng tôi sẽ nhận được tất cả các tin nhắn. Về mặt lý thuyết, điều này có thể đi đến một hộp thư duy nhất mà một chương trình có thể hành động và phân tích.
Đây là kịch bản perl đăng nhập của tôi. Nó hoạt động bằng cách đưa đầu ra của chương trình vào trong đó, và sau đó nó syslog đầu ra và nhổ nó ra để bạn có thể gửi nó đi nơi khác (tôi gửi cho nhiều người). Bạn cũng có thể cung cấp cho nó tùy chọn -q để chỉ vào syslog.
#!/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;