If you're new here, you may want to subscribe to my RSS feed. Thanks for visiting!
MRTG is Multi Router Traffic Grapher (MRTG) is a tool to monitor the traffic load on network links. MRTG generates HTML pages containing PNG images which provide a LIVE visual representation of this traffic.
MRTG Requirements
Apache webserver with perl support
NET-SNMP
GD
Libpng
zlib
If you want to download MRTG you can download from here
Preparing you System for MRTG Instalaltion
First you need to install the required compilers
#apt-get install gcc make g++
Apache 2 Installation with perl support
Follow these instructions to install apache2 with perl support
MRTG Installation
Now we need to install mrtg and snmp
Installing MRTG in Debian, Ubuntu and Kubuntu
#apt-get install mrtg snmpd
The installation will create an mrtg subdirectory where the Apache Web pages reside. On your Debian,ubnutu,kubuntu systems the path of this subdirectory is:
/var/www/mrtg
Now you need to edit the mrtg configuration file to edit the some of the settings
File is located at /etc/mrtg.cfg you need to change the global settings as follows
# Global Settings
RunAsDaemon: yes
EnableIPv6: no
WorkDir: /var/www/mrtg
Options[_]: bits,growright
WriteExpires: Yes
Title[^]: Traffic Analysis for
You will find a crontab running every 5 minutes as user root
# cat /etc/cron.d/mrtg
0-55/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg.cfg >> /var/log/mrtg/mrtg.log 2>&1; fi
Now we need to assign the snmp community name in snmp configration file /etc/snmp/snmpd.conf
# sec.name source community
# com2sec paranoid default public
com2sec readonly default public
#com2sec readwrite default private
Now you need to restart the snmp service
#/etc/init.d/snmpd restart
The configuration file creating using
#cfgmaker public@localhost > /etc/mrtg.cfg
Creating a configuration file for a device using cfgmaker
#cfgmaker public@192.168.0.1 >> /etc/mrtg.cfg
With the configuration file created correctly there’s only one other thing you have to do and that’s to use the indexmaker utility to create the summary home page. Since you have to re-run this command every time you make certain changes to the /etc/mrtg.cfg configuration file.
Creating index file for the webserver using indexmaker
#indexmaker /etc/mrtg.cfg > /var/www/mrtg/index.html
Now you need to reboot your system wait for five minutes or so and then take a look at your summary home page. If your Debian,ubuntu,kubuntu system’s IP address is 192.168.0.1 then you’d type in the following in the address bar of a browser running on a system on the same network:
http://192.168.0.1/mrtg/
Your summary home page should come up with a graph for each target entry in the configuration file. If a graph looks like there’s no data on it, click on it and check the statistics to see if any traffic is being seen. Small amounts of traffic won’t show up on the graphs because we used the Unscaled statement
Some of examples how to monitor cpu , memory , Disk usage
CPU Usage
/etc/mrtg/cpu.cfg
WorkDir: /var/www/mrtg
LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[localhost.cpu]:ssCpuRawUser.0&ssCpuRawUser.0:public@127.0.0.1+ ssCpuRawSystem.0&ssCpuRawSystem.0:public@127.0.0.1+
ssCpuRawNice.0&ssCpuRawNice.0:public@127.0.0.1
RouterUptime[localhost.cpu]: public@127.0.0.1
MaxBytes[localhost.cpu]: 100
Title[localhost.cpu]: CPU Load
PageTop[localhost.cpu]: Active CPU Load %
Unscaled[localhost.cpu]: ymwd
ShortLegend[localhost.cpu]: %
YLegend[localhost.cpu]: CPU Utilization
Legend1[localhost.cpu]: Active CPU in % (Load)
Legend2[localhost.cpu]:
Legend3[localhost.cpu]:
Legend4[localhost.cpu]:
LegendI[localhost.cpu]: Active
LegendO[localhost.cpu]:
Options[localhost.cpu]: growright,nopercent
Memory Usage
/etc/mrtg/mem.cfg
LoadMIBs: /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt
Target[localhost.mem]: .1.3.6.1.4.1.2021.4.6.0&.1.3.6.1.4.1.2021.4.6.0:public@localhost
PageTop[localhost.mem]:Free Memory
WorkDir: /var/www/mrtg
Options[localhost.mem]: nopercent,growright,gauge,noinfo
Title[localhost.mem]: Free Memory
MaxBytes[localhost.mem]: 1000000
kMG[localhost.mem]: k,M,G,T,P,X
YLegend[localhost.mem]: bytes
ShortLegend[localhost.mem]: bytes
LegendI[localhost.mem]: Free Memory:
LegendO[localhost.mem]:
Legend1[localhost.mem]: Free memory, not including swap, in bytes
Memory Monitoring (Total Versus Available Memory)
/etc/mrtg/memfree.cfg
LoadMIBs: /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt
Target[server.memory]: memAvailReal.0&memTotalReal.0:public@localhost
Title[server.memory]: Free Memory
PageTop[server.memory]: < H1 >Free Memory< /H1 >
MaxBytes[server.memory]: 100000000000
ShortLegend[server.memory]: B
YLegend[server.memory]: Bytes
LegendI[server.memory]: Free
LegendO[server.memory]: Total
Legend1[server.memory]: Free memory, not including swap, in bytes
Legend2[server.memory]: Total memory
Options[server.memory]: gauge,growright,nopercent
kMG[server.memory]: k,M,G,T,P,X
Memory Monitoring (Percentage usage)
/etc/mrtg/mempercent.cfg
LoadMIBs: /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt
Title[server.mempercent]: Percentage Free Memory
PageTop[server.mempercent]: < H1 >Percentage Free Memory< /H1 >
Target[server.mempercent]: ( memAvailReal.0&memAvailReal.0:publicy@localhost ) * 100 / ( memTotalReal.0&memTotalReal.0:public@localhost )
options[server.mempercent]: growright,gauge,transparent,nopercent
Unscaled[server.mempercent]: ymwd
MaxBytes[server.mempercent]: 100
YLegend[server.mempercent]: Memory %
ShortLegend[server.mempercent]: Percent
LegendI[server.mempercent]: Free
LegendO[server.mempercent]: Free
Legend1[server.mempercent]: Percentage Free Memory
Legend2[server.mempercent]: Percentage Free Memory
Disk Usage
/etc/mrtg/disk.cfg
LoadMIBs: /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt
Target[server.disk]: dskPercent.1&dskPercent.2:public@localhost
Title[server.disk]: Disk Partition Usage
PageTop[server.disk]: < H1 >Disk Partition Usage /home and /var< /H1 >
MaxBytes[server.disk]: 100
ShortLegend[server.disk]: %
YLegend[server.disk]: Utilization
LegendI[server.disk]: /home
LegendO[server.disk]: /var
Options[server.disk]: gauge,growright,nopercent
Unscaled[server.disk]: ymwd
Creating jobs for CPU , Memory and Disk Usage
CPU
/etc/cron.mrtg/cpu
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/cpu.cfg
Memory
/etc/cron.mrtg/mem
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/mem.cfg
Memory Free
/etc/cron.mrtg/memfree
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/memfree.cfg
Memory Percentage
/etc/cron.mrtg/mempercent
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/mempercent.cfg
Disk
/etc/cron.mrtg/disk
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/disk.cfg
Run each script 3 times (disregard the warnings)
/etc/cron.mrtg/cpu
/etc/cron.mrtg/mem
/etc/cron.mrtg/memfree
/etc/cron.mrtg/mempercent
/etc/cron.mrtg/disk
Make the Index Files
#/usr/bin/indexmaker –output=/var/www/mrtg/index.html \
–title=”Memory and CPU Usage ” \
–sort=name \
–enumerate \
/etc/mrtg/cpu.cfg \
/etc/mrtg/mem.cfg \
/etc/cron.mrtg/memfree \
/etc/cron.mrtg/mempercent \
/etc/cron.mrtg/disk
Make the mrtg.cfg file
#cfgmaker –global “WorkDir: /var/www/mrtg/” \
–global “Options[_]: growright,bits” \
–ifref=ip \
public@localhost > /etc/mrtg/mrtg.conf
Cronjob setup
/bin/cat >> /var/spool/cron/crontabs/root
*/5 * * * * /bin/run-parts /etc/cron.mrtg 1> /dev/null
Now you logon to your web browser http://192.168.0.1/mrtg/ and Now you should see CPU,Memory and Disk Usage graphs.
If you want more documentation about MRTG check here
October 12th, 2006 at 9:46 pm
Ok, I followed your howto, got it to work but your examples for cpu, mem, etc, really miss some PATHS and proper tags, I recommended you try to follow it
Just some hints on thins that hit me:
- Ubuntu (at least) adds the mrtg cron job by default, no need to add one (except the “run-parts /etc/cron.mrtg”, that is needed)
- Missing or wrong WorkDir in all examples (the /var/www/htdocs/mrtg one)
- Indexmaker step, I added the previous mrtg.cfg in the list so that it prints the traffic graph
- tags, mrtg does not take them when the are formatted like this , you have to squeeze it like this:
- lots of warning/error messages when launching the cpu, mem, memfree, etc configs, anyways… seems to work
Thanks for this article, with just minor fuss I am up and running. alt
October 12th, 2006 at 10:08 pm
thanks for your nice point and i have corrected some it helps more people.
December 25th, 2006 at 11:02 am
I got this error:
root@host:/home/beko# cfgmaker public@localhost > /etc/mrtg.cfg
SNMP Error:
no response received
SNMPv1_Session (remote host: “localhost” [127.0.0.1].161)
community: “public”
request ID: 2006478049
PDU bufsize: 8000 bytes
timeout: 2s
retries: 5
backoff: 1)
at /usr/share/perl5/SNMP_util.pm line 627
SNMPWALK Problem for 1.3.6.1.2.1.1 on public@localhost::::::v4only
at /usr/bin/cfgmaker line 919
WARNING: Skipping public@localhost: as no info could be retrieved
any idea?
December 25th, 2006 at 1:52 pm
this error related to SNMP response from your client check snmp is configured properly or not
February 6th, 2007 at 8:31 am
I’m not understand this line
Creating jobs for CPU , Memory and Disk Usage
February 6th, 2007 at 10:05 am
you need to create each one of the files menctioned with the details provided
February 6th, 2007 at 7:39 pm
Yes , sure but how can I do :
CPU
/etc/cron.mrtg/cpu
February 6th, 2007 at 7:40 pm
vi /etc/cron.mrtg/cpu right???
February 15th, 2007 at 12:41 pm
Some notes:
The snmpd restart command has a typo.
You should warn people about wrapping for the cpu.cfg file. This got me as I copy/pasted (copy/pasting from the website is very strange, it also nukes dashes and quotes).
The memfree.cfg, mempercent.cfg and disk.cfg sample files are missing the WorkDir directive so that they don’t work.
Also cpu.cfg and mem.cfg don’t have any tag in the PageTop property so that indexmaker choked on them. indexmaker also choked on every single other .cfg file because it does not like ‘’ and wants ‘’ instead (no space). Same for the closing tags.
The last indexmaker command looks wrong as it mixed .cfg files and cron scripts:
> /usr/bin/indexmaker \u2013output=/var/www/mrtg/index.html \
[…]
> /etc/mrtg/cpu.cfg \
> /etc/mrtg/mem.cfg \
> /etc/cron.mrtg/memfree \
Also, why not start with /etc/mrtg.cfg which we created in one of the first steps and now contains all the network interfaces?
Finally, why does the last cfgmaker command write to /etc/mrtg/mrtg.conf rather than /etc/mrtg.cfg? This mrtg.conf is not referenced anywhere else so I don’t see what’s the point. And if it should have been /etc/mrtg.cfg, then why have us run another cfgmaker command before?
Also, why run this cfgmaker command after indexmaker? Shouldn’t it be the other way around?
April 8th, 2007 at 10:49 pm
LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt
all on one line.
April 18th, 2007 at 6:49 pm
I don’t get it.
[ Error writing /etc/cron.mrtg/cpu: No such file or directory ]
July 13th, 2007 at 4:02 pm
hi Thanks for the tutorial.
Am experiencing a problem when I run:
/usr/bin/indexmaker -output=/var/www/mrtg/index.html -title=”Memory and CPU Usage” /etc/mrtg/cpu.cfg
I get the following error:
ERROR: CFG Error Unknown Option “sscpurawnice.0&sscpurawnice.0″ on line 5 or above.
Check doc/reference.txt for Help
Any ideas?
July 13th, 2007 at 6:46 pm
In response to jamie:
Make sure that you don’t have an extra line break. That should all be on one line in the cfg file.
February 7th, 2008 at 5:23 pm
I was good up until the, “examples how to monitor cpu, memory, disk usuage”.
These examples, should I create the /etc/mrtg/cpu.cfg /mem.cfg /memfree.cfg /mempercent.cfg
/disk.cfg files? Or are these already created? Should I just copy and past what is listed
above for these .cfg files? Is there anything I need to change to be specific for my devices?
Also the “Creating Jobs for CPU, Memory and disk usuage”, do I create these files , the one for
cron.mrtg/cpu /mem /memfree /mempercent /disk. I am using Ubuntu, which is very similar
to Debian. I can not seem to locate any of these files in the locations were you said they were
located. Not to mention when I did try creating them, it said permission denied.
Please help. I have MRTG up and working, and would like to tie up the rest soon.
February 24th, 2008 at 8:23 am
the permission denied error when running indexmaker comes from omitting one of the backslashes at the end of each line. if you’ve written this to a script as i have, bash is trying to run the next line (after the missing backslash) as a command. as your cmd files are not chmod +x, they won’t run. to resolve, add the necessary backslashes.
March 30th, 2008 at 6:23 pm
I got an error:
Use of uninitialized value in hash element at /usr/bin/indexmaker line 352.
Please help !
July 27th, 2008 at 10:17 am
this is a wonderful site. BLESSIMO