- Version 0.7.8 (06/15/2017) : new website for AIX packages
- Version 0.7.7 (10/31/2008) : security advisory
- Version 0.7.6 (06/11/2008) : security advisory
- Version 0.7.5 (02/01/2008) : updated the AIX links
- Version 0.7.4 (01/31/2008) : added links for Mac OS X
- Version 0.7.3 (01/29/2008) : updated the Solaris links
- Version 0.7.2 (12/04/2007) : list CentOS as RedHat / Fedora compatible (thanks to bennett)
- Version 0.7.1 (11/26/2007) : add an option to graph I/O usage under Gentoo Linux
- Version 0.7 (02/16/2007) : count entries in logfiles (thanks to gerdesj)
- Version 0.6 (11/02/2006) : added the "dontPrintUnits" keyword (thanks to netpoke2369)
- Version 0.5 (09/22/2006) : graph processes
- Version 0.4 (08/30/2006) : make Net-SNMP listens on TCP, and bind to a specific IP address
- Version 0.3 (08/14/2006) : build from sources instructions
- Version 0.2 (08/11/2006) : added SNMP version 3, "exec" and "proxy" directives
- Version 0.1 (08/10/2006) : intial release
This HowTo will explain how to install and configure the Net-SNMP agent. As the time of writing, the latest version available is 5.7.3 (published on 12/08/2014).
Chapter I: Getting Net-SNMP binaries
Depending on your operating system, you'll find packages or tarballs to install Net-SNMP :
- Linux
Usually every Linux distribution comes with Net-SNMP packages :- RedHat / Fedora / CentOS : install the net-snmp, net-snmp-libs and net-snmp-utils packages
- Debian / Ubuntu: install the libsnmp-base, libsnmp5, snmp and snmpd packages
- SuSE : install the net-snmp package
- Gentoo : simply emerge the net-snmp ebuild.
To graph I/O usage, add this option to portage :Code: Select all
# echo "net-analyzer/net-snmp diskio" >> /etc/portage/package.use
- Mandriva : install the libnet-snmp5, net-snmp and net-snmp-utils packages.
- AIX
RPM packages are available here.
You'll need Net-SNMP 5.4.2 for AIX 6.1 support. - Solaris
Solaris 10 ships with Net-SNMP 5.0.9
For older Solaris releases, packages are available in the Sunfreeware repository :- release 5.4.1 for Solaris 10 Sparc
- release 5.4.1 for Solaris 10 Intel
- release 5.4.1 for Solaris 9 Sparc
- release 5.4.1 for Solaris 9 Intel
- release 5.4.1 for Solaris 8 Sparc
- release 5.4.1 for Solaris 8 Intel
- release 5.4.1 for Solaris 7 Sparc
- release 5.1.1 for Solaris 2.6 Sparc
- release 5.1.1 for Solaris 2.5 Sparc
Tarballs are also available from the Net-SNMP main site :- release 5.2.2 for Solaris 9 on sun4u hardware
- release 5.2.2 for Solaris 8 on sun4u hardware
- release 5.2.2 for Solaris 7 on sun4u hardware
Files are copied to /usr/local/share/snmp, /usr/local/libs, /usr/local/include/net-snmp, /usr/local/man, /usr/local/bin and /usr/local/sbin - HP-UX
Tarballs are available from the Net-SNMP main site :- release 5.4 for HP-UX 11.11 PA-RISC
- release 5.4 for HP-UX 11.00 PA-RISC
- release 5.4 for HP-UX 10.20 PA-RISC
Files are copied to /usr/local/share/snmp, /usr/local/libs, /usr/local/include/net-snmp, /usr/local/man, /usr/local/bin and /usr/local/sbin - FreeBSD
Net-SNMP is available through the ports - Mac OS X
Packages are available :
Chapter II: Building the Net-SNMP agent from sources
If you can't find binaries for your architecture, you can build the Net-SNMP agent from sources. Latest sources are available here.
Here's how to get the configure options of an already running Net-SNMP agent :
Code: Select all
$ snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.100.6.0
UCD-SNMP-MIB::versionConfigureOptions.0 = STRING: "'-disable-shared' '--with-mib-modules=host/hr_system'"
- mibII/mta_sendmail, to graph MTA (Sendmail, Postfix, etc.) statistics
- diskio, to enable to graph I/O statistics
- ucd-snmp/lmSensors, for hardware monitoring (Linux and Solaris only)
Code: Select all
$ ./configure --with-mib-modules="module1 module2"
Code: Select all
$ ./configure --with-your-options
$ make
# mkdir /usr/local/dist
# make install prefix=/usr/local/dist/usr/local exec_prefix=/usr/local/dist/usr/local
# cd /usr/local/dist
# tar cvf /tmp/net-snmp-5.3.1-dist.tar usr
# gzip /tmp/net-snmp-5.3.1-dist.tar
# rm -rf /usr/local/dist
Chapter III: Configuring the Net-SNMP agent
Depending on how you've installed Net-SNMP, the main configuration file (snmpd.conf) is located in /etc/snmp (installation from package) or /usr/local/share/snmp (installation from tarball).
Please note that you need to restart (or send the HUP signal) the snmpd daemon whenever you modify snmpd.conf !
The minimum configuration is this one :
Code: Select all
rocommunity public
With this minimal configuration, you'll be able to graph CPU usage, load average, network interfaces, memory / swap usage, logged in users and number of processes.
You can restrict from which hosts SNMP queries are allowed :
Code: Select all
rocommunity public 127.0.0.1
rocommunity test 87.65.43.21
With the following example, Net-SNMP will listen on UDP port 10000 on 10.20.30.40 IP address :
Code: Select all
agentaddress 10.20.30.40:10000
Code: Select all
agentaddress tcp:161
For those who want some more security, you can use the SNMP version 3 protocol, with MD5 or SHA hashing :
Code: Select all
createUser frederic MD5 mypassphrase DES
group groupv3 usm frederic
view all included .iso 80
access groupv3 "" any auth exact all all all
Code: Select all
# snmpget -v 3 -l AuthNoPriv -u frederic -A mypassphrase 10.50.80.45 sysName.0
SNMPv2-MIB::sysName.0 = STRING: cyclopes
Now that you're done with access control, add these 2 lines in snmpd.conf to indicate the location and contact name of your device :
Code: Select all
syslocation Bat. C2
syscontact someone@somewhere.org
Some OIDs return a unit, eg "-153 0.1 dBm".
It's a safe idea to turn this off, by adding this to snmpd.conf :
Code: Select all
dontPrintUnits true
Next step is to graph filesystems in Cacti; the easyest way is to add this line in snmpd.conf :
Code: Select all
includeAllDisks
If you want a filesystem not to be listed here, add this line to snmpd.conf :
Code: Select all
ignoredisk /dev/rdsk/c0t2d0
You'll then have to list explicitly all filesystems you want to graph :
Code: Select all
disk /
disk /usr
disk /var
disk /oracle
Please note that the Net-SNMP agent can only report filesystems which where mounted before its start.
If you manually mount filesystems later, you'll have to reload the Net-SNMP agent (send the HUP signal).
You can also graph processes, by adding this to snmpd.conf :
Code: Select all
proc httpd
- prCount, number of current processes running with the name in question
- prNames, the process name you're counting.
Chapter IV: Test your configuration
Once Net-SNMP is configured and started, here's how to test it :
Code: Select all
$ snmpwalk -v 1 -c public localhost .1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0 = STRING: Linux cronos 2.4.28 #2 SMP ven jan 14 14:12:01 CET 2005 i686
You can even query which Net-SNMP version is running on a host :
Code: Select all
$ snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.100.2.0
UCD-SNMP-MIB::versionTag.0 = STRING: 5.2.1.2
Code: Select all
$ snmpwalk -v 1 -c foo localhost .1.3.6.1.2.1.1.1.0
Timeout: No Response from localhost
Check your community string, add firewall rules if necessary, etc.
If using SNMP version 3, specifying an unknown user will result in this error message :
Code: Select all
$ snmpget -v 3 -l AuthNoPriv -u john -A mypassphrase 10.50.80.45 sysName.0
snmpget: Unknown user name
Code: Select all
$ snmpget -v 3 -l AuthNoPriv -u frederic -A badpassphrase 10.50.80.45 sysName.0
snmpget: Authentication failure (incorrect password, community or key)
Code: Select all
$ snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.9.1.2
UCD-SNMP-MIB::dskPath.1 = STRING: /
UCD-SNMP-MIB::dskPath.2 = STRING: /BB
UCD-SNMP-MIB::dskPath.3 = STRING: /dev/shm
Finally, this query will you display your network interfaces :
Code: Select all
$ snmpwalk -v 1 -c public localhost .1.3.6.1.2.1.2.2.1.2
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: eth0
IF-MIB::ifDescr.3 = STRING: eth1
Chapter V: Extending the Net-SNMP agent
A great functionnality of Net-SNMP is that you can "extend" it.
Let's run the /tmp/foo.sh script :
Code: Select all
$ /tmp/foo.sh -arg1
123
Code: Select all
exec foo /bin/sh /tmp/foo.sh -arg1
- output of the script : ucdavis.extTable.extEntry.extOutput
- exit status : ucdavis.extTable.extEntry.extResult
- command : ucdavis.extTable.extEntry.extCommand
Code: Select all
$ snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.8.1
UCD-SNMP-MIB::extIndex.1 = INTEGER: 1
UCD-SNMP-MIB::extNames.1 = STRING: foo
UCD-SNMP-MIB::extCommand.1 = STRING: /bin/sh /tmp/foo.sh -arg1
UCD-SNMP-MIB::extResult.1 = INTEGER: 0
UCD-SNMP-MIB::extOutput.1 = STRING: 123
UCD-SNMP-MIB::extErrFix.1 = INTEGER: 0
UCD-SNMP-MIB::extErrFixCmd.1 = STRING:
As "foo" is our first exec directive, add ".1" at the end of the OID.
In Cacti, use the "SNMP - Generic OID Template" like this :
Voila ! Result of the /tmp/foo.sh script is now graphed in Cacti.
Now let's run this second script, which returns more than one result :
Code: Select all
$ /tmp/bar.sh
456
789
Another way to call scripts from snmpd.conf is by specifying an OID, like this :
Code: Select all
exec .1.3.6.1.4.1.2021.555 /bin/sh /tmp/bar.sh
Code: Select all
$ snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.555
UCD-SNMP-MIB::ucdavis.555.1.1 = INTEGER: 1
UCD-SNMP-MIB::ucdavis.555.2.1 = STRING: "/bin/sh"
UCD-SNMP-MIB::ucdavis.555.3.1 = STRING: "/tmp/bar.sh"
UCD-SNMP-MIB::ucdavis.555.100.1 = INTEGER: 0
UCD-SNMP-MIB::ucdavis.555.101.1 = STRING: "456"
UCD-SNMP-MIB::ucdavis.555.101.2 = STRING: "789"
UCD-SNMP-MIB::ucdavis.555.102.1 = INTEGER: 0
UCD-SNMP-MIB::ucdavis.555.103.1 = ""
You can then use the "SNMP - Generic OID Template" in Cacti (one Data Source per OID).
Let's say you want to count the number of entries in a log file.
Add this to snmpd.conf :
Code: Select all
logmatch cactistats /home/cactiuser/cacti/log/cacti.log 120 SYSTEM STATS
- the global count of matches will be available under the .1.3.6.1.4.1.2021.16.2.1.5.1 OID
- the "Regex match counter" (which is reset with each file rotation) will be available under the .1.3.6.1.4.1.2021.16.2.1.7.1 OID
Code: Select all
$ snmpwalk -v 1 -c public localhost logMatch
UCD-SNMP-MIB::logMatchMaxEntries.0 = INTEGER: 50
UCD-SNMP-MIB::logMatchIndex.1 = INTEGER: 1
UCD-SNMP-MIB::logMatchName.1 = STRING: cactistats
UCD-SNMP-MIB::logMatchFilename.1 = STRING: /home/cactiuser/cacti/log/cacti.log
UCD-SNMP-MIB::logMatchRegEx.1 = STRING: SYSTEM STATS
UCD-SNMP-MIB::logMatchGlobalCounter.1 = Counter32: 301634
UCD-SNMP-MIB::logMatchGlobalCount.1 = INTEGER: 301634
UCD-SNMP-MIB::logMatchCurrentCounter.1 = Counter32: 6692
UCD-SNMP-MIB::logMatchCurrentCount.1 = INTEGER: 6692
UCD-SNMP-MIB::logMatchCounter.1 = Counter32: 1
UCD-SNMP-MIB::logMatchCount.1 = INTEGER: 0
UCD-SNMP-MIB::logMatchCycle.1 = INTEGER: 120
UCD-SNMP-MIB::logMatchErrorFlag.1 = INTEGER: 0
UCD-SNMP-MIB::logMatchRegExCompilation.1 = STRING: Success
We'll then use another interesting directive, the "proxy" one.
Let's take for example the Squid proxy : when enabled, its SNMP agent listen to UDP 3401 port.
If you want to have system graphs and Squid graphs without declaring 2 devices in Cacti, add this in snmpd.conf :
Code: Select all
proxy -v 1 -c public localhost:3401 .1.3.6.1.4.1.3495.1
Let's query this host :
Code: Select all
$ snmpwalk -v 1 -c public 10.151.33.3 sysdescr
SNMPv2-MIB::sysDescr.0 = STRING: Linux srv1.foo.com 2.6.8.1-12mdk #1 Fri Oct 1 12:53:41 CEST 2004 i686
Code: Select all
$ snmpwalk -v 1 -c public 10.151.33.3 .1.3.6.1.4.1.3495.1.2.3.0
SNMPv2-SMI::enterprises.3495.1.2.3.0 = STRING: "2.5.STABLE6"