Этот экспортер является рекомендуемым способом предоставления данных SNMP в формате, который может принять Prometheus.
Чтобы просто начать, рекомендуется использовать модуль if_mib
с коммутаторами, точками доступа или маршрутизаторами с использованием модуля аутентификации public_v2
, который должен быть сообществом доступа только для чтения на целевом устройстве.
Обратите внимание, что строки сообщества в SNMP не считаются секретными, поскольку в SNMP v1 и v2c они передаются незашифрованными. Для безопасного доступа требуется SNMP v3.
Хотя SNMP использует иерархическую структуру данных, а Prometheus использует n-мерную матрицу, эти две системы прекрасно сопоставляются, и нет необходимости просматривать данные вручную. snmp_exporter
отображает данные за вас.
Prometheus может сопоставлять экземпляры индекса SNMP с метками. Например, ifEntry
указывает INDEX ifIndex
. Это становится меткой ifIndex
в Prometheus.
Если запись SNMP имеет несколько значений индекса, каждое значение сопоставляется с отдельной меткой Prometheus.
SNMP структурирован в виде деревьев OID, описываемых MIB. Поддеревья OID имеют одинаковый порядок в разных местах дерева. Порядок в 1.3.6.1.2.1.2.2.1.1
( ifIndex
) такой же, как в 1.3.6.1.2.1.2.2.1.2
( ifDescr
), 1.3.6.1.2.1.31.1.1.1.10
( ifHCOutOctets
) и т. д. Числа — это OID, имена в скобках — это имена из MIB, в данном случае IF-MIB.
Для устройства с интерфейсом под номером 2 частичный возврат snmpwalk
выглядит так:
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
объединяет все эти данные в:
ifHCOutOctets{ifAlias="",ifDescr="eth0",ifIndex="2",ifName="eth0"} 1000
Один экземпляр snmp_exporter
может быть запущен на тысячах устройств.
Бинарные файлы можно загрузить со страницы выпусков Github, они не требуют специальной установки.
Мы также предоставляем образец юнит-файла systemd.
Запустите snmp_exporter
как демон или из CLI:
./snmp_exporter
Посетите http://localhost:9116/snmp?target=192.0.0.8, где 192.0.0.8
— это IP-адрес или полное доменное имя устройства SNMP, от которого нужно получить показатели. Обратите внимание, что при этом будет использоваться транспорт по умолчанию ( udp
), порт по умолчанию ( 161
), аутентификация по умолчанию ( public_v2
) и модуль по умолчанию ( if_mib
). Авторизация и модуль должны быть определены в файле snmp.yml
.
Например, если у вас есть авторизация с именем my_secure_v3
для прохождения ddwrt
, URL-адрес будет выглядеть так: http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=192.0.0.8.
Чтобы настроить другой транспорт и/или порт, используйте синтаксис [transport://]host[:port]
.
Например, чтобы очистить устройство с помощью tcp
через порт 1161
, URL-адрес будет выглядеть так: http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=tcp%3A%2F%2F192.0.0.8%3A1161.
Обратите внимание, что для target
следует использовать кодировку URL-адреса из-за символов :
и /
. Prometheus автоматически кодирует параметры запроса, и ручное кодирование в файле конфигурации Prometheus не требуется.
Метрики, касающиеся работы самого экспортера, доступны в конечной точке http://localhost:9116/metrics.
В URL-адресе можно указать дополнительный параметр snmp_context
, например: http://localhost:9116/snmp?auth=my_secure_v3&module=ddwrt&target=192.0.0.8&snmp_context=vrf-mgmt Параметр snmp_context
в URL-адресе переопределит context_name
параметр в файле snmp.yml
.
Функциональность нескольких модулей позволяет вам указать несколько модулей, что позволяет извлекать информацию из нескольких модулей за один раз. Параллелизм можно указать с помощью опции snmp-exporter --snmp.module-concurrency
(по умолчанию — 1).
Примечание. Эта реализация не выполняет дедупликацию обходов между различными модулями.
Есть два способа указать несколько модулей. Вы можете разделить их запятой или определить несколько params_module. URL-адреса будут выглядеть следующим образом:
Для разделения запятой:
http://localhost:9116/snmp?module=if_mib,arista_sw&target=192.0.0.8
Для нескольких params_module:
http://localhost:9116/snmp?module=if_mib&module=arista_sw&target=192.0.0.8
Имя файла конфигурации по умолчанию — snmp.yml
, и его не следует редактировать вручную. Если вам нужно его изменить, см. Создание конфигурации.
Файл snmp.yml
по умолчанию охватывает множество распространенных аппаратных средств, использующих SNMP v2 GETBULK.
Параметр --config.file
можно использовать несколько раз для загрузки более одного файла. Он также поддерживает сопоставление имен файлов glob, например snmp*.yml
.
Параметр --config.expand-environment-variables
позволяет передавать переменные среды в некоторые поля файла конфигурации. Поддерживаются поля username
, password
и priv_password
в разделе аутентификации. По умолчанию отключено.
Повторяющиеся записи module
или auth
считаются недействительными и не могут быть загружены.
Параметрами URL-адреса target
, auth
и module
можно управлять путем изменения меток.
Пример конфигурации:
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']
Вы можете передать username
, password
и priv_password
через переменные среды по вашему выбору в формате ниже. Если переменные существуют в среде, они разрешаются на лету, в противном случае строка в файле конфигурации передается как есть.
Для этого необходимо установить флаг --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}
Подобно blackbox_exporter, snmp_exporter
предназначен для запуска на нескольких центральных машинах и его можно рассматривать как «прокси-сервер Prometheus».
Средство экспорта SNMP поддерживает TLS и базовую аутентификацию. Это обеспечивает лучший контроль над различными конечными точками HTTP.
Чтобы использовать TLS и/или базовую аутентификацию, вам необходимо передать файл конфигурации с помощью параметра --web.config.file
. Формат файла описан в репозитории экспортера-инструментария.
Обратите внимание, что параметры TLS и базовой аутентификации влияют на все конечные точки HTTP: /metrics для очистки, /snmp для очистки устройств SNMP и веб-интерфейс.
Большинство случаев использования должны покрываться нашей конфигурацией по умолчанию. Если вам нужно сгенерировать собственную конфигурацию из MIB, вы можете использовать генератор.
Используйте генератор, если вам нужно настроить объекты для обхода или использовать закрытые MIB.
Чтобы обеспечить точные счетчики для больших значений Counter64, экспортер автоматически переносит значение каждые 2^53, чтобы избежать 64-битного округления с плавающей запятой. Prometheus прекрасно справится с этим за вас, и вы не заметите никаких негативных последствий.
Если вам нужно отключить эту функцию для систем, отличных от Prometheus, используйте флаг командной строки --no-snmp.wrap-large-counters
.
Может быть сложно начать со всего этого, но, по нашему собственному опыту, snmp_exporter, честно говоря, является лучшим способом взаимодействия с SNMP. Чтобы облегчить задачу другим, рассмотрите возможность предоставления нам своих конфигураций. Конфигурация snmp.yml
должна сопровождаться конфигурацией генератора. Что касается вашей информационной панели, оповещений и правил записи, рассмотрите возможность размещения их на https://github.com/prometheus/snmp_exporter/tree/main/snmp-mixin.