MRTG

MRTG (Multi Router Traffic Grapher) is monitoring utility, which runs on many platforms and is capable of collecting and graphing statistical information such as network traffic, CPU/Memory/Disk space usage, etc. MRTG can gather information using both SNMP protocol and external scripts. Below are few pieces of my MRTG config file together with scripts, which I felt like sharing.

#
# MS Win2k server monitoring
#
# CPU #0
# My script gets the processor load using snmpwalk.  There is a bug in 
# MS SNMP implementation, which changes the processor OID every time SNMP 
# service is restarted.
# My script takes care of it, until your processor is Intel based.  
Target[server1.cpu0]: `/usr/local/bin/mrtg/snmpcpuinfo.perl server1 community 0`
# This will be created under WordDir.  Comes very handy, when you have a
# a handfull of servers.
Directory[server1.cpu0]: server1.mydomain.com
# Processor load is measured in percent, so 100 will be enough.
MaxBytes[server1.cpu0]: 100
Options[server1.cpu0]: growright,integer,unknaszero,nopercent,gauge
Title[server1.cpu0]: server1.mydomain.com (cpu0)
YLegend[server1.cpu0]: % Used
ShortLegend[server1.cpu0]: %
# You can add here as many processors, as you have on your server.
#
# eth0
# This is the network interface of our Win2k server.  The easiest way
# to get the correct target is to use cfgmaker, which comes with MRTG.
Target[server1.eth0]: 2:community@server1.mydomain.com
Directory[server1.eth0]: server1.mydomain.com
Options[server1.eth0]: nopercent,growright
Title[server1.eth0]: server1.mydomain.com (eth0)
#
# users and processes
# Actually, this is not that useful on Win server, though I added it to
# have some consistency with Lin servers pages.
Target[server1.userproc]: `/usr/local/bin/mrtg/snmpuserprocinfo.perl server1 community`
Directory[server1.userproc]: server1.mydomain.com
MaxBytes[server1.userproc]: 523444000
Options[server1.userproc]: nopercent,growright,gauge,integer
Title[server1.userproc]: server1.mydomain.com (users and processes)
YLegend[server1.userproc]: Processes/Users
ShortLegend[server1.userproc]: #
#
# Disk space on drive C
# The index of disk can be obtained from snmpwalk output.
# Now, guess what?  Win2k does not update the value of space used very
# often.  Actually, this value changes only when the SNMP service is
# restarted.  There are different ways of going around this problem. I've
# decided to schedule SNMP service restarts every 10 minutes with 
# this .bat file.
Target[server1.diskc]: `/usr/local/bin/mrtg/snmphddinfo.perl server1 community 2`
Directory[server1.diskc]: server1.mydomain.com
# Make sure you put a huge number in here
MaxBytes[server1.diskc]: 100000000000
Options[server1.diskc]: growright,integer,unknaszero,nopercent,gauge
# By default MRTG uses 1000 for Kilo.  Here we change it for a second
kilo[server1.diskc]: 1024
# Disk space is better viewed in Megabytes, Gigabytes, etc.
kMG[server1.diskc]: M,G,T
ShortLegend[server1.diskc]: Bytes
#
#
# Linux server monitoring
#
# Append the following lines to your /etc/snmp/snmpd.conf and restart the
# snmp daemon.  Of course, you should not have hash (#) sign in front of
# those lines.
# ----------
# exec Load-1 /usr/bin/perl /usr/local/sbin/mrtg/loadavg.perl 1
# exec Load-5 /usr/bin/perl /usr/local/sbin/mrtg/loadavg.perl 5
# exec Procs /usr/bin/perl /usr/local/sbin/mrtg/numprocs.perl
# exec MailQ /usr/bin/perl /usr/local/sbin/mrtg/mailqlen.perl
# exec MailQ-Frozen /usr/bin/perl /usr/local/sbin/mrtg/mailqlen.perl frozen
# ----------
# CPU #0
# Actually, I am not measuring CPU load on in Linux servers.  I am pretty
# satisfied with plain Load Average * 100.
Target[server2.cpu0]: `/usr/local/bin/mrtg/snmploadavg.perl server2 community`
Directory[server2.cpu0]: server2.mydomain.com
# Actually, load average is multiplied by 100, so that the graph looks more
# interesting.
MaxBytes[server2.cpu0]: 10000
Options[server2.cpu0]: growright,integer,unknaszero,nopercent,gauge
Title[server2.cpu0]: server2.mydomain.com (Load average)
YLegend[server2.cpu0]: loadavg
LegendI[server2.cpu0]: 1 min load average
LegendO[server2.cpu0]: 5 min load average    
# You can add here as many processors, as you have on your server.
#
# eth0
# Network monitoring is configured exactly the same as for Win2k server.
# Still running of cfgmaker is recommended.
Target[server2.eth0]: 2:community@server2.mydomain.com
Directory[server2.eth0]: server2.mydomain.com
Options[server2.eth0]: nopercent,growright
Title[server2.eth0]: server2.mydomain.com (eth0)
#
# Mailq
# Monitoring of mail queue is essential, since it helps you to see a 
# wide range of problems with your server
# I am using Exim instead of Sendmail,
# so, I am sorry if you are missing mailq command.
Target[server2.mailq]: `/usr/local/bin/mrtg/snmpmailq.perl server2 community`
Directory[server2.mailq]: server2.mydomain.com
# Change the number appropriate for your environment
MaxBytes[server2.mailq]: 1000000
Options[server2.mailq]: growright,integer,unknaszero,nopercent,gauge
Title[server2.mailq]: server2.mydomain.com (Mail Queue)
YLegend[server2.mailq]: Messages
ShortLegend[server2.mailq]: Messages
LegendI[server2.mailq]: Frozen
LegendO[server2.mailq]: Total
#
# users and processes
# Pretty much the same as for Win2k server, but note that "lin" parameter 
# to the script.
Target[server2.userproc]: `/usr/local/bin/mrtg/snmpuserprocinfo.perl server2 community lin`
Directory[server2.userproc]: server2.mydomain.com
MaxBytes[server2.userproc]: 523444000
Options[server2.userproc]: nopercent,growright,gauge,integer
Title[server2.userproc]: server2.mydomain.com (users and processes)
YLegend[server2.userproc]: Processes/Users
ShortLegend[server2.userproc]: #
#
# Disk space on /
Target[server2.disk0]: `/usr/local/bin/mrtg/snmphddinfo.perl server2 community 1`
Directory[server2.disk0]: server2.mydomain.com
MaxBytes[server2.disk0]: 100000000000
Options[server2.disk0]: growright,integer,unknaszero,nopercent,gauge
# By default MRTG uses 1000 for Kilo.  Here we change it for a second
kilo[server2.disk0]: 1024
kMG[server2.disk0]: M,G,T
ShortLegend[server2.disk0]: Bytes

You can get all the scripts mentioned in this article as one file.