Skip to content

Install an SNMP Agent and Configure Telegraf SNMP Input

Video Lecture

Install an SNMP Agent and Configure Telegraf SNMP Input Install an SNMP Agent and Configure Telegraf SNMP Input

Description

SNMP stands for Simple Network Management Protocol.

We can configure Telegraf to read SNMP, save it into InfluxDB and view it in Grafana.

Common devices that support SNMP are routers, switches, printers, servers, workstations and other devices found on IP networks.

Not every network device supports SNMP, or has it enabled, and there is a good chance you don't have an SNMP enabled device available that you can use in this section.

So, I will show you how to install SNMP on an Ubuntu 20.04 server.

I will install it locally on the same server running InfluxDB.

sudo apt install snmp snmpd snmp-mibs-downloader

It is normally running after install.

sudo service snmpd status

Individual commands to either start, stop or restart are,

sudo service snmpd start
sudo service snmpd stop
sudo service snmpd restart

Do a test query

snmpwalk -v 2c -c public 127.0.0.1 .

The response should show results with OID numbers like in this example output

iso.3.6.1.2.1.1.1.0 = STRING: "Linux grafana 4.15.0-72-generic #81-Ubuntu SMP Tue Nov 26 12:20:02 UTC 2019 x86_64"
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.8072.3.2.10
iso.3.6.1.2.1.1.3.0 = Timeticks: (443) 0:00:04.43
iso.3.6.1.2.1.1.4.0 = STRING: "Me <me@example.org>"
iso.3.6.1.2.1.1.5.0 = STRING: "grafana"
iso.3.6.1.2.1.1.6.0 = STRING: "Sitting on the Dock of the Bay"
iso.3.6.1.2.1.1.7.0 = INTEGER: 72
iso.3.6.1.2.1.1.8.0 = Timeticks: (11) 0:00:00.11
iso.3.6.1.2.1.1.9.1.2.1 = OID: iso.3.6.1.6.3.11.3.1.1
iso.3.6.1.2.1.1.9.1.2.2 = OID: iso.3.6.1.6.3.15.2.1.1
iso.3.6.1.2.1.1.9.1.2.3 = OID: iso.3.6.1.6.3.10.3.1.1
...
etc

Now to enable MIB descriptions instead of OIDs.

Edit the snmp.conf file

sudo nano /etc/snmp/snmp.conf

comment out the line mibs as below, using a #

#mibs

Save, and retry a query.

snmpwalk -v 2c -c public 127.0.0.1 .

It should now show the MIBs descriptions in the results like in this example output.

SNMPv2-MIB::sysDescr.0 = STRING: Linux grafana 4.15.0-72-generic #81-Ubuntu SMP Tue Nov 26 12:20:02 UTC 2019 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (3015) 0:00:30.15
SNMPv2-MIB::sysContact.0 = STRING: Me <me@example.org>
SNMPv2-MIB::sysName.0 = STRING: grafana
SNMPv2-MIB::sysLocation.0 = STRING: Sitting on the Dock of the Bay
SNMPv2-MIB::sysServices.0 = INTEGER: 72
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (11) 0:00:00.11
SNMPv2-MIB::sysORID.1 = OID: SNMP-MPD-MIB::snmpMPDCompliance
SNMPv2-MIB::sysORID.2 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance
SNMPv2-MIB::sysORID.3 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance
...
etc

Now to configure Telegraf to read SNMP

sudo nano /etc/telegraf/telegraf.conf

Add this script below to the telegraf.conf file.

[[inputs.snmp]]
  agents = ["udp://127.0.0.1:161"]

  [[inputs.snmp.field]]
    oid = "RFC1213-MIB::sysUpTime.0"
    name = "uptime"

  [[inputs.snmp.field]]
    oid = "RFC1213-MIB::sysName.0"
    name = "source"
    is_tag = true

  [[inputs.snmp.table]]
    oid = "IF-MIB::ifTable"
    name = "interface"
    inherit_tags = ["source"]

    [[inputs.snmp.table.field]]
      oid = "IF-MIB::ifDescr"
      name = "ifDescr"
      is_tag = true

Save the above configuration addition, restart Telegraf and check status.

sudo service telegraf restart
sudo service telegraf status

⚠️ NOTE : By default SNMPD restricts how much information it returns. So currently we won't get any IF-MIB:: data from a SNMP query.

Go back into snmpd.conf and edit the view section to return more data.

sudo nano /etc/snmp/snmpd.conf

Change lines

...
view   systemonly  included   .1.3.6.1.2.1.1
view   systemonly  included   .1.3.6.1.2.1.25.1
...

to

...
view   systemonly  included   .1.3.6.1.2.1
#view   systemonly  included   .1.3.6.1.2.1.25.1
...

This will now return all data with the OID prefixes .1.3.6.1.2.1 which also includes interface information.

After a few moments, the snmp.table information should be queryable in InfluxDB and in Grafana through the interface measurement.

Sample Queries

Some sample queries to try against the InfluxDB data source in the Grafana explore tab.

from(bucket: "telegraf")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "interface")
  |> yield(name: "mean")
from(bucket: "telegraf")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "snmp")
  |> filter(fn: (r) => r["_field"] == "uptime")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")

Grafana 10 and Ubuntu 22.04 Notes

When installing SNMPD, you may get a warning about a kernel upgrade. Follow the prompts accepting the defaults, and press Tab to highlight the OK option to continue.

Comments