Este exportador é a maneira recomendada de expor dados SNMP em um formato que o Prometheus possa ingerir.
Para começar, é recomendado usar o módulo if_mib
com switches, pontos de acesso ou roteadores usando o módulo de autenticação public_v2
, que deve ser uma comunidade de acesso somente leitura no dispositivo de destino.
Observe que as strings de comunidade no SNMP não são consideradas segredos, pois são enviadas sem criptografia no SNMP v1 e v2c. Para acesso seguro, é necessário SNMP v3.
Enquanto o SNMP usa uma estrutura de dados hierárquica e o Prometheus usa uma matriz n-dimensional, os dois sistemas são mapeados perfeitamente e sem a necessidade de percorrer os dados manualmente. snmp_exporter
mapeia os dados para você.
O Prometheus é capaz de mapear instâncias de índice SNMP para rótulos. Por exemplo, ifEntry
especifica um INDEX de ifIndex
. Este se torna o rótulo ifIndex
no Prometheus.
Se uma entrada SNMP tiver vários valores de índice, cada valor será mapeado para um rótulo Prometheus separado.
O SNMP é estruturado em árvores OID, descritas por MIBs. As subárvores OID têm a mesma ordem em diferentes locais da árvore. A ordem em 1.3.6.1.2.1.2.2.1.1
( ifIndex
) é a mesma que em 1.3.6.1.2.1.2.2.1.2
( ifDescr
), 1.3.6.1.2.1.31.1.1.1.10
( ifHCOutOctets
), etc. Os números são OIDs, os nomes entre parênteses são os nomes de um MIB, neste caso IF-MIB.
Dado um dispositivo com uma interface no número 2, um retorno snmpwalk
parcial se parece com:
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 esses dados em:
ifHCOutOctets{ifAlias="",ifDescr="eth0",ifIndex="2",ifName="eth0"} 1000
Uma única instância do snmp_exporter
pode ser executada em milhares de dispositivos.
Os binários podem ser baixados da página de lançamentos do Github e não precisam de instalação especial.
Também fornecemos um arquivo de unidade systemd de amostra.
Inicie snmp_exporter
como um daemon ou pela CLI:
./snmp_exporter
Visite http://localhost:9116/snmp?target=192.0.0.8 onde 192.0.0.8
é o IP ou FQDN do dispositivo SNMP do qual obter métricas. Observe que isso usará o transporte padrão ( udp
), a porta padrão ( 161
), a autenticação padrão ( public_v2
) e o módulo padrão ( if_mib
). A autenticação e o módulo devem ser definidos no arquivo snmp.yml
.
Por exemplo, se você tiver uma autenticação chamada my_secure_v3
para caminhar ddwrt
, o URL seria semelhante a http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=192.0.0.8.
Para configurar um transporte e/ou porta diferente, use a sintaxe [transport://]host[:port]
.
Por exemplo, para raspar um dispositivo usando tcp
na porta 1161
, o URL seria semelhante a http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=tcp%3A%2F%2F192.0.0.8%3A1161.
Observe que a codificação de URL deve ser usada para target
devido aos caracteres :
e /
. O Prometheus codifica os parâmetros de consulta automaticamente e a codificação manual não é necessária no arquivo de configuração do Prometheus.
As métricas relativas ao funcionamento do próprio exportador estão disponíveis no endpoint http://localhost:9116/metrics.
É possível fornecer um parâmetro snmp_context
opcional na URL, como este: http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=192.0.0.8&snmp_context=vrf-mgmt O parâmetro snmp_context
na URL substituiria o context_name
parâmetro no arquivo snmp.yml
.
A funcionalidade multimódulo permite especificar vários módulos, possibilitando a recuperação de informações de vários módulos em um único scrape. A simultaneidade pode ser especificada usando a opção snmp-exporter --snmp.module-concurrency
(o padrão é 1).
Nota: Esta implementação não realiza nenhuma desduplicação de passeios entre diferentes módulos.
Existem duas maneiras de especificar vários módulos. Você pode separá-los com uma vírgula ou definir vários params_module. Os URLs ficariam assim:
Para separação por vírgula:
http://localhost:9116/snmp?module=if_mib,arista_sw&target=192.0.0.8
Para vários params_module:
http://localhost:9116/snmp?module=if_mib&module=arista_sw&target=192.0.0.8
O nome do arquivo de configuração padrão é snmp.yml
e não deve ser editado manualmente. Se precisar alterá-lo, consulte Gerando configuração.
O arquivo snmp.yml
padrão cobre uma variedade de hardwares comuns que os utilizam usando SNMP v2 GETBULK.
O parâmetro --config.file
pode ser usado várias vezes para carregar mais de um arquivo. Ele também suporta correspondência de nome de arquivo glob, por exemplo, snmp*.yml
.
O parâmetro --config.expand-environment-variables
permite passar variáveis de ambiente para alguns campos do arquivo de configuração. Os campos username
, password
e priv_password
na seção de autenticação são suportados. O padrão é desabilitado.
module
duplicados ou entradas auth
são tratados como inválidos e não podem ser carregados.
Os parâmetros de URL target
, auth
e module
podem ser controlados por meio de nova rotulagem.
Configuração de exemplo:
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']
Você pode passar username
, password
& priv_password
por meio de variáveis de ambiente de sua escolha no formato abaixo. Se as variáveis existirem no ambiente, elas serão resolvidas instantaneamente, caso contrário, a string no arquivo de configuração será passada como está.
Isso requer que o sinalizador --config.expand-environment-variables
seja definido.
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}
Da mesma forma que o blackbox_exporter, snmp_exporter
deve ser executado em algumas máquinas centrais e pode ser considerado um "proxy Prometheus".
O exportador SNMP oferece suporte a TLS e autenticação básica. Isto permite um melhor controle dos vários pontos de extremidade HTTP.
Para usar TLS e/ou autenticação básica, você precisa passar um arquivo de configuração usando o parâmetro --web.config.file
. O formato do arquivo está descrito no repositório do exporter-toolkit.
Observe que as configurações de TLS e de autenticação básica afetam todos os endpoints HTTP: /metrics para raspagem, /snmp para raspagem de dispositivos SNMP e a UI da web.
A maioria dos casos de uso deve ser coberta pela nossa configuração padrão. Se precisar gerar sua própria configuração a partir de MIBs, você poderá usar o gerador.
Use o gerador se precisar personalizar quais objetos serão percorridos ou usar MIBs não públicos.
Para fornecer contadores precisos para valores grandes de Counter64, o exportador agrupará automaticamente o valor a cada 2 ^ 53 para evitar arredondamento flutuante de 64 bits. Prometheus lida com isso com elegância para você e você não notará nenhum efeito negativo.
Se você precisar desabilitar esse recurso para sistemas não Prometheus, use o sinalizador de linha de comando --no-snmp.wrap-large-counters
.
Pode ser opaco começar com tudo isso, mas em nossa própria experiência, snmp_exporter é honestamente a melhor maneira de interagir com SNMP. Para tornar mais fácil para outras pessoas, considere contribuir com suas configurações para nós. A configuração snmp.yml
deve ser acompanhada pela configuração do gerador. Para seu painel, alertas e regras de gravação, considere contribuí-los para https://github.com/prometheus/snmp_exporter/tree/main/snmp-mixin.