TUT:MRTG
Broadly speaking, there are two basic techniques for monitoring a system using SNMP. Either the agent can be configured to watch for certain values or events, and report to a management station when something significant happens. Alternatively, some external application can be set up that will poll the agent regularly, and collect the information of interest.
The DisMan Monitoring page describes the first approach - this tutorial will concentrate on the second, using the Multi Router Traffic Grapher tool.
Note that this does not attempt to be a complete tutorial on the use of MRTG, or even cover monitoring network traffic. Such topics are comprehensively covered on the MRTG site already. This page is specifically concerned with discussing other values that can be monitored using MRTG.
Contents
Monitoring CPU load
There are several ways to try to monitor CPU usage, because the system maintains several CPU counters: Idle, System, User, Nice. As MRTG does not allow you to graph more than two values at a time, it is possible to select any two values and graph against each other. It is also possible to compute a combined value.
User vs Idle CPU usage
The MRTG configuration would look something like
LoadMIBs: /usr/local/share/snmp/mibs/UCD-SNMP-MIB.txt Target[kontor.cpu]:ssCpuRawUser.0&ssCpuRawIdle.0:public@10.10.11.2 RouterUptime[kontor.cpu]: public@10.10.11.2 MaxBytes[kontor.cpu]: 100 Title[kontor.cpu]: CPU LOAD PageTop[kontor.cpu]: <H1>User CPU Load %</H1> Unscaled[kontor.cpu]: ymwd ShortLegend[kontor.cpu]: % YLegend[kontor.cpu]: CPU Utilization Legend1[kontor.cpu]: User CPU in % (Load) Legend2[kontor.cpu]: Idle CPU in % (Load) Legend3[kontor.cpu]: Legend4[kontor.cpu]: LegendI[kontor.cpu]: User LegendO[kontor.cpu]: Idle Options[kontor.cpu]: growright,nopercent
User vs System CPU usage
The MRTG configuration would look something like
LoadMIBs: /usr/local/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[kontor.usrsys]:ssCpuRawUser.0&ssCpuRawSystem.0:public@10.10.11.2 RouterUptime[kontor.usrsys]: public@10.10.11.2 MaxBytes[kontor.usrsys]: 100 Title[kontor.usrsys]: CPU LOAD PageTop[kontor.usrsys]: <H1>CPU (user and system) Load %</H1> Unscaled[kontor.usrsys]: ymwd ShortLegend[kontor.usrsys]: % YLegend[kontor.usrsys]: CPU Utilization Legend1[kontor.usrsys]: User CPU in % (Load) Legend2[kontor.usrsys]: System CPU in % (Load) Legend3[kontor.usrsys]: Legend4[kontor.usrsys]: LegendI[kontor.usrsys]: User LegendO[kontor.usrsys]: System Options[kontor.usrsys]: growright,nopercent
Active CPU usage
This example sums User, System and Nice and plots it as a single value.
The corresponding MRTG configuration is
LoadMIBs: /usr/local/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[kontor.cpusum]:ssCpuRawUser.0&ssCpuRawUser.0:public@10.10.11.2 + \ ssCpuRawSystem.0&ssCpuRawSystem.0:public@10.10.11.2 + \ ssCpuRawNice.0&ssCpuRawNice.0:public@10.10.11.2 RouterUptime[kontor.cpusum]: public@10.10.11.2 MaxBytes[kontor.cpusum]: 100 Title[kontor.cpusum]: CPU LOAD PageTop[kontor.cpusum]: <H1>Active CPU Load %</H1> Unscaled[kontor.cpusum]: ymwd ShortLegend[kontor.cpusum]: % YLegend[kontor.cpusum]: CPU Utilization Legend1[kontor.cpusum]: Active CPU in % (Load) Legend2[kontor.cpusum]: Legend3[kontor.cpusum]: Legend4[kontor.cpusum]: LegendI[kontor.cpusum]: Active LegendO[kontor.cpusum]: Options[kontor.cpusum]: growright,nopercent
Monitoring Disk space
There are two tables that can be used when monitoring disk space, UCD-SNMP-MIB:dskTable and HOST-RESOURCES-MIB:hrStorageTable. There are two noticeable differences bwtween these tables: UCD-SNMP-MIB:dskTable requires a configuration directive in snmpd.conf, but it also gives a direct measure of the percentage of free space
On the system I used for these examples, I have the following disks:
$ df Filesystem Size Used Avail Use% Mounted on /dev/hda6 289M 56M 218M 21% / /dev/hda1 7.3G 3.2G 4.1G 44% /mnt/windows /dev/hda7 1.7G 1.2G 429M 74% /usr /dev/hdc1 19G 6.7G 11G 37% /space
and I have put the following lines into snmpd.conf:
disk / 100000 disk /usr 100000 disk /space 100000
Monitoring dskTable
This plots the usage of the root and /usr partitions in one graph
LoadMIBs: /usr/local/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[kontor.root]:dskPercent.1&dskPercent.2:public@10.10.11.2 RouterUptime[kontor.root]: public@10.10.11.2 MaxBytes[kontor.root]: 100 Title[kontor.root]: DISK USAGE PageTop[kontor.root]: <H1>DISK / and /usr Usage %</H1> Unscaled[kontor.root]: ymwd ShortLegend[kontor.root]: % YLegend[kontor.root]: DISK Utilization Legend1[kontor.root]: Root disk Legend2[kontor.root]: /usr disk Legend3[kontor.root]: Legend4[kontor.root]: LegendI[kontor.root]: Root disk LegendO[kontor.root]: /usr disk Options[kontor.root]: growright,gauge,nopercent
Monitoring hrStorageTable
This plots the partition size as one value, and the used space as another.
Note: the values returned here are in units of hrStorageUnits, which, dependent on the file system type, may or may not be 1K.
LoadMIBs: /usr/local/share/snmp/mibs/HOST-RESOURCES-MIB.txt
Target[kontor.hrroot]:hrStorageSize.1&hrStorageUsed.1:public@10.10.11.2 RouterUptime[kontor.hrroot]: public@10.10.11.2 MaxBytes[kontor.hrroot]: 300000 Title[kontor.hrroot]: DISK / USAGE PageTop[kontor.hrroot]: <H1>DISK / Usage</H1> ShortLegend[kontor.hrroot]: B kMG[kontor.hrroot]: k,M,G,T,P kilo[kontor.hrroot]: 1024 YLegend[kontor.hrroot]: DISK / Utilization Legend1[kontor.hrroot]: Root disk size Legend2[kontor.hrroot]: Root disk usage Legend3[kontor.hrroot]: Legend4[kontor.hrroot]: LegendI[kontor.hrroot]: Root disk size LegendO[kontor.hrroot]: Root disk usage Options[kontor.hrroot]: growright,gauge,nopercent
Other Monitoring Examples
Two further examples that have been offered:
Monitoring TCP connections
Target[tcpopen]: .1.3.6.1.2.1.6.9.0&.1.3.6.1.2.1.6.9.0:public@localhost Options[tcpopen]: nopercent,growright,gauge,noinfo Title[tcpopen]: Open TCP connections PageTop[tcpopen]: Open TCP connections MaxBytes[tcpopen]: 1000000 YLegend[tcpopen]: # conns ShortLegend[tcpopen]: connections LegendI[tcpopen]: Connections: LegendO[tcpopen]: Legend1[tcpopen]: Open TCP connections
Monitoring Free Memory
Target[freemem]: .1.3.6.1.4.1.2021.4.11.0&.1.3.6.1.4.1.2021.4.11.0:public@localhost Options[freemem]: nopercent,growright,gauge,noinfo Title[freemem]: Free Memory PageTop[freemem]: Free Memory MaxBytes[freemem]: 1000000 kMG[freemem]: k,M,G,T,P,X YLegend[freemem]: bytes ShortLegend[freemem]: bytes LegendI[freemem]: Free Memory: LegendO[freemem]: Legend1[freemem]: Free memory, not including swap, in bytes
Tutorial Sections
About the SNMP Protocol
These tutorial links talk about SNMP generically and how the protocol itself works. They are good introductory reading material and the concepts are important to understand before diving into the later tutorials about Net-SNMP itself.
- How SNMP Works: About the protocol itself (GETs, GETNEXTs, etc)
- What data is in SNMP: All about SNMP Management Information Bases (MIBs)
- Securing SNMP: How to use the SNMP protocol securely
Net-SNMP Command Line Applications
These tutorial pages discuss the command line tools provided in the Net-SNMP suite of tools. Nearly all the example commands in these tutorials works if you try it yourself, as they're all examples that talk to our online Net-SNMP test agent. Given them a shot!
- snmptranslate: learning about the MIB tree.
- snmpget: retrieving data from a host.
- snmpgetnext: retrieving unknown indexed data.
- snmpwalk: retrieving lots of data at once!
- snmptable: displaying a table.
- snmpset: peforming write operations.
- snmpbulkget: communicates with a network entity using SNMP GETBULK request
- snmpbulkwalk: retrieve a sub-tree of management values using SNMP GETBULK requests.
- snmptrap: Sending and receiving traps, and acting upon them.
- Traps/informs with SNMPv3/USM: Sending and receiving SNMPv3/USM TRAPs and INFORMs
- Sending Traps/Informs via AgentX: Sending notifications from the command line through snmpd
- Common command line options:
- Writing mib2c config files
Application Configuration
All of our applications support configuration to allow you to customize how they behave.
Net-SNMP Daemons
Net-SNMP comes with two long-running daemons: a SNMP agent (snmpd) for responding to management requests and a notification receiver (snmptrapd) for receiving SNMP notifications.
- SNMP Agent (snmpd) Configuration
- SNMP Notification Receiver (snmptrapd)
- Agent Monitoring
- DisMan Monitoring
- Monitoring with MRTG
Coding Tutorials
Net-SNMP comes with a highly flexible and extensible API. The API allows you to create your own commands, add extensions to the agent to support your own MIBs and perform specialized processing of notifications.
- Client / Manager Coding Tutorials
- Agent Coding Tutorials
- The Agent Architecture page might be worth reading before or after the agent coding tutorials, and describes how the Agent Helpers work under the hood.
- Writing a mib module to serve information described by an SNMP MIB, and how to compile it into the net-snmp snmpd agent.
- Writing a Dynamically Loadable Object that can be loaded into the SNMP agent.
- Writing a Subagent that can be run to attach to the snmpd master agent.
- Writing a perl plugin to extend the agent using the NetSNMP::agent module.
- Writing shell scripts to extend the agent
- Using mib2c to help write an agent code template for you
- Header files and autoconf
Debugging SNMP Applications and Agents
All our tools and applications have extensive debugging output. These tutorials talk about how the debugging system works and how you can add your own debugging statements to you code:
- Debugging output printed using the -D command line option
- Using -Ddump to display packet breakdowns
- Debugging using GDB
Operating System Specific Tutorials
- Building With Visual Studio 2005 Express
- Building Net-SNMP 64-bit with Visual C++ 2010 Express
- Net-Snmp on Ubuntu
- Net-SNMP and lm-sensors on Ubuntu 10.04
- Net-SNMP for windows: