MRTG stands for Multi Router Traffic Grapher, and can be used to graph much, much more than traffic from routers. This article will cover how to configure MRTG to graph data locally from a machine, as well as how to obtain data remotely over the network using SSH and graph it. It will not cover how to configure SNMP, or any of the details behind how MRTG works.
To install MRTG, download the source from http://www.mrtg.org/ and untar it. You will require gcc, perl, gd, libpng and zlib installed before compiling it.
Once all the dependancies are installed, cd into the untarred source directory, and run something like following. To see more options run configure with a -help argument.
$ ./configure --prefix=/usr/local/mrtg
Once the configuration has been done, run the following:
$ make $ sudo make install
This should install MRTG into the location you specified in the prefix.
The form that is needed by MRTG to graph from looks something like:
input output uptime hostname
So any values that you can provide in this form can be graphed. Note that MRTG can only graph integers, so it may be required to multiple the values by a factor.
The following perl script shows how to graph both used and free memory on a Linux machine.
#!/usr/bin/perl $machine = `/bin/hostname`; chomp($machine); $mem = `/usr/bin/free | grep Mem`; $uptime = `/usr/bin/uptime`; if ($mem =~ /^Mem:\s*(\d*)\s*(\d*)\s*(\d*)/) { $tot = $1; $used = $2; $free = $3; } if ($uptime =~ /up (.*), \d* users?,/) { $up = $1; } print "$used\n"; print "$free\n"; print "$up\n"; print "$machine\n";
There are only a few important global configuration settings for MRTG, which are as follows:
Htmldir: /path/to/mrtg/html Imagedir: /path/to/mrtg/html/images Logdir: /path/to/mrtg/html/logs
The next step is to add a section to mrtg.cfg, as follows:
Target[mem]: `/path/to/mrtg/scripts/mem.pl` Options[mem]: gauge,noinfo, nopercent, growright, nobanner Title[mem]: Memory Usage MaxBytes[mem]: 256000 YLegend[mem]: Memory Usage ShortLegend[mem]: Memory Usage LegendO[mem]: Memory Free: Legend2[mem]: Memory Free LegendI[mem]: Memory Used: Legend1[mem]: Memory Used PageTop[mem]: Memory Usage
It is also possible to graph one value by setting the script to return 0 (or anything else) and configuring the section in mrtg like the following. Notice the missing LegendI and Legend1 as well as the addition of noi in the options section.
Target[uptime]: `/path/to/mrtg/scripts/uptime.pl` Options[uptime]: gauge,noinfo, nopercent, \ growright, nobanner, noi Title[uptime]: Load MaxBytes[uptime]: 1000 YLegend[uptime]: load ShortLegend[uptime]: load LegendO[uptime]: Uptime: Legend2[uptime]: Load PageTop[uptime]: Load
Before setting up the configuration for remote monitoring, it is important to configure the connection method. This example shows how to use ssh with a passphrase-less key to allow the connection.
On the server running MRTG, create a key as the user who is running the processes as follows:
$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/srcuser/.ssh/id\_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/srcuser/.ssh/id\_rsa. Your public key has been saved in /home/srcuser/.ssh/id\_rsa.pub. The key fingerprint is: a1:b8:35:0d:80:1b:ab:eb:ca:00:f3:78:bb:83:ae:cd srcuser@host
Then copy the contents of srcuser1/.ssh/id_rsa.pub and append it on the remote host in destuser/.ssh/authorized_keys. Once this is has been done, it should then be possible to ssh from the local server to the remote one as the specified user without a passphrase. It is important to do this manually at least once and accept the ssh host key.
Next, create the scripts on the remote host as per usual, and place them in the desired directory. Then create the configuration on the local server as usual, with the following change:
Target[dest-conn]: `ssh destuser@host2 \ /path/to/mrtg/bin/script.pl`
This specifies that the script to run will ssh to the remote host and run the script and return the information to MRTG on the local server.
Once monitoring is setup for all the values desired, set up a cronjob like the following that runs at the desired interval - in this case, every 5 minutes.
*/5 * * * * /path/to/mrtg/bin/mrtg \ /path/to/mrtg/etc/mrtg.cfg \ --logging /var/log/mrtg.log
Using the technique described, it is possible to graph a wide variety of properties of a server without the complexity of setting up and maintaining SNMP. It is important to monitor hosts to get a grasp of what the machine is doing as well as to gauge when upgrades are required.