Search:  
Gentoo Wiki

HOWTO_SNMP_and_MRTG_Made_Easy

This article is part of the HOWTO series.
Installation Kernel & Hardware Networks Portage Software System X Server Gaming Non-x86 Emulators Misc


Please format this article according to the guidelines and Wikification suggestions, then remove this notice {{Wikify}} from the article


Contents

Required & Optional Packages

Required:

Optional:

Let's Begin

NOTE: This guide suggests using an mrtg config per target, this is rather inefficient as mrtg can do them all in 1 job itself

SU Into root before continuing forward. Start by:

mkdir /etc/mrtg
mkdir /etc/cron.mrtg
mkdir -p /var/www/localhost/htdocs/mrtg

Now let's edit /etc/snmp/snmpd.conf NOTE: Ignore the warning not to edit this file.

File: /etc/snmp/snmpd.conf
com2sec local     127.0.0.1/32    public
com2sec local     10.10.10.0/24   public

group MyROGroup v1         local
group MyROGroup v2c        local
group MyROGroup usm        local

view all    included  .1                               80

access MyROGroup ""      any       noauth    exact  all    none   none

syslocation MyLocation
syscontact Me <me@somewhere.org>

Edit /etc/conf.d/snmpd file, and in SNMPD_FLAGS line have:

File: /etc/conf.d/snmpd

-C -c /etc/snmp/snmpd.conf

This makes sure SNMPD uses the above /etc/snmp/snmpd.conf, and _only_ that file.

Now the daemon:

/etc/init.d/snmpd start
/sbin/rc-update add snmpd default

Configuration

Traffic

/usr/bin/cfgmaker  \
--output=/etc/mrtg/traffic.cfg \
--ifdesc=ip \
--ifref=descr \
--global "WorkDir: /var/www/localhost/htdocs/mrtg" \
--global "Options[_]: bits,growright" \
  public@localhost

CPU

Now set up some files:

File: /etc/mrtg/cpu.cfg
WorkDir: /var/www/localhost/htdocs/mrtg
LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[localhost.cpu]:ssCpuRawUser.0&ssCpuRawUser.0:public@127.0.0.1 + ssCpuRawSystem.0&ssCpuRawSystem.0:public@127.0.0.1 + ssCpuRawNice.0&ssCpuRawNice.0:public@127.0.0.1
RouterUptime[localhost.cpu]: public@127.0.0.1
MaxBytes[localhost.cpu]: 100
Title[localhost.cpu]: CPU Load
PageTop[localhost.cpu]: <H1>Active CPU Load %</H1>
Unscaled[localhost.cpu]: ymwd
ShortLegend[localhost.cpu]: %
YLegend[localhost.cpu]: CPU Utilization
Legend1[localhost.cpu]: Active CPU in % (Load)
Legend2[localhost.cpu]:
Legend3[localhost.cpu]:
Legend4[localhost.cpu]:
LegendI[localhost.cpu]:  Active
LegendO[localhost.cpu]:
Options[localhost.cpu]: growright,nopercent

CPU-Temp

File: /etc/mrtg/cpu-temp.cfg
LoadMIBs: /usr/share/snmp/mibs/LM-SENSORS-MIB.txt
Target[localhost.cpu-temp]: .1.3.6.1.4.1.2021.13.16.2.1.3.1&.1.3.6.1.4.1.2021.13.16.2.1.3.1:public@localhost
PageTop[localhost.cpu-temp]: <H1>CPU Temperature</H1>
WorkDir: /var/www/localhost/htdocs/mrtg
Options[localhost.cpu-temp]: nopercent,growright,gauge,noinfo,pngdate,nobanner
Factor[localhost.cpu-temp]: 0.001
PNGTitle[localhost.cpu-temp]: CPU Temperature
Title[localhost.cpu-temp]: CPU Temperature
kMG[localhost.cpu-temp]: C
MaxBytes[localhost.cpu-temp]: 100000
YLegend[localhost.cpu-temp]: Temperature (c)
ShortLegend[localhost.cpu-temp]: C
LegendI[localhost.cpu-temp]: CPU Temperature:
LegendO[localhost.cpu-temp]:
Legend1[localhost.cpu-temp]: CPU Temperature
Legend2[localhost.cpu-temp]:
#Unscaled[localhost.cpu-temp]: ymwd
#WithPeak[localhost.cpu-temp]: ymwd
XSize[localhost.cpu-temp]: 360
YSize[localhost.cpu-temp]: 75
#YTics[localhost.cpu-temp]: 10
Colours[localhost.cpu-temp]: DKBLUE#61A0DF,DKBLUE#0000DD,DARKGREEN#006600,VIOLET#FF00FF

To get working CPU-Temp you must emerge net-analyzer/net-snmp with lm_sensors USE flag.

Memory

File: /etc/mrtg/mem.cfg
LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[localhost.mem]: memAvailReal.0&memAvailReal.0:public@localhost
PageTop[localhost.mem]: <H1>Free Memory</H1>
WorkDir: /var/www/localhost/htdocs/mrtg
Options[localhost.mem]: nopercent,growright,gauge,noinfo
Title[localhost.mem]: Free Memory
MaxBytes[localhost.mem]: 1000000
kMG[localhost.mem]: k,M,G,T,P,X
YLegend[localhost.mem]: bytes
ShortLegend[localhost.mem]: bytes
LegendI[localhost.mem]:  Free Memory:
LegendO[localhost.mem]:
Legend1[localhost.mem]: Free memory, not including swap, in bytes

Swap

File: /etc/mrtg/swap.cfg
LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[localhost.swap]: memAvailSwap.0&memAvailSwap.0:public@localhost
PageTop[localhost.swap]: <H1>Swap Memory</H1>
WorkDir: /var/www/localhost/htdocs/mrtg
Options[localhost.swap]: nopercent,growright,gauge,noinfo
Title[localhost.swap]: Free Memory
MaxBytes[localhost.swap]: 1000000
kMG[localhost.swap]: k,M,G,T,P,X
YLegend[localhost.swap]: bytes
ShortLegend[localhost.swap]: bytes
LegendI[localhost.swap]:  Free Memory:
LegendO[localhost.swap]:
Legend1[localhost.swap]: Swap memory avail, in bytes
  1. we're almost there

Ping

File: /etc/mrtg/ping.cfg
WorkDir: /var/www/localhost/htdocs/mrtg
Title[localhost.ping]: Round Trip Time
PageTop[localhost.ping]: <H1>Round Trip Time</H1>
Target[localhost.ping]: `/etc/mrtg/ping.sh`
MaxBytes[localhost.ping]: 2000
Options[localhost.ping]: growright,unknaszero,nopercent,gauge
LegendI[localhost.ping]: Pkt loss %
LegendO[localhost.ping]: Avg RTT
YLegend[localhost.ping]: RTT (ms)

Making Jobs

Traffic

File: /etc/cron.mrtg/traffic
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/traffic.cfg

CPU

File: /etc/cron.mrtg/cpu
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/cpu.cfg

CPU-Temp

File: /etc/cron.mrtg/cpu-temp
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/cpu-temp.cfg

Memory

File: /etc/cron.mrtg/mem
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/mem.cfg

Swap

File: /etc/cron.mrtg/swap
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/swap.cfg

Ping

File: /etc/cron.mrtg/ping
#!/bin/sh
/usr/bin/mrtg /etc/mrtg/ping.cfg

Ping.sh

File: /etc/mrtg/ping.sh
 #!/bin/sh
 PING="/bin/ping"
 # Google, for example
 ADDR="google.com"
 DATA=`$PING -c10 -s500 $ADDR -q `
 LOSS=`echo $DATA | awk '{print $18 }' | tr -d %`
 echo $LOSS
 if [ $LOSS = 100 ];
 then
               echo 0
 else
        echo $DATA | awk -F/ '{print $5 }'
 fi
/bin/chmod +x /etc/cron.mrtg/*
/bin/chmod +x /etc/mrtg/ping.sh

Run each script 3 times (disregard the warnings)

/etc/cron.mrtg/traffic
/etc/cron.mrtg/cpu
/etc/cron.mrtg/cpu-temp
/etc/cron.mrtg/mem
/etc/cron.mrtg/swap
/etc/cron.mrtg/ping

Make the Index

/usr/bin/indexmaker --output=/var/www/localhost/htdocs/mrtg/index.html \
--title="Power Under Control :)" \
--sort=name \
--enumerate \
/etc/mrtg/traffic.cfg \
/etc/mrtg/cpu.cfg \
/etc/mrtg/cpu-temp.cfg \
/etc/mrtg/mem.cfg \
/etc/mrtg/swap.cfg \
/etc/mrtg/ping.cfg

Make the mrtg.cfg

cfgmaker --global "WorkDir: /var/www/localhost/htdocs/mrtg/" \
--global "Options[_]: growright,bits" \
--ifref=ip \
public@localhost > /etc/mrtg/mrtg.cfg

Cronjob

/bin/cat >> /var/spool/cron/crontabs/root
*/5 * * * * /bin/run-parts /etc/cron.mrtg >/dev/null 2>&1

Now just press [ctrl+d]
or

/usr/bin/crontab -e

Additional CronJob Options

In your *.cfg file, add the lines -

RunAsDaemon: Yes
Interval: <Choose your interval, 5 is minimum>

This option works well if you choose not to create a cron job

Power Under Control

Open Mozilla or your browser of choice and browse:

/var/www/localhost/htdocs/mrtg/index.html

or use your httpd server

http://localhost/mrtg

Advanced Users

For other targets (and other stat), try with other object identifier (OID)

Polling

roberto@moira mrtg $ snmpwalk -v 1 -c public localhost mgmt.1.2.2.1.10.2
IF-MIB::ifInOctets.2 = Counter32: 140021440

Translating

roberto@moria mrtg $ snmptranslate -IR -Td mgmt.1.2.2.1.10.2
IF-MIB::ifInOctets.2
ifInOctets OBJECT-TYPE
 -- FROM       IF-MIB, RFC1213-MIB
 SYNTAX        Counter32
 MAX-ACCESS    read-only
 STATUS        current
 DESCRIPTION   "The total number of octets received on the interface,
    including framing characters.

    Discontinuities in the value of this counter can occur at
    re-initialization of the management system, and at other
    times as indicated by the value of
    ifCounterDiscontinuityTime."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) interfaces(2) ifTable(2) ifEntry(1) ifInOctets(10) 2 }

Most Important Files

/usr/share/doc/net-snmp
/usr/share/doc/mrtg-*/contrib

Discussion

Original forum discussion can be found here

UTF-8

IF your system is using UTF-8, you will get this:

-----------------------------------------------------------------------
ERROR: Mrtg will most likely not work properly when the environment
       variable LANG is set to UTF-8. Please run mrtg in an environment
       where this is not the case. Try the following command to start: 

       env LANG=C /usr/bin/mrtg /etc/mrtg/mem.cfg
-----------------------------------------------------------------------

So, just do as you're told for all files in /etc/cron.mrtg/:

See also

Retrieved from "http://www.gentoo-wiki.info/HOWTO_SNMP_and_MRTG_Made_Easy"

Last modified: Sun, 28 Sep 2008 05:16:00 +0000 Hits: 95,919