SNMP Polling
Общие сведения
Название плагина: snmp
Ссылка для загрузки плагина: скачать
Минимальная версия Monq: 9.0.0
Минимальная версия агента Monq: 3.0.0
Описание:
Плагин предназначен для опроса устройств поддерживающих SNMP-протокол версий SNMPv2с и SNMPv3.
Пример конфигурации Yaml скрипта сборщика данных
name: SNMP jobs example
jobs:
- name: Example SNMP job name
steps:
- plugin: snmp
with:
scrapeTimeout: 15s
target: 10.10.10.10
port: 161
version: { V1, V2c, V3}
community: public
auth:
security_level: {noAuthNoPriv, authNoPriv, authPriv}
username: ""
auth_protocol: SHA256
auth_password: ""
priv_protocol: AES
priv_password: ""
labels:
job: $.env.jobName # <- "Example SNMP job name"
agentName: $.agentName
agentHost: $.hostname
agentIp: $.hostAddress
configItemId: $.vars.configItem.id
concurrency: 1
modules:
- apcups
- hrDevice
outputs:
result: $._outputs.result
artifacts:
- data: $.outputs.result
send-to: monq
type: metrics
Список предустановленных модулей
Ниже приведен список, доступных к использованию модулей плагина. Каждый модуль содержит собственный набор правил для опроса устройств.
| Название модуля | Назначение модуля | Поддерживаемые устройства / системы |
|---|---|---|
| apcups | Мониторинг ИБП APC | APC Smart-UPS, APC Back-UPS |
| arista_sw | Мониторинг коммутаторов Arista | Arista 7050, 7280 |
| cisco_device | Общий модуль мониторинга Cisco | Cisco ISR, Catalyst, Nexus |
| cisco_fc_fe | Мониторинг Cisco Fibre Channel | Cisco MDS SAN Switch |
| cisco_imc | Мониторинг Cisco Integrated Management Controller | Cisco UCS |
| cisco_wlc | Мониторинг контроллеров WiFi Cisco | Cisco 5508, 9800 WLC |
| cyberpower | Мониторинг ИБП CyberPower | CyberPower PR3000, OR1500 |
| dell | Аппаратный мониторинг серверов Dell | Dell PowerEdge |
| dell_network | Мониторинг сетевых устройств Dell | Dell Networking N2024, S-series |
| dlink | Мониторинг коммутаторов D-Link | DGS-1210, DES-3200 |
| eap | Мониторинг точек доступа TP-Link EAP | TP-Link EAP225, EAP245 |
| eltex_mes | Мониторинг коммутаторов Eltex MES | Eltex MES1124, MES2428 |
| fieldserver | Мониторинг шлюзов FieldServer | FieldServer ProtoNode |
| hpe | Аппаратный мониторинг серверов HPE | HPE ProLiant |
| hrDevice | Мониторинг устройств через hrDeviceTable | Любые устройства, поддерживающие HOST-RESOURCES-MIB |
| hrSWInstalled | Информация об установленном ПО | UNIX/Windows с SNMP |
| hrSWRun | Информация о запущенных процессах | UNIX/Windows с SNMP |
| hrSWRunPerf | Производительность процессов | UNIX/Windows с SNMP |
| hrStorage | Мониторинг дисков и томов | UNIX/Windows/СХД и другие устройства со встроенной памятью |
| hrSystem | Общие параметры системы | Любые устройства поддерживающие SNMP |
| if_mib | Интерфейсы по IF-MIB | Любые устройства поддерживающие SNMP |
| infrapower_pdu | Мониторинг PDU InfraPower | Enlogic/InfraPower PDU |
| ip_mib | Мониторинг IP-MIB | Любые сетевые устройства поддерживающие SNMP |
| juniper | Мониторинг устройств Juniper | Juniper EX, SRX |
| juniper_optics | Мониторинг оптики Juniper (температура, мощность TX/RX) | Juniper с оптическими интерфейсами |
| keepalived | Мониторинг Keepalived (статус VRRP) | Linux с Keepalived |
| kemp_loadmaster | Мониторинг Kemp LoadMaster (состояние балансировщика нагрузки) | Kemp LoadMaster VLM |
| liebert_pdu | Мониторинг Liebert PDU (питание, нагрузка) | Liebert MPH/MPX |
| mikrotik | Мониторинг устройств MikroTik | MikroTik CCR, hEX |
| nec_ix | Мониторинг NEC IX (VPN маршрутизаторы) | NEC UNIVERGE IX2107 |
| paloalto_fw | Мониторинг Palo Alto Firewall | PA-220, PA-3020 |
| powercom | Мониторинг ИБП Powercom | Powercom Vanguard |
| printer_mib | Мониторинг принтеров (cостояние, уровень тонера) | HP, Kyocera, Brother |
| raritan | Мониторинг Raritan PDU | Raritan PX |
| readynas | Мониторинг NAS ReadyNAS | Netgear ReadyNAS |
| servertech_sentry3 | Мониторинг ServerTech Sentry 3 PDU | |
| servertech_sentry4 | Мониторинг ServerTech Sentry 4 PDU | |
| sophos_xg | Мониторинг Sophos XG Firewall | Sophos XG 115 |
| synology | Мониторинг Synology NAS | Synology DS918+, RS1219+ |
| system | Базовый модуль System-MIB (имя, контакт, местоположение) | Любые устройства поддерживающие SNMP |
| tplink-ddm | Мониторинг оптики TP-Link (температура, мощность TX/RX) | TP-Link SFP |
| ubiquiti_airfiber | Мониторинг Ubiquiti AirFiber | Ubiquiti AirFiber 5X, 24 |
| ubiquiti_airmax | Мониторинг AirMax устройств | Ubiquiti Rocket, NanoStation |
| ubiquiti_airos | Мониторинг устройств на AirOS | Ubiquiti AirMax, AirGrid |
| ubiquiti_unifi | Мониторинг UniFi устройств | Ubiquiti UniFi AP, UniFi Switch |
| ucd_la_table | Нагрузка системы | Linux/FreeBSD с включенным SNMP |
| ucd_memory | Использование памяти | Linux/FreeBSD с включенным SNMP |
| ucd_system_stats | Системные метрики | Linux/FreeBSD с включенным SNMP |
| yamaha_rt | Мониторинг Yamaha маршрутизаторов | Yamaha RTX1210 |
Исходный файл с описанием метрик входящих во встроенные модули доступен по ссылке.
Параметры конфигурации используемые в скрипте
| Параметр | Тип | Обязательный параметр | Значение по умолчанию | Возможные значения | Описание |
|---|---|---|---|---|---|
| scrapeTimeout | integer | нет | 30 | Любое число | Таймаут получения метрик с одной цели по всем модулям, в секундах. Если за указанное время были получены не все метрики - устройство считается недоступным и будет отправлена соответствующая метрика |
| target | string | да | IP-адрес или DNS-имя | IP/DNS имя опрашиваемого устройства | |
| port | integer | нет | 161 | Любое число от 1 до 65535 | Порт на котором работает служба SNMP |
| version | string | нет | V2c | V1, V2c, V3 | Версия протокола SNMP, которую поддерживает устройство |
| community | string | нет | public | Любая строка | Строка авторизации на устройстве |
| auth | object | нет | Объект | Параметры авторизации для SNMP v3 | |
| auth.security_level | string | да | noAuthNoPriv, authNoPriv, authPriv | Уровень безопасности | |
| auth.auth_protocol | string | да | SHA, SHA1, SHA256, MD5 | Хеширование пароля для аутентификации | |
| auth.auth_password | string | да | Любая строка | Auth пароль для проверки подлинности | |
| auth.priv_protocol | string | да | AES,DES | Метод шифрования передаваемых данных | |
| auth.priv_password | string | да | Любая строка | Пароль для шифрования/дешифрования данных | |
| labels | object | нет | Объект | Дополнительные метки, которые будут добавлены ко всем собранным метрикам. Смотрите доступные системные переменные агента | |
| setModuleLabel | boolean | нет | False | True, False | Параметр отвечающий за добавление метки с названием модуля к собранным метрикам |
| configItemId | integer | нет | $.vars.configItem.id или любое число | Системная метка, которая будет добавлена ко всем собранным метрикам соответственно. Предлагается к заполнению макросом $.vars.configItem.id, содержащим ID конфигурационной единицы при использовании модуля CMDB в сборщиках данных | |
| concurrency | integer | нет | 1 | Любое число от 1 до 4 | Параметр отвечающий за параллельность использования модулей |
| modules | string[] | да | Название модуля из списка или из customModules | Список модулей, при помощи которых будут опрашиваться цели | |
| customModules | object | нет | Объект | Конфигурация собственных модулей |
Конфигурация собственных модулей
Поддерживаемые секции конфигурации модуля
-
get- список OID-ов (строк) для однократного запроса "SNMP Get". В структуре модуля это поле является массивом строк. Каждая строка – это OID (например,1.3.6.1.2.1.1.3.0). Если указана секцияget, плагин выполнит SNMP GET по каждому OID и "запомнит" соответствующие метрики. -
walk- список OID-ов (строк), по которым плагин выполняет "SNMP Bulk-walk". Обычно используется для сбора таблиц (например,ifTable,hrStorageTable). Каждая строка интерпретируется как OID. Плагин выполняетwalkдля каждого указанного элемента и заполняет данные в своей памяти. -
metrics- раздел, описывающий конкретные метрики, которые должны быть сформированы на выходе плагина из запомненных данных в секцияхgetиwalk.Каждая метрика задаётся с полями:
-
name- название метрики -
oid- адрес -
type- тип значения в OID (Gauge/DisplayString/OctetString)Дополнительно метрика может содержать поля:
-
indexes- список индексов таблицы[]Index, которые конвертируются в метки. У каждого индекса есть набор свойств:labelname- название метки (индекса) в метрикеtype- тип значения (gauge/EnumAsInfo). Дляgaugeвсе просто, числовое значение индекса должно быть записано как есть в меткуlabelname. ДляEnumAsInfoдолжна быть произведена конвертация по вложенномуenum_values. Еслиenum_valuesотсутствует или не содержит нужных значений, и указан типEnumAsInfoзначение записывается как есть.enum_values(опционально) - позволяет сопоставить числовое значение, возвращаемое по SNMP, с человеко-читаемой строкой, чтобы удобнее видеть значение в метриках.
-
lookups- список справочных запросов[]Lookup, позволяющих по значениям индексов получать дополнительные метки. ПолеLookupsметрики – это массив структур с полями:labels- список названий новых метокlabelname- название метки для одиночного значенияoid- OID для получения метки.
Например, если индекс ссылается на строку в другой таблице, lookups позволяет по этому индексу сделать дополнительный SNMP GET и получить человеко-читаемое имя.
Если при lookup запросе по OID-у ничего не найдено (No Such Instance currently exists at this OID), данная метка будет скрыта. А если значение найдено (в т.ч. пустое) метка будет отображена.
-
regexp_extracts- позволяет применить регулярное выражение к строковому значению, полученному по SNMP, чтобы извлечь часть текста и использовать её как метку. Также может применяться для извлечения значений самой метрики.-
Пример для метки:
...
- name: device_serial_number
oid: 1.3.6.1.2.1.47.1.1.1.1.11
type: DisplayString
help: Device serial number
regexp_extracts:
extracted_serial:
regex: "(\\w+)$"
...OID возвращает: "ModelX-CHASSIS-ABC123456". Регулярное выражение
"(\w+)$"захватывает последнюю группу буквенно-цифровых символов в строке, то есть:"ABC123456". В результате будет создана дополнительная метка:extracted_serial="ABC123456". -
Пример для значения:
...
- name: pduMainLoadVoltage
oid: 1.3.6.1.4.1.34550.20.2.1.1.1.13
type: DisplayString
help: The voltage measured on this PDU in tenth of Volts - 1.3.6.1.4.1.34550.20.2.1.1.1.13
indexes:
- labelname: pduIndex
type: gauge
lookups:
- labels:
- pduIndex
labelname: pduName
oid: 1.3.6.1.4.1.34550.20.2.1.1.1.6
type: DisplayString
- labels:
- pduIndex
labelname: pduLocation
oid: 1.3.6.1.4.1.34550.20.2.1.1.1.7
type: DisplayString
regex_extracts:
"":
- value: $1.$2
regex: ^(?:(.*)(.))$
...Применяется ко всему значению метрики (поэтому ключ пуст -
"").Используется регулярное выражение:
^(?:(.*)(.))$. Которое делит строку на две группы:(.*)— захватывает все символы до последнего.(.)— захватывает последний символ.
value: $1.$2- склеивает полученные группы, ставя точку посередине.Например, устройство возвращает значение метрики как строку
"2305", имеется в виду230.5вольт в десятых долях вольта, но вернулось как строка без десятичной точки. Вот регулярное выражение разобьет эту строку в число230.5.
-
-
enum_values- Позволяет сопоставить числовое значение, возвращаемое по SNMP, с человеко-читаемой строкой, чтобы удобнее видеть значение в метрикахОбрабатывается данный параметр только в случае установленного type =
EnumAsInfo/EnumAsStateSetПример для
EnumAsStateSet:...
- name: hrPrinterStatus
oid: 1.3.6.1.2.1.25.3.5.1.1
type: EnumAsStateSet
help: The current status of this printer device. - 1.3.6.1.2.1.25.3.5.1.1
indexes:
- labelname: hrDeviceIndex
type: gauge
lookups:
- labels:
- hrDeviceIndex
labelname: hrDeviceDescr
oid: 1.3.6.1.2.1.25.3.2.1.3
type: DisplayString
- labels:
- hrDeviceIndex
labelname: hrDeviceType
oid: 1.3.6.1.2.1.25.3.2.1.2
type: OctetString
enum_values:
1: other
2: unknown
3: idle
4: printing
5: warmup
...Вернет метрики:
hrPrinterStatus{hrDeviceIndex="1",hrPrinterStatus="idle"} 1
hrPrinterStatus{hrDeviceIndex="1",hrPrinterStatus="other"} 0
hrPrinterStatus{hrDeviceIndex="1",hrPrinterStatus="printing"} 0
hrPrinterStatus{hrDeviceIndex="1",hrPrinterStatus="unknown"} 0
hrPrinterStatus{hrDeviceIndex="1",hrPrinterStatus="warmup"} 0Единица в значении метрики свидетельствует о текущем состоянии.
Пример для
EnumAsInfo:...
- name: ifType
old: 1.3.6.1.2.1.2.2.1.3
type: EnumAsInfo
help: The type of interface - 1.3.6.1.2.1.2.2.1.3
indexes:
- labelname: ifIndex
type: gauge
lookups:
- labels:
- ifIndex
labelname: ifAlias
old: 1.3.6.1.2.1.31.1.1.1.1.18
type: DisplayString
- labels:
- ifIndex
labelname: ifDescr
old: 1.3.6.1.2.1.2.2.1.2
type: DisplayString
- labels:
- ifIndex
labelname: ifName
old: 1.3.6.1.2.1.31.1.1.1.1
type: DisplayString
enum_values:
23: ppp
209: bridge
...Вернет метрики:
ifType_info{ifDescr="br_vlan10", ifIndex="36", ifType="bridge"}
ifType_info{ifDescr="l2tp", ifIndex="15730651", ifName="l2tp", ifType="ppp"} -
offset- позволяет добавить/вычесть фиксированное значение (смещение) из числового значения, полученного по SNMP. -
scale- позволяет умножить значение на коэффициент, чтобы привести его к корректной единице измерения. Деление осуществляется через умножение на дробно число....
- name: hrDiskStorageRemoveble
oid: 1.3.6.1.2.1.25.3.6.1.3
type: gauge
help: Denotes whether or not the disk media may be removed from the drive. -
1.3.6.1.2.1.25.3.6.1.3
indexes:
- labelname: hrDeviceIndex
type: gauge
lookups:
- labels:
- hrDeviceIndex
labelname: hrDeviceDescr
oid: 1.3.6.1.2.1.25.3.2.1.3
type: DisplayString
- labels:
- hrDeviceIndex
labelname: hrDeviceType
oid: 1.3.6.1.2.1.25.3.2.1.2
type: OctetString
enum_values:
1: "true"
2: "false"
offset: 2
scale: -1
...В приведенном примере к метрике будет добавлено
+2(offset) и умножено на-1(scale).
-
-
Пример получения определенного OID
jobs:
- name: SNMP get OID
steps:
- plugin: snmp
with:
target: 10.10.10.10
port: 161
version: V2c
scrapeTimeout: 50
community: public
concurrency: 1
modules:
- moduleNameExample
customModules:
moduleNameExample:
walk:
- 1.3.6.1.2.1.2.2.1.5
metrics:
- name: metricNameExample
oid: 1.3.6.1.2.1.2.2.1.5.41
type: gauge
outputs:
result: $._outputs.result
artifacts:
- data: $.outputs.result
send-to: monq
type: metrics
В приведенном примере вручную определяем новый модуль moduleNameExample. В котором осуществляется обнаружение и получение значений OID-ов методом walk по дереву 1.3.6.1.2.1.2.2.1.5. Из обнаруженных и полученных данных формируем метрику metricNameExample, а значение для данной метрики берем уже из OID 1.3.6.1.2.1.2.2.1.5.41.