Linux server system stats at a glance
It’s important to see how servers are doing regularly to enable you to to take a proactive approach to resolving problems.
But, when your using a Linux server with no GUI, it can be easy to become complacent. After all, they so rairly go down and it can take time to type all the commands required to get the information you need.
That’s where Bash scripting comes in. Creating a script to provide you with memory, CPU, disk and bandwidth usage is very useful. Having this available to you on a day to day basis is even better again.
I’ve been looking for something that would give me a tailored report of what’s happening on a server that I run but nothing gave me what I needed. Everything was either too complicated, too process intensive, too graphical or had too many dependencies. So, after looking around for a while, I decided that it would take less time to throw something together my self.
As I say with all these scripts. This is only one way of doing things. It’s not necessarily the best way, but it works none the less.
The first script obtains all the information I need and simply writes it to a text file. This can be sent by email or just stored somewhere for analysis.
Note: There are a few lines here relating to siteA and SiteB that are logs that have been created by another script. Unless you are following all of the linux backup and system stats documentation on this site, you can remove these lines.
#!/bin/bash logfile=/home/YourUserName/public_html/sites/default/files/logs/$(date +%Y%m%d).html WHO=`w` MPSTAT=`mpstat` VMSTAT=`vmstat` PS_MEM=`ps -A -o pid,pcpu,pmem,start_time,state,time,comm | perl -e '($_ = join "",<>) =~ s/(\t)/ /g; print;' |sort -g -k 3 -r | head -20` PS_CPU=`ps -A -o pid,pcpu,pmem,start_time,state,time,comm | perl -e '($_ = join "",<>) =~ s/(\t)/ /g; print;' | sort -g -k 2 -r | head -10` FREE=`free -m` PROCINFO=`procinfo` NETSTAT=`netstat -na |grep -i esta |grep -v 127.0.0.1 |sort -n -t. -k2` APACHE2LOGS=`tail /var/log/apache2/error.log` MYSQLLOGS=`tail /var/log/mysql.err` MAILLOGS=`tail /var/log/mail.err` ICECASTLOGS=`tail /var/log/icecast2/error.log` SiteABACKUP=`tail -n5 /home/YourUserName/backups/SiteA.log` SiteBBACKUP=`tail -n5 /home/YourUserName/backups/SiteB.log` cat <<- _EOF_ > $logfileServer statistics for $HOSTNAME
Updated on $(date +"%x %r %Z") by $USERLogged in users:
$WHO
Processor stats:
$MPSTAT
Virtual memory stats:
$VMSTAT
Top twenty memory hog applications:
$PS_MEM
Top twenty CPU hogging applications:
$PS_CPU
Free memory:
$FREE
Processor information:
$PROCINFO
Established connections:
$NETSTAT
Errors
In the mail logs:
$MAILLOGS
MySQL logs
$MYSQLLOGS
Apache2 logs
$APACHE2LOGS
Icecast2 logs
$ICECASTLOGS
Site backups
SiteA
$SiteABACKUP
SiteB
$SiteBBACKUP
Return to the index
_EOF_
echo "$(date +%Y%m%d)
" >> /home/YourUserName/public_html/sites/default/files/logs/index.html