Cet exportateur est le moyen recommandé pour exposer les données SNMP dans un format que Prometheus peut ingérer.
Pour commencer simplement, il est recommandé d'utiliser le module if_mib
avec des commutateurs, des points d'accès ou des routeurs utilisant le module d'authentification public_v2
, qui doit être une communauté d'accès en lecture seule sur le périphérique cible.
Notez que les chaînes de communauté dans SNMP ne sont pas considérées comme secrètes, car elles sont envoyées non chiffrées dans SNMP v1 et v2c. Pour un accès sécurisé, SNMP v3 est requis.
Alors que SNMP utilise une structure de données hiérarchique et que Prometheus utilise une matrice à n dimensions, les deux systèmes correspondent parfaitement et sans qu'il soit nécessaire de parcourir les données manuellement. snmp_exporter
mappe les données pour vous.
Prometheus est capable de mapper les instances d'index SNMP aux étiquettes. Par exemple, ifEntry
spécifie un INDEX de ifIndex
. Cela devient l'étiquette ifIndex
dans Prometheus.
Si une entrée SNMP possède plusieurs valeurs d'index, chaque valeur est mappée à une étiquette Prometheus distincte.
SNMP est structuré en arborescences OID, décrites par des MIB. Les sous-arbres OID ont le même ordre à différents emplacements de l'arborescence. L'ordre sous 1.3.6.1.2.1.2.2.1.1
( ifIndex
) est le même que dans 1.3.6.1.2.1.2.2.1.2
( ifDescr
), 1.3.6.1.2.1.31.1.1.1.10
( ifHCOutOctets
), etc. Les numéros sont des OID, les noms entre parenthèses sont les noms d'une MIB, dans ce cas IF-MIB.
Étant donné un périphérique avec une interface au numéro 2, un retour snmpwalk
partiel ressemble à :
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
combine toutes ces données dans :
ifHCOutOctets{ifAlias="",ifDescr="eth0",ifIndex="2",ifName="eth0"} 1000
Une seule instance de snmp_exporter
peut être exécutée pour des milliers d'appareils.
Les binaires peuvent être téléchargés à partir de la page des versions de Github et ne nécessitent aucune installation spéciale.
Nous fournissons également un exemple de fichier d’unité systemd.
Démarrez snmp_exporter
en tant que démon ou depuis la CLI :
./snmp_exporter
Visitez http://localhost:9116/snmp?target=192.0.0.8 où 192.0.0.8
est l'adresse IP ou le nom de domaine complet du périphérique SNMP pour obtenir des métriques. Notez que cela utilisera le transport par défaut ( udp
), le port par défaut ( 161
), l'authentification par défaut ( public_v2
) et le module par défaut ( if_mib
). L'authentification et le module doivent être définis dans le fichier snmp.yml
.
Par exemple, si vous disposez d'une authentification nommée my_secure_v3
pour parcourir ddwrt
, l'URL ressemblerait à http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=192.0.0.8.
Pour configurer un autre transport et/ou port, utilisez la syntaxe [transport://]host[:port]
.
Par exemple, pour supprimer un périphérique utilisant tcp
sur le port 1161
, l'URL ressemblerait à http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=tcp%3A%2F%2F192.0.0.8%3A1161.
Notez que le codage URL doit être utilisé pour target
en raison des caractères :
et /
. Prometheus encode automatiquement les paramètres de requête et le codage manuel n'est pas nécessaire dans le fichier de configuration Prometheus.
Les métriques concernant le fonctionnement de l'exportateur lui-même sont disponibles sur le point final http://localhost:9116/metrics.
Il est possible de fournir un paramètre snmp_context
facultatif dans l'URL, comme ceci : http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=192.0.0.8&snmp_context=vrf-mgmt Le paramètre snmp_context
dans l'URL remplacerait le context_name
paramètre dans le fichier snmp.yml
.
La fonctionnalité multi-module vous permet de spécifier plusieurs modules, permettant la récupération d'informations de plusieurs modules en un seul grattage. La concurrence peut être spécifiée à l'aide de l'option snmp-exporter --snmp.module-concurrency
(la valeur par défaut est 1).
Remarque : Cette implémentation n'effectue aucune déduplication des parcours entre différents modules.
Il existe deux manières de spécifier plusieurs modules. Vous pouvez soit les séparer par une virgule, soit définir plusieurs params_module. Les URL ressembleraient à ceci :
Pour la séparation par des virgules :
http://localhost:9116/snmp?module=if_mib,arista_sw&target=192.0.0.8
Pour plusieurs params_module :
http://localhost:9116/snmp?module=if_mib&module=arista_sw&target=192.0.0.8
Le nom du fichier de configuration par défaut est snmp.yml
et ne doit pas être modifié manuellement. Si vous devez le modifier, voir Génération de la configuration.
Le fichier snmp.yml
par défaut couvre une variété de matériels courants qui les exécutent à l'aide de SNMP v2 GETBULK.
Le paramètre --config.file
peut être utilisé plusieurs fois pour charger plusieurs fichiers. Il prend également en charge la correspondance de noms de fichiers globaux, par exemple snmp*.yml
.
Le paramètre --config.expand-environment-variables
permet de transmettre des variables d'environnement dans certains champs du fichier de configuration. Les champs username
, password
et priv_password
dans la section auths sont pris en charge. La valeur par défaut est désactivée.
Les entrées module
ou auth
en double sont traitées comme non valides et ne peuvent pas être chargées.
Les paramètres d'URL target
, auth
et module
peuvent être contrôlés via un réétiquetage.
Exemple de configuration :
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']
Vous pouvez transmettre username
, password
et priv_password
via les variables d'environnement de votre choix au format ci-dessous. Si les variables existent dans l'environnement, elles sont résolues à la volée sinon la chaîne du fichier de configuration est passée telle quelle.
Cela nécessite que l'indicateur --config.expand-environment-variables
soit défini.
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}
À l'instar de blackbox_exporter, snmp_exporter
est destiné à fonctionner sur quelques machines centrales et peut être considéré comme un « proxy Prometheus ».
L'exportateur SNMP prend en charge TLS et l'authentification de base. Cela permet un meilleur contrôle des différents points de terminaison HTTP.
Pour utiliser TLS et/ou l'authentification de base, vous devez transmettre un fichier de configuration à l'aide du paramètre --web.config.file
. Le format du fichier est décrit dans le référentiel exportateur-toolkit.
Notez que les paramètres TLS et d'authentification de base affectent tous les points de terminaison HTTP : /metrics pour le scraping, /snmp pour le scraping des appareils SNMP et l'interface utilisateur Web.
La plupart des cas d'utilisation devraient être couverts par notre configuration par défaut. Si vous devez générer votre propre configuration à partir de MIB, vous pouvez utiliser le générateur.
Utilisez le générateur si vous devez personnaliser les objets parcourus ou utiliser des MIB non publiques.
Afin de fournir des compteurs précis pour les valeurs Counter64 élevées, l'exportateur encapsulera automatiquement la valeur tous les 2 ^ 53 pour éviter l'arrondi flottant de 64 bits. Prometheus gère cela avec grâce pour vous et vous ne remarquerez aucun effet négatif.
Si vous devez désactiver cette fonctionnalité pour les systèmes non Prometheus, utilisez l'indicateur de ligne de commande --no-snmp.wrap-large-counters
.
Il peut être opaque de commencer avec tout cela, mais d'après notre propre expérience, snmp_exporter est honnêtement le meilleur moyen d'interagir avec SNMP. Pour faciliter la tâche des autres, pensez à nous faire part de vos configurations. La configuration snmp.yml
doit être accompagnée de la configuration du générateur. Pour votre tableau de bord, vos alertes et vos règles d'enregistrement, pensez à les contribuer à https://github.com/prometheus/snmp_exporter/tree/main/snmp-mixin.