Este exportador es la forma recomendada de exponer datos SNMP en un formato que Prometheus pueda ingerir.
Para comenzar simplemente, se recomienda usar el módulo if_mib
con conmutadores, puntos de acceso o enrutadores usando el módulo de autenticación public_v2
, que debe ser una comunidad de acceso de solo lectura en el dispositivo de destino.
Tenga en cuenta que las cadenas de comunidad en SNMP no se consideran secretas, ya que se envían sin cifrar en SNMP v1 y v2c. Para un acceso seguro, se requiere SNMP v3.
Si bien SNMP utiliza una estructura de datos jerárquica y Prometheus utiliza una matriz n-dimensional, los dos sistemas se mapean perfectamente y sin la necesidad de revisar los datos manualmente. snmp_exporter
asigna los datos por usted.
Prometheus puede asignar instancias de índice SNMP a etiquetas. Por ejemplo, ifEntry
especifica un ÍNDICE de ifIndex
. Esta se convierte en la etiqueta ifIndex
en Prometheus.
Si una entrada SNMP tiene varios valores de índice, cada valor se asigna a una etiqueta de Prometheus separada.
SNMP está estructurado en árboles OID, descritos por MIB. Los subárboles OID tienen el mismo orden en diferentes ubicaciones del árbol. El orden en 1.3.6.1.2.1.2.2.1.1
( ifIndex
) es el mismo que en 1.3.6.1.2.1.2.2.1.2
( ifDescr
), 1.3.6.1.2.1.31.1.1.1.10
( ifHCOutOctets
), etc. Los números son OID, los nombres entre paréntesis son los nombres de una MIB, en este caso IF-MIB.
Dado un dispositivo con una interfaz en el número 2, un retorno parcial snmpwalk
se ve así:
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
combina todos estos datos en:
ifHCOutOctets{ifAlias="",ifDescr="eth0",ifIndex="2",ifName="eth0"} 1000
Se puede ejecutar una única instancia de snmp_exporter
para miles de dispositivos.
Los binarios se pueden descargar desde la página de versiones de Github y no necesitan instalación especial.
También proporcionamos un archivo de unidad systemd de muestra.
Inicie snmp_exporter
como demonio o desde CLI:
./snmp_exporter
Visite http://localhost:9116/snmp?target=192.0.0.8 donde 192.0.0.8
es la IP o FQDN del dispositivo SNMP del que obtener métricas. Tenga en cuenta que esto utilizará el transporte predeterminado ( udp
), el puerto predeterminado ( 161
), la autenticación predeterminada ( public_v2
) y el módulo predeterminado ( if_mib
). La autenticación y el módulo deben definirse en el archivo snmp.yml
.
Por ejemplo, si tiene una autenticación llamada my_secure_v3
para caminar ddwrt
, la URL se vería así http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=192.0.0.8.
Para configurar un transporte y/o puerto diferente, use la sintaxis [transport://]host[:port]
.
Por ejemplo, para raspar un dispositivo usando tcp
en el puerto 1161
, la URL se vería así http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=tcp%3A%2F%2F192.0.0.8%3A1161.
Tenga en cuenta que se debe utilizar la codificación de URL para target
debido a los caracteres :
y /
. Prometheus codifica los parámetros de consulta automáticamente y no es necesaria la codificación manual dentro del archivo de configuración de Prometheus.
Las métricas relativas al funcionamiento del propio exportador están disponibles en el punto final http://localhost:9116/metrics.
Es posible proporcionar un parámetro snmp_context
opcional en la URL, como este: http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=192.0.0.8&snmp_context=vrf-mgmt El parámetro snmp_context
en la URL anularía el context_name
parámetro en el archivo snmp.yml
.
La funcionalidad de múltiples módulos le permite especificar múltiples módulos, lo que permite la recuperación de información de varios módulos en un solo raspado. La simultaneidad se puede especificar utilizando la opción snmp-exporter --snmp.module-concurrency
(el valor predeterminado es 1).
Nota: Esta implementación no realiza ninguna deduplicación de recorridos entre diferentes módulos.
Hay dos formas de especificar varios módulos. Puede separarlos con una coma o definir varios params_module. Las URL se verían así:
Para separación por coma:
http://localhost:9116/snmp?module=if_mib,arista_sw&target=192.0.0.8
Para múltiples params_module:
http://localhost:9116/snmp?module=if_mib&module=arista_sw&target=192.0.0.8
El nombre del archivo de configuración predeterminado es snmp.yml
y no debe editarse manualmente. Si necesita cambiarlo, consulte Generando configuración.
El archivo snmp.yml
predeterminado cubre una variedad de hardware común que los ejecuta utilizando SNMP v2 GETBULK.
El parámetro --config.file
se puede utilizar varias veces para cargar más de un archivo. También admite la coincidencia global de nombres de archivos, por ejemplo, snmp*.yml
.
El parámetro --config.expand-environment-variables
permite pasar variables de entorno a algunos campos del archivo de configuración. Se admiten los campos de username
, password
y priv_password
en la sección de autenticación. El valor predeterminado es deshabilitado.
module
duplicados o las entradas auth
se tratan como no válidas y no se pueden cargar.
Los parámetros de URL target
, auth
y module
se pueden controlar mediante el reetiquetado.
Configuración de ejemplo:
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']
Puede pasar username
, password
y priv_password
a través de variables de entorno de su elección en el siguiente formato. Si las variables existen en el entorno, se resuelven sobre la marcha; de lo contrario, la cadena en el archivo de configuración se pasa tal cual.
Esto requiere que se establezca el indicador --config.expand-environment-variables
.
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}
De manera similar a blackbox_exporter, snmp_exporter
está diseñado para ejecutarse en algunas máquinas centrales y puede considerarse como un "prometheus proxy".
El exportador SNMP admite TLS y autenticación básica. Esto permite un mejor control de los distintos puntos finales HTTP.
Para usar TLS y/o autenticación básica, debe pasar un archivo de configuración usando el parámetro --web.config.file
. El formato del archivo se describe en el repositorio del kit de herramientas del exportador.
Tenga en cuenta que TLS y la configuración de autenticación básica afectan a todos los puntos finales HTTP: /metrics para scraping, /snmp para scraping de dispositivos SNMP y la interfaz de usuario web.
La mayoría de los casos de uso deberían estar cubiertos por nuestra configuración predeterminada. Si necesita generar su propia configuración a partir de MIB, puede utilizar el generador.
Utilice el generador si necesita personalizar qué objetos se caminan o utilizar MIB no públicos.
Para proporcionar contadores precisos para valores grandes de Counter64, el exportador ajustará automáticamente el valor cada 2^53 para evitar el redondeo flotante de 64 bits. Prometheus maneja esto con gracia y no notará ningún efecto negativo.
Si necesita deshabilitar esta función para sistemas que no son Prometheus, use la marca de línea de comando --no-snmp.wrap-large-counters
.
Puede resultar opaco comenzar con todo esto, pero según nuestra propia experiencia, snmp_exporter es honestamente la mejor manera de interactuar con SNMP. Para hacerlo más fácil para otros, considere contribuir con sus configuraciones. La configuración snmp.yml
debe ir acompañada de la configuración del generador. Para su panel, alertas y reglas de grabación, considere contribuir con ellas a https://github.com/prometheus/snmp_exporter/tree/main/snmp-mixin.