Icinga Logfile Splitting
Icinga schreibt normalerweise Logs ins /var/log/icinga und sorgt selbst dafür, dass diese rotiert werden. Dafür ist folgende Option im Configfile /etc/icinga/icinga.cfg zuständig:
log_rotation_method=d
Falls man diese Option zu hoch setzt bzw. selbst mittels Logrotate den Mechanismus aushebelt kann es passieren, dass Icinga ein Gigabyte großes Logfile erzeugt. Das hat zur Folge, dass der CGI Skript zur Verfügbarkeitsanalyse /cgi-bin/icinga/avail.cgi entweder nach einem Timeout abstürzt oder den gesamten RAM und SWAP des Systems beeinsprucht.
Da ich bereits auf dieses Problem gestoßen bin, war die einzige Lösung das riesige Logfile wieder zu splitten und nach /var/log/icinga/archives zu legen, damit die Scripte diese auswerten können.
Dafür habe ich folgenden Perl Script gebaut:
#!/usr/bin/perl
# nagios-log-splituse POSIX qw/strftime/;
if (!@ARGV[0]) {
print "Usage: nagios-log-split\n";
exit 1;
}open(LOG,@ARGV[0]) || die "no Nagios log file named >>>>>>@ARGV[0]<<<<<<";
while () {
($part1, $part2) = split(/\s+/, $_, 2);
$part1 =~ s/\[//;
$part1 =~ s/\]//;
$filename = strftime "icinga-%m-%d-%Y-00.log", localtime($part1);
open (MYFILE, ">>$filename");
print MYFILE "[", $part1, "]\;$part2\n";
close (MYFILE);
};
close(LOG);
