April 27, 2011, 5:41 a.m.
posted by whitehat
MRTG (Multi-Router Traffic Grapher) is a public domain package for producing graphs of various router statistics via a Web page. You can easily create graphs of traffic flow statistics through your home network's firewall/router or even your Linux box's NIC cards using MRTG. The product is available from the MRTG Web site (www.mrtg.org) and also on your distribution CDs. Figure shows a sample MRTG graph.
2. A typical MRTG Web page.
MRTG Download and Installation
You need to install MRTG before proceeding. Most Red Hat and Fedora Linux software products are available in the RPM format. When searching for the file, remember that the MRTG RPM's filename usually starts with mrtg and a version number, as in mrtg-2.10.5-3.i386.rpm.
In addition to MRTG, you need to install the SNMP utility tools as explained earlier and you need to have a Web server package installed for MRTG to work. Red Hat Linux usually comes with the Apache Web server software preinstalled. The easiest way to tell if Apache is installed is to run the rpm -q httpd command. If you don't get a positive response, you can refer to Chapter 20, "The Apache Web Server," for installation details. By default Apache expects the HTML files for your Web site to be located in /var/www/html. MRTG places its HTML files in /var/www/mrtg.
By default, MRTG maps the inbound and outbound data throughput rates on the device it is polling. Methods for specifying other OIDs, such as CPU and memory usage, are discussed in Chapter 23, "Advanced MRTG for Linux." For now, I'll stick with the default configuration.
When the MRTG RPM is installed, it creates a directory called /etc/mrtg in which all future configuration files are stored. To create a replacement default /etc/mrtg/mrtg.cfg configuration file for the server, follow these steps:
Getting MRTG to Poll Multiple Devices
The Fedora Core MRTG installation process creates a cron file named /etc/cron.d/mrtg. This file tells the cron daemon to run MRTG using the /etc/mrtg/mrtg.cfg file every five minutes to poll your network devices. You can configure MRTG to poll multiple devices, each with a separate configuration file. Here's how:
You could also create a script with the /usr/bin/mrtg/etc/mrtg/device.cfg entries in it and make cron run it every five minutes. This way you can just edit the script each time you add a device without having to restart cron.
Configuring Apache to Work with MRTG
With Fedora Core, MRTG creates an add-on configuration file named /etc/httpd/conf.d/mrtg.conf that includes all the necessary Apache commands for MRTG to work.
Some configuration may need to be done, because by default MRTG accepts Web requests from the Linux console only. You can add your home network to the file by inserting the network on the Allow from line, or you can allow universal access by commenting out that line along with the Deny from line. This example adds access from the 192.168.1.0 network:
<Location /mrtg> Order deny,allow Deny from all Allow from localhost 192.168.1.0/24 </Location>
If you want to access MRTG from the Internet, then you'll have to comment out the Deny statement and allow from all IP addresses:
<Location /mrtg> Order deny,allow Allow from all </Location>
Remember to restart Apache after you make these modifications for the changes to take effect.
How to View the MRTG Graphs in Your Web Browser
Using MRTG to Monitor Other Subsystems
MRTG will generate HTML pages with daily, weekly, monthly, and yearly statistics for your interfaces. By default, MRTG provides only network interface statistics. Chapter 23 has detailed examples and explanations of how to monitor Linux disk, CPU, memory, and Web connection data. The MRTG Web site, www.mrtg.org, also has links to other sites that show you how to monitor many other subsystems on a variety of devices and operating systems.
MRTG won't work if SNMP queries don't work. Make sure you follow the SNMP troubleshooting steps if you have any difficulties.
Setting the Correct Character Set
MRTG usually works only if your system uses an ASCII-based (Western European) character set. If it isn't set, then you'll get errors such as this every time you run MRTG from the command line or as part of a cron job:
[email protected] tmp]# mrtg /etc/mrtg/mrtg.cfg ------------------------------------------------------------------- ERROR: Mrtg will most likely not work propperly when the environment variable LANG is set to UTF-8. Please run mrtg in an envir.. where this is not the case: env LANG=C /usr/bin/mrtg ... ------------------------------------------------------------------- [[email protected] tmp]#
Your system's character set is defined in /etc/sysconfig/i18n, and the current Fedora default of en_US.UTF-8 won't work, but en_US will after a system reboot. This is not necessarily a good idea, especially if the native language Linux uses on your system is not ASCII based, other things may fail to work.
A better solution is to always run MRTG using this command instead of using just plain /usr/bin/mrtg:
env LANG=C /usr/bin/mrtg
This will modify the character set used by MRTG alone and shouldn't affect anything else.
Fedora Core 1 MRTG Errors with net-snmp
A bug appears in the MRTG implementation for some Fedora Core 1 MRTG versions when polling another Fedora Core 1 server.
When using a -ifref=ip statement with the cfgmaker command, every line in the configuration file that is generated becomes commented out. When it works, this statement is very convenient, because it makes MRTG provide graphs sorted by the IP addresses of the interfaces instead of the default, which is the much harder to recognize interface MAC address. Upgrading to the most current Core 1 version of MRTG will fix the problem:
### Interface 6 >> Descr: '' | Name: '' | Ip: '192.168.1.100' ### ### The following interface is commented out because: ### * has a speed of which makes no sense ### * got 'Received SNMP response with error code ### error status: noSuchName ### index 1 (OID: 126.96.36.199.188.8.131.52.1.10.6) ### SNMPv1_Session (remote host: "localhost" [127.0.0.1].161) ### community: "craz33guy" ### request ID: 824482716 ### PDU bufsize: 8000 bytes ### timeout: 2s ### retries: 5 # # Target[localhost_192.168.1.100]: /192.168.1.100:[email protected]: # SetEnv[localhost_192.168.1.100]: MRTG_INT_IP="192.168.1.100" MRTG_INT_DES # MaxBytes[localhost_192.168.1.100]: 0 # Title[localhost_192.168.1.100]: Traffic Analysis for 192.168.1.100 # PageTop[localhost_192.168.1.100]: <H1>Traffic Analysis for 192.168.1.100 # <TABLE> # <TR><TD>System:</TD> <TD>bigboy in Unknown</TD></TR> # <TR><TD>Maintainer:</TD> <TD>[email protected]</TD></TR> # <TR><TD>Description:</TD><TD> </TD></TR> # <TR><TD>ifType:</TD> <TD> ()</TD></TR> # <TR><TD>ifName:</TD> <TD></TD></TR> # <TR><TD>Max Speed:</TD> <TD>0.0 bits/s</TD></TR> # </TABLE>
[[email protected] tmp]# indexmaker --output=/var/www/mrtg/stats/index.html /etc/mrtg/mrtg.cfg Use of uninitialized value in hash element at /usr/bin/indexmaker line 307. [[email protected] tmp]#