snmp_exporter
Репозиторий: snmp_exporter
Документация: Доступна в репозитории (примеры конфигурационных файлов и руководство по использованию)
Экспортер представляет собой бинарный файл, который может быть запущен как процесс или как сервис.
Запуск через агент мониторинга
Скопируйте бинарник экспортера в папку
exporters
(указывается в конфигурации агента полемexporters.directory
)Сгенерируйте конфигурационный файл с помощью generator
Скопируйте конфигурационный файл в папку, указанную в аргументах запуска экспортера
Описание работы
SNMP exporter — это стандартный Prometheus-экспортер с HTTP-сервером для отображения метрик. Он содержит отдельный эндпоинт для каждого таргета, который опрашивается с помощью определенных OIDs из конфигурационного файла экспортера.
Основные эндпойнты:
/metrics
— стандартные метрики (go, proc, promhttp) и метрики работы SNMP/snmp?module=<module>&target=<адрес>
— опрос конкретного устройства с использованием указанных OIDs
Метрики эндпойнта /metrics
Название метрики (пример метрики) |
Описание |
---|---|
|
Длительности выполнения SNMP-запросов для построения гистограммы |
|
Задержки SNMP-пакетов для построения гистограммы |
|
Количество повторов пакетов |
|
Количество отправленных пакетов |
|
Количество ошибок |
Эндпойнты опроса удаленных хостов выглядят примерно так (в зависимости от типа устройства): /snmp?module=apcups&target=10.177.248.228
. При обращении к ним, непосредственно происходит опрос удаленного устройства с помощью заранее выбранных OIDs.
Метрики эндпойнта /snmp?module=<module>&target=<адрес>
Название метрики (пример метрики) |
Описание |
---|---|
|
Административный статус интерфейса 2 уровня |
|
Размер MTU интерфейса |
|
Статус IPv4 интерфейса (3 уровня) |
Подготовка работы экспортера
Генерация конфигурационного файла
Для запуска экспортера необходим конфигурационный файл, в котором будут прописаны конкретные OIDы и соответствующие им метрики.
Для генерации конфигурационного файла используется утилита generator.
Данная утилита на основе своего конфигурационного файла позволяет распарсить подготовленные mib файлы, выделить необходимые ветки OIDs и сформировать метрики в конфигурационный файл snmp-exporter.
Пример конфигурационного файла для generator
:
auths:
public_v1:
community: public
security_level: noAuthNoPriv
version: 1
public_v2:
community: public
security_level: noAuthNoPriv
version: 2
modules:
apcups:
walk:
- 1.3.6.1.4.1
linux:
walk:
- 1.3.6.1.4.1.2021
if_mib:
walk: [sysUpTime, interfaces, ifXTable]
lookups:
- source_indexes: [ifIndex]
lookup: ifAlias
- source_indexes: [ifIndex]
# Uis OID to avoid conflict with PaloAlto PAN-COMMON-MIB.
lookup: 1.3.6.1.2.1.2.2.1.2 # ifDescr
- 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
overrides:
ifAlias:
ignore: true # Lookup metric
ifDescr:
ignore: true # Lookup metric
ifName:
ignore: true # Lookup metric
ifType:
type: EnumAsInfo
# Default IP-MIB with ipv4InterfaceTable for example.
ip_mib:
walk: [ipv4InterfaceTable]
Команда генерации:
./generator --fail-on-parse-errors generate -m mibs/ -g generator.yml
Вывод успешной генерации:
ts=2024-05-07T12:03:24.674Z caller=net_snmp.go:175 level=info msg="Loading MIBs" from=mibs/
ts=2024-05-07T12:03:25.303Z caller=main.go:53 level=info msg="Generating config for module" module=apcups
ts=2024-05-07T12:03:25.324Z caller=main.go:68 level=info msg="Generated metrics" module=apcups metrics=5624
ts=2024-05-07T12:03:25.324Z caller=main.go:53 level=info msg="Generating config for module" module=linux
ts=2024-05-07T12:03:25.334Z caller=main.go:68 level=info msg="Generated metrics" module=linux metrics=123
ts=2024-05-07T12:03:25.334Z caller=main.go:53 level=info msg="Generating config for module" module=if_mib
ts=2024-05-07T12:03:25.370Z caller=main.go:68 level=info msg="Generated metrics" module=if_mib metrics=40
ts=2024-05-07T12:03:25.370Z caller=main.go:53 level=info msg="Generating config for module" module=ip_mib
ts=2024-05-07T12:03:25.376Z caller=main.go:68 level=info msg="Generated metrics" module=ip_mib metrics=4
ts=2024-05-07T12:03:25.670Z caller=main.go:93 level=info msg="Config written" file=snmp.yml
Настройка запуска через агент
Раздел exporters
exporters:
- name: snmp_exporter
is_custom: true
args: "--config.file=exporters/snmp.yml"
health_address: 127.0.0.1:9116/metrics
name
- должно совпадать с именем бинарного файла (например,astramon-snmp_exporter-custom
)is_custom
- указывает, что это сторонний экспортер, но агент может управлять имargs
- путь к конфигурационному файлу
Раздел metrics
custom_targets:
- name: snmp_exporter1
component: 10.177.248.228
target: 127.0.0.1:9116
metrics_path: /snmp?module=apcups&target=10.177.248.228
- name: snmp_exporter2
component: 10.177.248.234
target: 127.0.0.1:9116
metrics_path: /snmp?module=linux&target=10.177.248.234
name
- уникальное имя (требованиеvmagent
)component
- лейбл для различения устройствtarget
- адрес и порт экспортераmetrics_path
- эндпойнт для сбора метрик
Возможные ошибки
Ошибки генерации конфигурации
Пример ошибки:
level=error msg="Error generating config netsnmp" err="cannot find oid 'ifXTable' to walk"
Решение:
Убедитесь, что все необходимые MIB-файлы находятся в директории mibs/
.
Можно добавить стандартные MIB-файлы:
./generator --fail-on-parse-errors generate -m mibs/ -m /usr/share/snmp/mibs -g generator.yml
Ошибки при запуске snmp-exporter
При запуске экспортера и обращении по нужному URL для получения данных можно встретить следующую ошибку:
* collected metric "upsPhaseOutputPhaseIndex" { label:<name:"upsPhaseOutputPhaseIndex" value:"1" > label:<name:"upsPhaseOutputPhaseTableIndex" value:"1" > gauge:<value:2 > } was collected before with the same name and label values
* collected metric "upsPhaseOutputPhaseIndex" { label:<name:"upsPhaseOutputPhaseIndex" value:"1" > label:<name:"upsPhaseOutputPhaseTableIndex" value:"1" > gauge:<value:3 > } was collected before with the same name and label values
Это означает, что действительный OID отличается от существующего в данном mib файле:
# OID в mib файле:
1.3.6.1.4.1.318.1.1.1.9.3.3.1.2.1
# OID в действительности:
snmpwalk -v2c -c public ups-01.domain.local 1.3.6.1.4.1.318.1.1.1.9.3.3.1.2.1.1.1
SNMPv2-SMI::enterprises.318.1.1.1.9.3.3.1.2.1.1.1 = INTEGER: 1
Решение:
Исправить OID в готовом snmp.yml файле
Исправить OID в самом mib, на основе которого
generator
соберет уже правильный конфиг