snmp_exporter


  • Репозиторий: snmp_exporter

  • Документация: Доступна в репозитории (примеры конфигурационных файлов и руководство по использованию)

Экспортер представляет собой бинарный файл, который может быть запущен как процесс или как сервис.

Запуск через агент мониторинга

  1. Скопируйте бинарник экспортера в папку exporters (указывается в конфигурации агента полем exporters.directory)

  2. Сгенерируйте конфигурационный файл с помощью generator

  3. Скопируйте конфигурационный файл в папку, указанную в аргументах запуска экспортера


Описание работы

SNMP exporter — это стандартный Prometheus-экспортер с HTTP-сервером для отображения метрик. Он содержит отдельный эндпоинт для каждого таргета, который опрашивается с помощью определенных OIDs из конфигурационного файла экспортера.
Основные эндпойнты:

  • /metrics — стандартные метрики (go, proc, promhttp) и метрики работы SNMP

  • /snmp?module=<module>&target=<адрес> — опрос конкретного устройства с использованием указанных OIDs

Метрики эндпойнта /metrics

Название метрики (пример метрики)

Описание

snmp_collection_duration_seconds_bucket (snmp_collection_duration_seconds_bucket{module="linux",le="10"} 330
snmp_collection_duration_seconds_bucket{module="linux",le="+Inf"} 330
snmp_collection_duration_seconds_sum{module="linux"} 70.96641790999998)

Длительности выполнения SNMP-запросов для построения гистограммы

snmp_packet_duration_seconds_bucket (snmp_packet_duration_seconds_bucket{le="+Inf"} 25740
snmp_packet_duration_seconds_sum 645.485847669003
snmp_packet_duration_seconds_count 25740)

Задержки SNMP-пакетов для построения гистограммы

snmp_packet_retries_total (snmp_packet_retries_total 2)

Количество повторов пакетов

snmp_packets_total (snmp_packets_total 25742)

Количество отправленных пакетов

snmp_request_errors_total (snmp_request_errors_total 0)

Количество ошибок

Эндпойнты опроса удаленных хостов выглядят примерно так (в зависимости от типа устройства): /snmp?module=apcups&target=10.177.248.228. При обращении к ним, непосредственно происходит опрос удаленного устройства с помощью заранее выбранных OIDs.

Метрики эндпойнта /snmp?module=<module>&target=<адрес>

Название метрики (пример метрики)

Описание

ifAdminStatus (ifAdminStatus{ifAlias="",ifDescr="vmac0",ifIndex="2",ifName=""} 1)

Административный статус интерфейса 2 уровня

ifMtu (ifMtu{ifAlias="",ifDescr="vmac0",ifIndex="2",ifName=""} 1500)

Размер MTU интерфейса

ipv4InterfaceEnableStatus (ipv4InterfaceEnableStatus{ipv4InterfaceIfIndex="1"} 1)

Статус 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 соберет уже правильный конфиг