Screen Shot 2017-03-02 at 10.03.08 PM.png Screen Shot 2017-03-02 at 10.07.06 PM.png Screen Shot 2017-03-02 at 10.06.48 PM.png Screen Shot 2017-03-02 at 10.06.18 PM.png Screen Shot 2017-03-02 at 10.05.53 PM.png Screen Shot 2017-03-02 at 10.05.27 PM.png Screen Shot 2017-03-02 at 10.04.56 PM.png Screen Shot 2017-03-02 at 10.04.29 PM.png
Templated Grafana Dashboard for Ubiquiti Networks EdgeRouters
Detailed dashboard for monitoring of Ubiquiti EdgeRouters via SNMP.
The Telegraf collector configuration is MIB-based so all of the required MIBs will need to be available for the collector to perform the needed translations. Most SNMP distributions available on most platforms already provide these. This configuration uses the "new" SNMP plugin for Telegraf, so SNMP monitoring must be enabled in the EdgeOS configurations. The 'agents' list in the configuration is of the actual EdgeRouters themselves.
Important Dependency Note
The included Telegraf:SNMP plugin configuration depends upon a feature (flag 'index_as_tag') that is not part of the released Telegraf 1.2. Several collected object tables leverage a non-accessible index, such as to identify the IP Version for the statistics in each row. The actual index is the sub-id for each table element, of which the Telegraf:SNMP plugin does not currently make available as a field or tag. However this capability (PR #2366 ) has been added/merged to the latest Telegraf source targeted for the next formal release.
There are three options for the interim until the next formal release:
- Wait for a formal release of Telegraf with the needed support. The noted PR is tagged for the Telegraf v1.3 milestone.
- Use a current nightly build, if available.
- Build custom version of Telegraf using the github influxdata/telegraf master branch. This is actually a straightforward and relatively easy process.
Dependencies
Notes
As with any SNMP-based monitoring solution with EdgeRouters, IP forwarding statistics will not reflect packets that have been hardware-offloaded.
References
This dashboard and dependent configurations may also be found at https://github.com/WaterByWind/grafana-dashboards
License
This dashboard is distributed under The MIT License (MIT)
Collector Configuration Details
Telegraf SNMP plugin configuration (add to telegraf.conf
).
Note: You will need to change/set these in the configuration below:
- SNMP community string for input plugin
- URL to your InfluxDB instance for output plugin
- InfluxDB username & password for output plugin
##
## SNMP Input Plugin
##
##
## -- 'index_as_tag' on tables requires PR #2366 for support, part of current master branch tagged for 1.3 release
## -- See https://github.com/influxdata/telegraf/issues/1948
##
##
## EdgeRouter devices
##
[[inputs.snmp]]
# List of agents to poll
agents = [ "edgerouter1", "edgerouter2" ]
# Polling interval
interval = "60s"
# Timeout for each SNMP query.
timeout = "5s"
# Number of retries to attempt within timeout.
retries = 3
# SNMP version, values can be 1, 2, or 3
version = 2
# SNMP community string.
community = "public"
# The GETBULK max-repetitions parameter
max_repetitions = 50
# Measurement name
name = "snmp.EdgeOS"
##
## Exclusions
##
# Don't want these columns from UCD-SNMP-MIB::laTable
fielddrop = [ "laErrorFlag", "laErrMessage" ]
# Don't want these rows from UCD-DISKIO-MIB::diskIOTable
[inputs.snmp.tagdrop]
diskIODevice = [ "loop*", "ram*" ]
##
## System details
##
# System name (hostname)
[[inputs.snmp.field]]
name = "sysName"
oid = "SNMPv2-MIB::sysName.0"
is_tag = true
# System vendor OID
[[inputs.snmp.field]]
name = "sysObjectID"
oid = "SNMPv2-MIB::sysObjectID.0"
# System description
[[inputs.snmp.field]]
name = "sysDescr"
oid = "SNMPv2-MIB::sysDescr.0"
# System contact
[[inputs.snmp.field]]
name = "sysContact"
oid = "SNMPv2-MIB::sysContact.0"
# System location
[[inputs.snmp.field]]
name = "sysLocation"
oid = "SNMPv2-MIB::sysLocation.0"
##
## Host/System Resources
##
# System uptime
[[inputs.snmp.field]]
name = "sysUpTime"
oid = "HOST-RESOURCES-MIB::hrSystemUptime.0"
# Number of user sessions
[[inputs.snmp.field]]
name = "hrSystemNumUsers"
oid = "HOST-RESOURCES-MIB::hrSystemNumUsers.0"
# Number of process contexts
[[inputs.snmp.field]]
name = "hrSystemProcesses"
oid = "HOST-RESOURCES-MIB::hrSystemProcesses.0"
# Device Listing
[[inputs.snmp.table]]
oid = "HOST-RESOURCES-MIB::hrDeviceTable"
[[inputs.snmp.table.field]]
oid = "HOST-RESOURCES-MIB::hrDeviceIndex"
is_tag = true
##
## Context Switches & Interrupts
##
# Number of interrupts processed
[[inputs.snmp.field]]
name = "ssRawInterrupts"
oid = "UCD-SNMP-MIB::ssRawInterrupts.0"
# Number of context switches
[[inputs.snmp.field]]
name = "ssRawContexts"
oid = "UCD-SNMP-MIB::ssRawContexts.0"
##
## Host performance metrics
##
# System Load Average
[[inputs.snmp.table]]
oid = "UCD-SNMP-MIB::laTable"
[[inputs.snmp.table.field]]
oid = "UCD-SNMP-MIB::laNames"
is_tag = true
##
## CPU inventory
##
# Processor listing
[[inputs.snmp.table]]
index_as_tag = true
oid = "HOST-RESOURCES-MIB::hrProcessorTable"
##
## CPU utilization
##
# Number of 'ticks' spent on user-level
[[inputs.snmp.field]]
name = "ssCpuRawUser"
oid = "UCD-SNMP-MIB::ssCpuRawUser.0"
# Number of 'ticks' spent on reduced-priority
[[inputs.snmp.field]]
name = "ssCpuRawNice"
oid = "UCD-SNMP-MIB::ssCpuRawNice.0"
# Number of 'ticks' spent on system-level
[[inputs.snmp.field]]
name = "ssCpuRawSystem"
oid = "UCD-SNMP-MIB::ssCpuRawSystem.0"
# Number of 'ticks' spent idle
[[inputs.snmp.field]]
name = "ssCpuRawIdle"
oid = "UCD-SNMP-MIB::ssCpuRawIdle.0"
# Number of 'ticks' spent waiting on I/O
[[inputs.snmp.field]]
name = "ssCpuRawWait"
oid = "UCD-SNMP-MIB::ssCpuRawWait.0"
# Number of 'ticks' spent in kernel
[[inputs.snmp.field]]
name = "ssCpuRawKernel"
oid = "UCD-SNMP-MIB::ssCpuRawKernel.0"
# Number of 'ticks' spent on hardware interrupts
[[inputs.snmp.field]]
name = "ssCpuRawInterrupt"
oid = "UCD-SNMP-MIB::ssCpuRawInterrupt.0"
# Number of 'ticks' spent on software interrupts
[[inputs.snmp.field]]
name = "ssCpuRawSoftIRQ"
oid = "UCD-SNMP-MIB::ssCpuRawSoftIRQ.0"
##
## System Memory (physical/virtual)
##
# Size of phsyical memory (RAM)
[[inputs.snmp.field]]
name = "hrMemorySize"
oid = "HOST-RESOURCES-MIB::hrMemorySize.0"
# Size of real/phys mem installed
[[inputs.snmp.field]]
name = "memTotalReal"
oid = "UCD-SNMP-MIB::memTotalReal.0"
# Size of real/phys mem unused/avail
[[inputs.snmp.field]]
name = "memAvailReal"
oid = "UCD-SNMP-MIB::memAvailReal.0"
# Total amount of mem unused/avail
[[inputs.snmp.field]]
name = "memTotalFree"
oid = "UCD-SNMP-MIB::memTotalFree.0"
# Size of mem used as shared memory
[[inputs.snmp.field]]
name = "memShared"
oid = "UCD-SNMP-MIB::memShared.0"
# Size of mem used for buffers
[[inputs.snmp.field]]
name = "memBuffer"
oid = "UCD-SNMP-MIB::memBuffer.0"
# Size of mem used for cache
[[inputs.snmp.field]]
name = "memCached"
oid = "UCD-SNMP-MIB::memCached.0"
##
## Block (Disk) performance
##
# System-wide blocks written
[[inputs.snmp.field]]
name = "ssIORawSent"
oid = "UCD-SNMP-MIB::ssIORawSent.0"
# Number of blocks read
[[inputs.snmp.field]]
name = "ssIORawReceived"
oid = "UCD-SNMP-MIB::ssIORawReceived.0"
# Per-device (disk) performance
[[inputs.snmp.table]]
oid = "UCD-DISKIO-MIB::diskIOTable"
[[inputs.snmp.table.field]]
oid = "UCD-DISKIO-MIB::diskIODevice"
is_tag = true
##
## Disk/Partition/Filesystem inventory & usage
##
# Storage listing
[[inputs.snmp.table]]
oid = "HOST-RESOURCES-MIB::hrStorageTable"
[[inputs.snmp.table.field]]
oid = "HOST-RESOURCES-MIB::hrStorageDescr"
is_tag = true
##
## Interface metrics
##
# Per-interface traffic, errors, drops
[[inputs.snmp.table]]
oid = "IF-MIB::ifTable"
[[inputs.snmp.table.field]]
oid = "IF-MIB::ifName"
is_tag = true
# Per-interface high-capacity (HC) counters
[[inputs.snmp.table]]
oid = "IF-MIB::ifXTable"
[[inputs.snmp.table.field]]
oid = "IF-MIB::ifName"
is_tag = true
##
## IP metrics
##
# System-wide IP metrics
[[inputs.snmp.table]]
index_as_tag = true
oid = "IP-MIB::ipSystemStatsTable"
##
## ICMP Metrics
##
# ICMP statistics
[[inputs.snmp.table]]
index_as_tag = true
oid = "IP-MIB::icmpStatsTable"
# ICMP per-type statistics
[[inputs.snmp.table]]
index_as_tag = true
oid = "IP-MIB::icmpMsgStatsTable"
##
## UDP statistics
##
# Datagrams delivered to app
[[inputs.snmp.field]]
name = "udpInDatagrams"
oid = "UDP-MIB::udpInDatagrams.0"
# Datagrams received with no app
[[inputs.snmp.field]]
name = "udpNoPorts"
oid = "UDP-MIB::udpNoPorts.0"
# Datagrams received with error
[[inputs.snmp.field]]
name = "udpInErrors"
oid = "UDP-MIB::udpInErrors.0"
# Datagrams sent
[[inputs.snmp.field]]
name = "udpOutDatagrams"
oid = "UDP-MIB::udpOutDatagrams.0"
##
## TCP statistics
##
# Number of CLOSED -> SYN-SENT transitions
[[inputs.snmp.field]]
name = "tcpActiveOpens"
oid = "TCP-MIB::tcpActiveOpens.0"
# Number of SYN-RCVD -> LISTEN transitions
[[inputs.snmp.field]]
name = "tcpPassiveOpens"
oid = "TCP-MIB::tcpPassiveOpens.0"
# Number of SYN-SENT/RCVD -> CLOSED transitions
[[inputs.snmp.field]]
name = "tcpAttemptFails"
oid = "TCP-MIB::tcpAttemptFails.0"
# Number of ESTABLISHED/CLOSE-WAIT -> CLOSED transitions
[[inputs.snmp.field]]
name = "tcpEstabResets"
oid = "TCP-MIB::tcpEstabResets.0"
# Number of ESTABLISHED or CLOSE-WAIT
[[inputs.snmp.field]]
name = "tcpCurrEstab"
oid = "TCP-MIB::tcpCurrEstab.0"
# Number of segments received
[[inputs.snmp.field]]
name = "tcpInSegs"
oid = "TCP-MIB::tcpInSegs.0"
# Number of segments sent
[[inputs.snmp.field]]
name = "tcpOutSegs"
oid = "TCP-MIB::tcpOutSegs.0"
# Number of segments retransmitted
[[inputs.snmp.field]]
name = "tcpRetransSegs"
oid = "TCP-MIB::tcpRetransSegs.0"
# Number of segments received with error
[[inputs.snmp.field]]
name = "tcpInErrs"
oid = "TCP-MIB::tcpInErrs.0"
# Number of segments sent w/RST
[[inputs.snmp.field]]
name = "tcpOutRsts"
oid = "TCP-MIB::tcpOutRsts.0"
##
## IP routing statistics
##
# Number of valid routing entries
[[inputs.snmp.field]]
name = "inetCidrRouteNumber"
oid = "IP-FORWARD-MIB::inetCidrRouteNumber.0"
# Number of valid entries discarded
[[inputs.snmp.field]]
name = "inetCidrRouteDiscards"
oid = "IP-FORWARD-MIB::inetCidrRouteDiscards.0"
# Number of valid forwarding entries
[[inputs.snmp.field]]
name = "ipForwardNumber"
oid = "IP-FORWARD-MIB::ipForwardNumber.0"
##
## IP routing statistics
##
# Number of valid routes discarded
[[inputs.snmp.field]]
name = "ipRoutingDiscards"
oid = "RFC1213-MIB::ipRoutingDiscards.0"
##
## SNMP metrics
##
# Number of SNMP messages received
[[inputs.snmp.field]]
name = "snmpInPkts"
oid = "SNMPv2-MIB::snmpInPkts.0"
# Number of SNMP Get-Request received
[[inputs.snmp.field]]
name = "snmpInGetRequests"
oid = "SNMPv2-MIB::snmpInGetRequests.0"
# Number of SNMP Get-Next received
[[inputs.snmp.field]]
name = "snmpInGetNexts"
oid = "SNMPv2-MIB::snmpInGetNexts.0"
# Number of SNMP objects requested
[[inputs.snmp.field]]
name = "snmpInTotalReqVars"
oid = "SNMPv2-MIB::snmpInTotalReqVars.0"
# Number of SNMP Get-Response received
[[inputs.snmp.field]]
name = "snmpInGetResponses"
oid = "SNMPv2-MIB::snmpInGetResponses.0"
# Number of SNMP messages sent
[[inputs.snmp.field]]
name = "snmpOutPkts"
oid = "SNMPv2-MIB::snmpOutPkts.0"
# Number of SNMP Get-Request sent
[[inputs.snmp.field]]
name = "snmpOutGetRequests"
oid = "SNMPv2-MIB::snmpOutGetRequests.0"
# Number of SNMP Get-Next sent
[[inputs.snmp.field]]
name = "snmpOutGetNexts"
oid = "SNMPv2-MIB::snmpOutGetNexts.0"
# Number of SNMP Get-Response sent
[[inputs.snmp.field]]
name = "snmpOutGetResponses"
oid = "SNMPv2-MIB::snmpOutGetResponses.0"
If an InfluxDB output plugin is not already configured then the following will be needed as well
##
## InfluxDB Output Plugin
##
[[outputs.influxdb]]
urls = ["http://localhost:8086"] # required
database = "telegraf" # required
retention_policy = ""
write_consistency = "any"
timeout = "5s"
username = "username"
password = "password"
user_agent = "telegraf"
#