From Net-SNMP Wiki
Jump to: navigation, search

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.

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
   RouterUptime[kontor.cpu]: public@
   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)
   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
   RouterUptime[kontor.usrsys]: public@
   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)
   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@ + \
                         ssCpuRawSystem.0&ssCpuRawSystem.0:public@ + \
   RouterUptime[kontor.cpusum]: public@
   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)
   LegendI[kontor.cpusum]:  Active
   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
   RouterUptime[kontor.root]: public@
   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
   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
   RouterUptime[kontor.hrroot]: public@
   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
   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

   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: 
   Legend1[tcpopen]: Open TCP connections 

Monitoring Free Memory

   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: 
   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.

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!

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.

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.

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:

Operating System Specific Tutorials