मेरे पास लगभग 30 सर्वर हैं, और मैं बस एक लॉगिंग सर्वर पर सभी लॉग भेजने के लिए सीधे ऊपर syslog का उपयोग करता हूं। बैकअप के लिए, सभी मशीनों को कुछ दिनों के लिए स्थानीय रूप से अपने लॉग्स को स्टोर करने के लिए कॉन्फ़िगर किया गया है, पुराने लॉग के रोटेशन और विलोपन का ख्याल रखने के लिए लॉगरोटेट का उपयोग किया जाता है।
मेरे प्रत्येक एप्लिकेशन सर्वर ने अपने लॉग्स को syslog पर भेजने के लिए एक छोटी सी पर्ल स्क्रिप्ट चलाई है, जो तब लॉगहॉस्ट (नीचे दी गई स्क्रिप्ट) को आगे बढ़ाता है।
फिर लॉगहॉस्ट पर हमारे पास कुछ कस्टम स्क्रिप्ट हैं जो लॉगचेक के समान हैं जो मूल रूप से कुछ भी संदिग्ध के लिए आने वाले लॉग को देखते हैं।
हमारे पास सभी होस्ट्स के ईमेल भी हैं जो एक ही जगह पर जा रहे हैं, ताकि अगर कोई भी प्रोग्राम इस तरह से शिकायत करे, तो हमें सारे मैसेज मिल जाएं। यह सैद्धांतिक रूप से एक एकल मेलबॉक्स पर जा सकता है जो एक कार्यक्रम पर कार्य कर सकता है और विश्लेषण कर सकता है।
यहाँ मेरी लॉगिंग पर्ल स्क्रिप्ट है। यह कार्यक्रम के आउटपुट को इसमें पाइप करके काम करता है, और फिर यह आउटपुट को सेट करता है और इसे वापस थूकता है ताकि आप इसे कहीं और भेज सकें (मैं मल्टीगॉग को भेज देता हूं)। आप इसे -q विकल्प भी दे सकते हैं ताकि आप केवल 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;