Perl - Processlist watcher samt netstat reader
Jump to navigation
Jump to search
Simpelt perl script til overvågning af processer mm
#!/usr/bin/perl
#
# Version: 1.0.0
#
use strict;
## Global wars
my ($iSec, $iMin, $iHour, $iDay) = (localtime(time));
my $iHighLoad = 2.00;
my $sNetstatFile = "/usr/local/sbin/log/netstat.txt-$iDay.$iHour.$iMin";
my $sStatFile = "/usr/local/sbin/log/stat.txt-$iDay.$iHour.$iMin";
####################
my $iLoad = &getLoad();
&checkLoad($iLoad);
####################
sub getLoad()
{
my $iLoad = `cat /proc/loadavg | awk '{ print \$1 }'`;
chomp($iLoad);
return $iLoad;
}
sub checkLoad()
{
my $iLoad = shift;
## High load - store stuff
if ($iLoad > $iHighLoad)
{
&openFiles();
&getNetstats($iLoad);
&getProcCount();
&getApacheStatus();
&getTopProcs();
&closeFiles();
}
}
sub getNetstats()
{
my $iLoad = shift;
my $sNetstat = `netstat -n --numeric-hosts --numeric-ports -p -o`;
chomp ($sNetstat);
print statfile "******* NETSTAT ( ".localtime()." ) ******\n";
print netstat $sNetstat;
print statfile "*** LOAD currently at ( $iLoad ) ***** \n";
## Get mysql count
my $iMySQLCount = `cat $sNetstatFile | grep ':3306' | wc -l`;
chomp $iMySQLCount;
print statfile "MySQLCount::\t$iMySQLCount\n";
## Get apache
my $iApacheCount = `cat $sNetstatFile | grep ':80' | wc -l`;
chomp $iApacheCount;
print statfile "ApacheCount::\t$iApacheCount\n";
}
sub getProcCount()
{
my $iApacheProcCount = ` ps -ef | grep apache2 | grep -v root | wc -l`;
chomp $iApacheProcCount;
print statfile "ApacheProcCount::\t$iApacheProcCount\n";
}
sub getApacheStatus()
{
my $sApacheStatus = `apache2ctl status`;
chomp $sApacheStatus;
print netstat " ****** ApacheProcCount *****\n";
print netstat $sApacheStatus;
}
sub getTopProcs()
{
my $sTopProcs = `ps -eo user,pcpu,pid,command | sort -r -k2 | head -21`;
chomp $sTopProcs;
print netstat "\n\n***** TOP 20 Procs *****\n";
print netstat $sTopProcs;
}
sub openFiles()
{
open (statfile, ">$sStatFile");
open (netstat, ">$sNetstatFile");
}
sub closeFiles()
{
close (netstat);
close (statfile);
}