LogwatchWindowsScript
From Devwiki
#!/usr/bin/perl # Ffeil er mwn ddal pob peth o servers NT # # Ar hyn o bryd, just rhester o services NT mae hwn yn ddal, ac yna # gyrru yr output i logwatch # my ($client,$class,$warnLevel,$message); my %msg; my %services; my $debug=0; $services{"em library"}="em library"; $services{"netlogon"}="netlogon"; $services{"ntsyslog"}="ntsyslog"; #$services{"snmp"}="snmp"; $services{"browser"}="browser"; $services{"raidservice"}="raidservice"; $services{"replistor"}="replistor"; $services{"eventlog"}="eventlog"; $services{"nmssvc"}="nmssvc"; $services{"service control manager"}="service control manager"; $services{"dcom"}="dcom"; $services{"msdtc"}="msdtc"; $services{"ipsec"}="ipsec"; $services{"tcpip"}="tcpip"; $services{"w32time"}="w32time"; $services{"sophos"}="sophos"; $services{"windows server update services"}="windows server update services"; $services{"loadperf"}="loadperf"; $services{"winhttpautoproxysvc"}="winhttpautoproxysvc"; $services{"msiinstaller"}="msiinstaller"; #Things to do: # Split the line properly # Remove date # Allow checking on host and message (ignoring time) # Format the output nicely. # Figure out why other hosts aren't showing up in logwatch! while(defined($line=<STDIN>)) { chomp $line; next if ($line eq ''); foreach $name(keys %services) { if($line=~ m/$name/) { #The interesting match to see if I can do it $line=~ m/^... .. ..:..:.. ([a-z,A-Z,0-9,\.]+) ([\s\S]+)\[([\S]+)\](?:\:)?(?:[\s]+)?([\s\S]*)/; # $line=~ m/^... .. ..:..:.. [a-z,A-Z,0-9,\.]+ ([\s\S]*)/; $hostname=$1; $service=$2; $errorType=$3; $message = $4; if($msg{$service}{$message} eq $message) { $msg{$service}{$message}{0}++; } else { $msg{$service}{$message}=$message; } if($debug) { print "\n"; # print "$line"; print "$hostname\n"; #oprint "Message: $msg{$line}\n"; print "$service\n"; print "Message: $msg{$service}{$message}\n"; $count=$msg{$service}{$message}{0}; print "Count:$count\n\n"; } } } } foreach $name(keys %msg) { print "----------$name---------\n\n"; foreach $notice(keys %{$msg{$name}}) { print "$notice\n"; $count=$msg{$name}{$notice}{0}; if ($count> 0) { print "Message Repeated:$count times"; } print"\n\n"; } }