Перейти к основному содержимому
Версия: 9.1

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Мониторинг ИБП APCAPC Smart-UPS, APC Back-UPS
arista_swМониторинг коммутаторов AristaArista 7050, 7280
cisco_deviceОбщий модуль мониторинга CiscoCisco ISR, Catalyst, Nexus
cisco_fc_feМониторинг Cisco Fibre ChannelCisco MDS SAN Switch
cisco_imcМониторинг Cisco Integrated Management ControllerCisco UCS
cisco_wlcМониторинг контроллеров WiFi CiscoCisco 5508, 9800 WLC
cyberpowerМониторинг ИБП CyberPowerCyberPower PR3000, OR1500
dellАппаратный мониторинг серверов DellDell PowerEdge
dell_networkМониторинг сетевых устройств DellDell Networking N2024, S-series
dlinkМониторинг коммутаторов D-LinkDGS-1210, DES-3200
eapМониторинг точек доступа TP-Link EAPTP-Link EAP225, EAP245
eltex_mesМониторинг коммутаторов Eltex MESEltex MES1124, MES2428
fieldserverМониторинг шлюзов FieldServerFieldServer ProtoNode
hpeАппаратный мониторинг серверов HPEHPE 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 InfraPowerEnlogic/InfraPower PDU
ip_mibМониторинг IP-MIBЛюбые сетевые устройства поддерживающие SNMP
juniperМониторинг устройств JuniperJuniper 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Мониторинг устройств MikroTikMikroTik CCR, hEX
nec_ixМониторинг NEC IX (VPN маршрутизаторы)NEC UNIVERGE IX2107
paloalto_fwМониторинг Palo Alto FirewallPA-220, PA-3020
powercomМониторинг ИБП PowercomPowercom Vanguard
printer_mibМониторинг принтеров (cостояние, уровень тонера)HP, Kyocera, Brother
raritanМониторинг Raritan PDURaritan PX
readynasМониторинг NAS ReadyNASNetgear ReadyNAS
servertech_sentry3Мониторинг ServerTech Sentry 3 PDU
servertech_sentry4Мониторинг ServerTech Sentry 4 PDU
sophos_xgМониторинг Sophos XG FirewallSophos XG 115
synologyМониторинг Synology NASSynology DS918+, RS1219+
systemБазовый модуль System-MIB (имя, контакт, местоположение)Любые устройства поддерживающие SNMP
tplink-ddmМониторинг оптики TP-Link (температура, мощность TX/RX)TP-Link SFP
ubiquiti_airfiberМониторинг Ubiquiti AirFiberUbiquiti AirFiber 5X, 24
ubiquiti_airmaxМониторинг AirMax устройствUbiquiti Rocket, NanoStation
ubiquiti_airosМониторинг устройств на AirOSUbiquiti 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

Исходный файл с описанием метрик входящих во встроенные модули доступен по ссылке.

Параметры конфигурации используемые в скрипте

ПараметрТипОбязательный параметрЗначение по умолчаниюВозможные значенияОписание
scrapeTimeoutintegerнет30Любое числоТаймаут получения метрик с одной цели по всем модулям, в секундах. Если за указанное время были получены не все метрики - устройство считается недоступным и будет отправлена соответствующая метрика
targetstringдаIP-адрес или DNS-имяIP/DNS имя опрашиваемого устройства
portintegerнет161Любое число от 1 до 65535Порт на котором работает служба SNMP
versionstringнетV2cV1, V2c, V3Версия протокола SNMP, которую поддерживает устройство
communitystringнетpublicЛюбая строкаСтрока авторизации на устройстве
authobjectнетОбъектПараметры авторизации для SNMP v3
auth.security_levelstringдаnoAuthNoPriv, authNoPriv, authPrivУровень безопасности
auth.auth_protocolstringдаSHA, SHA1, SHA256, MD5Хеширование пароля для аутентификации
auth.auth_passwordstringдаЛюбая строкаAuth пароль для проверки подлинности
auth.priv_protocolstringдаAES,DESМетод шифрования передаваемых данных
auth.priv_passwordstringдаЛюбая строкаПароль для шифрования/дешифрования данных
labelsobjectнетОбъектДополнительные метки, которые будут добавлены ко всем собранным метрикам. Смотрите доступные системные переменные агента
setModuleLabelbooleanнетFalseTrue, FalseПараметр отвечающий за добавление метки с названием модуля к собранным метрикам
configItemIdintegerнет$.vars.configItem.id или любое числоСистемная метка, которая будет добавлена ко всем собранным метрикам соответственно. Предлагается к заполнению макросом $.vars.configItem.id, содержащим ID конфигурационной единицы при использовании модуля CMDB в сборщиках данных
concurrencyintegerнет1Любое число от 1 до 4Параметр отвечающий за параллельность использования модулей
modulesstring[]даНазвание модуля из списка или из customModulesСписок модулей, при помощи которых будут опрашиваться цели
customModulesobjectнетОбъектКонфигурация собственных модулей

Конфигурация собственных модулей

Поддерживаемые секции конфигурации модуля

  • 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: ^(?:(.*)(.))$
          ...

          Применяется ко всему значению метрики (поэтому ключ пуст - "").

          Используется регулярное выражение: ^(?:(.*)(.))$. Которое делит строку на две группы:

          1. (.*) — захватывает все символы до последнего.
          2. (.) — захватывает последний символ.

          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.