This exporter is the recommended way to expose SNMP data in a format which Prometheus can ingest.
Step 1: Basic Installation
Install the basic minimal required packages
# apt install prometheus-snmp-exporter snmp-mibs-downloader unzip build-essential libsnmp-dev p7zip-full
Download all the basic SNMP MIBS
# download-mibs Downloading documents and extracting MIB files. This will take some minutes. In case this process fails, it can always be repeated later by executing /usr/bin/download-mibs again. RFC1155-SMI: 119 lines. RFC1213-MIB: 2613 lines. NOTE: SMUX: ignored. SMUX-MIB: 158 lines. CLNS-MIB: 1294 lines. RFC1381-MIB: 1007 lines. RFC1382-MIB: 2627 lines. RFC1414-MIB: 131 lines. SNMPv2-PARTY-MIB: 1410 lines. SNMPv2-M2M-MIB: 807 lines. MIOX25-MIB: 708 lines. PPP-LCP-MIB: 764 lines. PPP-SEC-MIB: 289 lines. PPP-IP-NCP-MIB: 203 lines. PPP-BRIDGE-NCP-MIB: 429 lines. FDDI-SMT73-MIB: 2126 lines. TOKEN-RING-RMON-MIB: 2302 lines. SOURCE-ROUTING-MIB: 450 lines. DECNET-PHIV-MIB: 3030 lines. .... ...
Step 2: Create Exporter
Ubiquiti EdgeRouter
Use the following data to generate an EdgeRouter configuration, this example includes BGP peer details.
# =================================================================================================
# EDGE ROUTER
# =================================================================================================
edgerouter:
version: 3
version: 3
timeout: 10s
retries: 3
auth:
security_level: authPriv
username: snmpuser
password: someauthpw
auth_protocol: SHA
priv_protocol: AES
priv_password: someprivpksl2
walk:
- hrSystemUptime
- hrSystemNumUsers
- hrSystemProcesses
- hrStorage
- interfaces
- ipTrafficStats
- ipInReceives
- ipInHdrErrors
- ipInAddrErrors
- ipForwDatagrams
- ipInUnknownProtos
- ipInDiscards
- ipInDelivers
- ipOutRequests
- ipOutDiscards
- ipOutNoRoutes
- ipReasmReqds
- ipReasmOKs
- ipReasmFails
- ipFragOKs
- ipFragFails
- ipFragCreates
- icmp
- ifXTable
- 1.3.6.1.4.1.2021.4 # UCD memory
- 1.3.6.1.4.1.2021.10 # UCD Load
- systemStats
- bgpPeerTablee
lookups:
- source_indexes: [ifIndex]
lookup: ifAlias
drop_source_indexes: true
- source_indexes: [ipIfStatsIfIndex]
lookup: ifAlias
drop_source_indexes: true
- source_indexes: [hrStorageIndex]
lookup: hrStorageDescr
drop_source_indexes: true
- source_indexes: [laIndex]
lookup: laNames
drop_source_indexes: true
- source_indexes: [bgpPeerRemoteAddr]
lookup: bgpPeerRemoteAs
overrides:
bgpPeerState:
type: EnumAsStateSet
bgpPeerAdminStatus:
type: EnumAsStateSet
Ubiquiti UNIFi
Download the UNIFI MIB files
# cd /usr/share/snmp/mibs # wget http://dl.ubnt-ut.com/snmp/UBNT-MIB -q -O UBNT-MIB.txt
The generator.yml data used for UNIFI is as follows:
# =================================================================================================
# Ubiquiti / UniFi
# =================================================================================================
#
# http://dl.ubnt-ut.com/snmp/UBNT-MIB
# http://dl.ubnt-ut.com/snmp/UBNT-UniFi-MIB
#
# =================================================================================================
ubiquiti_unifi:
version: 3
version: 2
timeout: 10s
retries: 3
auth:
community: mycomro
walk:
- sysUpTime
- interfaces
- ifXTable
- 1.3.6.1.4.1.41112.1.6 # ubntUniFi
overrides:
ifType:
type: EnumAsInfo
Synology
Download the synology MIB files
# cd /tmp # wget https://global.download.synology.com/download/Document/Software/DeveloperGuide/Firmware/DSM/All/enu/Synology_MIB_File.zip # mkdir /usr/share/snmp/mibs # cd Synology_MIB_File # cp *.txt /usr/share/snmp/mibs
The generator.yml data used for SYNOLOGY is as follows:
# =================================================================================================
# SYNOLOGY
# =================================================================================================
#
# Synology MIBs can be found here:
# http://www.synology.com/support/snmp_mib.php
# https://global.download.synology.com/download/Document/Software/DeveloperGuide/Firmware/DSM/All/enu/Synology_MIB_File.zip
# Tested on RS2414rp+ NAS
#
# =================================================================================================
synology:
version: 3
version: 3
timeout: 10s
retries: 3
auth:
security_level: authPriv
username: snmpuser
password: someauthpw
auth_protocol: SHA
priv_protocol: AES
priv_password: someprivpw
walk:
- interfaces
- sysUpTime
- ifXTable
- laNames
- laLoadInt
- ssCpuUser
- ssCpuSystem
- ssCpuIdle
- memory
- hrStorage
- 1.3.6.1.4.1.6574.1 # synoSystem
- 1.3.6.1.4.1.6574.2 # synoDisk
- 1.3.6.1.4.1.6574.3 # synoRaid
- 1.3.6.1.4.1.6574.4 # synoUPS
- 1.3.6.1.4.1.6574.5 # synologyDiskSMART
- 1.3.6.1.4.1.6574.6 # synologyService
- 1.3.6.1.4.1.6574.101 # storageIO
- 1.3.6.1.4.1.6574.102 # spaceIO
- 1.3.6.1.4.1.6574.104 # synologyiSCSILUN
lookups:
- source_indexes: [spaceIOIndex]
lookup: spaceIODevice
drop_source_indexes: true
- source_indexes: [storageIOIndex]
lookup: storageIODevice
drop_source_indexes: true
- source_indexes: [serviceInfoIndex]
lookup: serviceName
drop_source_indexes: true
- source_indexes: [ifIndex]
# Use OID to avoid conflict with Netscaler NS-ROOT-MIB.
lookup: 1.3.6.1.2.1.31.1.1.1.1 # ifName
drop_source_indexes: true
- source_indexes: [diskIndex]
lookup: diskID
drop_source_indexes: true
- source_indexes: [raidIndex]
lookup: raidName
drop_source_indexes: true
- source_indexes: [laIndex]
lookup: laNames
drop_source_indexes: true
- source_indexes: [hrStorageIndex]
lookup: hrStorageDescr
drop_source_indexes: true
overrides:
ifType:
type: EnumAsInfo
1.3.6.1.4.1.6574.1.5.1: # Model
type: DisplayString
1.3.6.1.4.1.6574.1.5.2: # Serial
type: DisplayString
1.3.6.1.4.1.6574.1.5.3: # Version
type: DisplayString
1.3.6.1.4.1.6574.2.1.1.2: # Disk Slot
type: DisplayString
1.3.6.1.4.1.6574.2.1.1.3: # Disk Model
type: DisplayString
1.3.6.1.4.1.6574.2.1.1.4: # Disk Type
type: DisplayString
1.3.6.1.4.1.6574.5.1.1.3: # SMART Attribute Name
type: DisplayString
1.3.6.1.4.1.6574.5.1.1.9: # SMART Status
type: DisplayString
1.3.6.1.4.1.6574.5.1.1.2: # Smart Device Name
type: DisplayString
1.3.6.1.4.1.6574.3.1.1.2: # RAID Name
type: DisplayString
1.3.6.1.4.1.6574.6.1.1.2: # Service Name
type: DisplayString
Avmavis
Check /usr/share/doc/amavisd-new for the AMAVIS-MIB.txt.gz MIB file. Copy this file to your prometheus exporter server and place the file in /usr/share/snmp/mibs.
Step 3: Generate the snmp.yml
Make sure that /etc/prometheus/generator.yml is properly filled in with the SNMP OID data you want to scrape from devices. Using the following command you can generate a new snmp.yml
# prometheus-snmp-generator generate level=info ts=2021-12-31T18:13:49.367Z caller=net_snmp.go:142 msg="Loading MIBs" from=$HOME/.snmp/mibs:/usr/share/snmp/mibs:/usr/share/snmp/mibs/iana:/usr/share/snmp/mibs/ietf level=info ts=2021-12-31T18:13:50.563Z caller=main.go:52 msg="Generating config for module" module=edge level=info ts=2021-12-31T18:13:50.618Z caller=main.go:67 msg="Generated metrics" module=edge metrics=40 level=info ts=2021-12-31T18:13:50.619Z caller=main.go:52 msg="Generating config for module" module=synology level=info ts=2021-12-31T18:13:50.706Z caller=main.go:67 msg="Generated metrics" module=synology metrics=292 level=info ts=2021-12-31T18:13:50.706Z caller=main.go:52 msg="Generating config for module" module=ubiquiti_unifi level=info ts=2021-12-31T18:13:50.780Z caller=main.go:67 msg="Generated metrics" module=ubiquiti_unifi metrics=43 level=info ts=2021-12-31T18:13:50.866Z caller=main.go:92 msg="Config written" file=/etc/prometheus/snmp.yml
Now you can enable and start the prometheus-snmp-exporter service
# systemctl enable prometheus-snmp-exporter # systemctl restart prometheus-snmp-exporter
Step 4: Prometheus Discovery
Each of the devices to be discovered are defined in the regulary prometheus configuration file /etc/prometheus/prometheus.yml Define each device as follows, following example for a synology device
- job_name: 'synology'
metrics_path: /snmp
params:
module: [synology]
static_configs:
- targets: ['nas']
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 127.0.0.1:9116 # the Prometheus SNMP exporter
Check the configuration and if correct restart prometheus
# promtool check config /etc/prometheus/prometheus.yml Checking /etc/prometheus/prometheus.yml SUCCESS: 0 rule files found # systemctl restart prometheus