Dieser Exporter ist die empfohlene Methode, SNMP-Daten in einem Format bereitzustellen, das Prometheus aufnehmen kann.
Um einfach loszulegen, wird empfohlen, das if_mib
-Modul mit Switches, Access Points oder Routern zu verwenden und das public_v2
Authentifizierungsmodul zu verwenden, das eine Community mit schreibgeschütztem Zugriff auf dem Zielgerät sein sollte.
Beachten Sie, dass Community-Strings in SNMP nicht als Geheimnisse gelten, da sie in SNMP v1 und v2c unverschlüsselt gesendet werden. Für den sicheren Zugriff ist SNMP v3 erforderlich.
Während SNMP eine hierarchische Datenstruktur und Prometheus eine n-dimensionale Matrix verwendet, sind die beiden Systeme perfekt aufeinander abgestimmt, ohne dass die Daten manuell durchgegangen werden müssen. snmp_exporter
ordnet die Daten für Sie zu.
Prometheus ist in der Lage, SNMP-Indexinstanzen Labels zuzuordnen. Beispielsweise gibt ifEntry
einen INDEX von ifIndex
an. Dies wird in Prometheus zum ifIndex
-Label.
Wenn ein SNMP-Eintrag mehrere Indexwerte hat, wird jeder Wert einem separaten Prometheus-Label zugeordnet.
SNMP ist in OID-Bäumen strukturiert, die durch MIBs beschrieben werden. OID-Teilbäume haben an verschiedenen Stellen im Baum die gleiche Reihenfolge. Die Reihenfolge unter 1.3.6.1.2.1.2.2.1.1
( ifIndex
) ist dieselbe wie in 1.3.6.1.2.1.2.2.1.2
( ifDescr
), 1.3.6.1.2.1.31.1.1.1.10
( ifHCOutOctets
) usw. Die Zahlen sind OIDs, die Namen in Klammern sind die Namen aus einer MIB, in in diesem Fall IF-MIB.
Bei einem Gerät mit einer Schnittstelle auf Nummer 2 sieht eine teilweise snmpwalk
Rückgabe wie folgt aus:
1.3.6.1.2.1.2.2.1.1.2 = INTEGER: 2 # ifIndex for '2' is literally just '2'
1.3.6.1.2.1.2.2.1.2.2 = STRING: "eth0" # ifDescr
1.3.6.1.2.1.31.1.1.1.1.2 = STRING: "eth0" # IfName
1.3.6.1.2.1.31.1.1.1.10.2 = INTEGER: 1000 # ifHCOutOctets, 1000 bytes
1.3.6.1.2.1.31.1.1.1.18.2 = STRING: "" # ifAlias
snmp_exporter
kombiniert alle diese Daten zu:
ifHCOutOctets{ifAlias="",ifDescr="eth0",ifIndex="2",ifName="eth0"} 1000
Eine einzelne Instanz von snmp_exporter
kann für Tausende von Geräten ausgeführt werden.
Binärdateien können von der Github-Release-Seite heruntergeladen werden und erfordern keine spezielle Installation.
Wir stellen auch eine Beispiel-Systemd-Unit-Datei zur Verfügung.
Starten Sie snmp_exporter
als Daemon oder über die CLI:
./snmp_exporter
Besuchen Sie http://localhost:9116/snmp?target=192.0.0.8, wobei 192.0.0.8
die IP oder der FQDN des SNMP-Geräts ist, von dem Sie Metriken erhalten möchten. Beachten Sie, dass hierbei der Standardtransport ( udp
), der Standardport ( 161
), die Standardauthentifizierung ( public_v2
) und das Standardmodul ( if_mib
) verwendet werden. Die Authentifizierung und das Modul müssen in der Datei snmp.yml
definiert werden.
Wenn Sie beispielsweise über eine Authentifizierung mit dem Namen my_secure_v3
zum Durchlaufen ddwrt
verfügen, würde die URL wie folgt aussehen: http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=192.0.0.8.
Um einen anderen Transport und/oder Port zu konfigurieren, verwenden Sie die Syntax [transport://]host[:port]
.
Um beispielsweise ein Gerät mithilfe von tcp
an Port 1161
zu scannen, würde die URL wie folgt aussehen: http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=tcp%3A%2F%2F192.0.0.8%3A1161.
Beachten Sie, dass aufgrund der Zeichen :
und /
die URL-Kodierung für target
verwendet werden sollte. Prometheus kodiert Abfrageparameter automatisch und eine manuelle Kodierung ist in der Prometheus-Konfigurationsdatei nicht erforderlich.
Metriken zum Betrieb des Exporters selbst sind am Endpunkt http://localhost:9116/metrics verfügbar.
Es ist möglich, einen optionalen snmp_context
Parameter in der URL anzugeben, etwa so: http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=192.0.0.8&snmp_context=vrf-mgmt Der snmp_context
Parameter in der URL würde den context_name
überschreiben Parameter in der Datei snmp.yml
.
Mit der Multimodulfunktion können Sie mehrere Module angeben und so Informationen aus mehreren Modulen auf einmal abrufen. Die Parallelität kann mit der SNMP-Exporter-Option --snmp.module-concurrency
angegeben werden (der Standardwert ist 1).
Hinweis: Diese Implementierung führt keine Deduplizierung von Spaziergängen zwischen verschiedenen Modulen durch.
Es gibt zwei Möglichkeiten, mehrere Module anzugeben. Sie können sie entweder durch ein Komma trennen oder mehrere params_module definieren. Die URLs würden so aussehen:
Zur Kommatrennung:
http://localhost:9116/snmp?module=if_mib,arista_sw&target=192.0.0.8
Für mehrere params_module:
http://localhost:9116/snmp?module=if_mib&module=arista_sw&target=192.0.0.8
Der Standardname der Konfigurationsdatei lautet snmp.yml
und sollte nicht manuell bearbeitet werden. Wenn Sie es ändern müssen, lesen Sie Konfiguration generieren.
Die Standarddatei snmp.yml
deckt eine Vielzahl gängiger Hardware ab und führt sie mithilfe von SNMP v2 GETBULK aus.
Der Parameter --config.file
kann mehrmals verwendet werden, um mehr als eine Datei zu laden. Es unterstützt auch den Abgleich globaler Dateinamen, z. B. snmp*.yml
.
Der Parameter --config.expand-environment-variables
ermöglicht die Übergabe von Umgebungsvariablen in einige Felder der Konfigurationsdatei. Die Felder username
, password
und priv_password
im Abschnitt „Auths“ werden unterstützt. Standardmäßig ist deaktiviert.
Doppelte module
oder auth
werden als ungültig behandelt und können nicht geladen werden.
Die URL-Parameter target
, auth
und module
können durch Umbenennen gesteuert werden.
Beispielkonfiguration:
scrape_configs :
- job_name : ' snmp '
static_configs :
- targets :
- 192.168.1.2 # SNMP device.
- switch.local # SNMP device.
- tcp://192.168.1.3:1161 # SNMP device using TCP transport and custom port.
metrics_path : /snmp
params :
auth : [public_v2]
module : [if_mib]
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 SNMP exporter's real hostname:port.
# Global exporter-level metrics
- job_name : ' snmp_exporter '
static_configs :
- targets : ['localhost:9116']
Sie können username
, password
und priv_password
über Umgebungsvariablen Ihrer Wahl im folgenden Format übergeben. Wenn die Variablen in der Umgebung vorhanden sind, werden sie im laufenden Betrieb aufgelöst, andernfalls wird die Zeichenfolge in der Konfigurationsdatei unverändert übergeben.
Dazu muss das Flag --config.expand-environment-variables
gesetzt sein.
auths :
example_with_envs :
community : mysecret
security_level : SomethingReadOnly
username : ${ARISTA_USERNAME}
password : ${ARISTA_PASSWORD}
auth_protocol : SHA256
priv_protocol : AES
priv_password : ${ARISTA_PRIV_PASSWORD}
Ähnlich wie blackbox_exporter soll snmp_exporter
auf einigen zentralen Maschinen laufen und kann als „Prometheus-Proxy“ betrachtet werden.
Der SNMP-Exporter unterstützt TLS und Basisauthentifizierung. Dies ermöglicht eine bessere Kontrolle der verschiedenen HTTP-Endpunkte.
Um TLS und/oder Basisauthentifizierung zu verwenden, müssen Sie eine Konfigurationsdatei mit dem Parameter --web.config.file
übergeben. Das Format der Datei ist im Exporter-Toolkit-Repository beschrieben.
Beachten Sie, dass sich die TLS- und Basisauthentifizierungseinstellungen auf alle HTTP-Endpunkte auswirken: /metrics für Scraping, /snmp für Scraping von SNMP-Geräten und die Web-Benutzeroberfläche.
Die meisten Anwendungsfälle sollten durch unsere Standardkonfiguration abgedeckt werden. Wenn Sie Ihre eigene Konfiguration aus MIBs generieren müssen, können Sie den Generator verwenden.
Verwenden Sie den Generator, wenn Sie anpassen müssen, welche Objekte durchlaufen werden, oder nicht öffentliche MIBs verwenden müssen.
Um genaue Zähler für große Counter64-Werte bereitzustellen, umbricht der Exporter den Wert automatisch alle 2^53, um eine 64-Bit-Float-Rundung zu vermeiden. Prometheus erledigt dies für Sie elegant und Sie werden keine negativen Auswirkungen bemerken.
Wenn Sie diese Funktion für Nicht-Prometheus-Systeme deaktivieren müssen, verwenden Sie das Befehlszeilen-Flag --no-snmp.wrap-large-counters
.
Der Einstieg in all das kann undurchsichtig sein, aber unserer eigenen Erfahrung nach ist snmp_exporter ehrlich gesagt die beste Möglichkeit, mit SNMP zu interagieren. Um es anderen einfacher zu machen, denken Sie bitte darüber nach, Ihre Konfigurationen an uns zurückzugeben. snmp.yml
Konfiguration sollte von der Generatorkonfiguration begleitet sein. Für Ihr Dashboard, Ihre Warnungen und Aufzeichnungsregeln denken Sie bitte darüber nach, diese auf https://github.com/prometheus/snmp_exporter/tree/main/snmp-mixin beizusteuern.