Драйвер SNMP: различия между версиями

Материал из Wiren Board
(Добавил переадресацию)
Метка: новое перенаправление
 
(Удалено перенаправление на SNMP)
Метка: удалено перенаправление
Строка 1: Строка 1:
#REDIRECT [[SNMP]]
{{DISPLAYTITLE: Драйвер SNMP}}
 
'''SNMP (Simple Network Management Protocol)''' — стандартный протокол для управления сетевыми устройствами в IP-сетях. Он часто используется для обмена сервисной информацией с устройствами и представляет данные в виде отдельных переменных. Поддержка протокола встречается в сетевых коммутаторах, маршрутизаторах, системах бесперебойного питания (UPS), серверах и т.п. Подробнее о протоколе читайте в [https://ru.wikipedia.org/wiki/SNMP Wikipedia].
 
В контроллер Wiren Board добавлен драйвер для ''получения'' данных от SNMP-устройств.
Но вы можете настроить и ''отправку'' данных (агент на контроллере), для этого нужно установить [[Агент_SNMP |Агент SNMP]] настроив демон <code>snmpd</code>.
 
= Установка и настройка на контроллере =
Для установки и настройки подключитесь к контроллеру по [[SSH]].
 
== Установка ==
Сначала нужно установить пакет <code>wb-mqtt-snmp</code>, для этого введите в консоли команды:
 
<syntaxhighlight lang="bash">
apt update
apt install wb-mqtt-snmp
</syntaxhighlight>
 
== Настройка ==
Структура конфигурации похожа на [[Драйвер wb-mqtt-serial | wb-mqtt-serial]].
 
Пример конфигурационного файла <code>/etc/wb-mqtt-snmp.conf</code>:
 
<syntaxhighlight lang="json">
{
    "debug": false,
    "num_workers": 4,
    "devices": [
        {
            "address": "192.168.0.1",
            "name": "My SNMP server",
            "community": "public",
            "oid_prefix": "SNMPv2-MIB",
            "channels": [
                {
                    "name": "Number of services",
                    "oid": "sysServices.0",
                    "poll_interval": 1000
                },
                {
                    "name": "Boot string",
                    "oid": "HOST-RESOURCES-MIB::hrSystemInitialLoadParameters.0",
                    "poll_interval": 10000
                },
                {
                    "name": "System location",
                    "oid": ".1.3.6.1.2.1.1.6.0"
                }
            ]
        },
        {
            "address": "test.net-snmp.org",
            "name": "Test SNMP server",
            "device_type": "test-snmp"
        }
    ]
}
</syntaxhighlight>
 
О структуре файла и назначении параметров читайте ниже.
 
=== Файл конфигурации ===
* <code>debug</code> — флаг включения режима отладки. Если true, то в процессе работы демона в лог-файл будет выноситься также отладочная информация (по умолчанию — false).
* <code>num_workers</code> — максимальное количество одновременно устанавливаемых SNMP-соединений. Если опрашивается много SNMP-устройств, то увеличение этого параметра может ускорить опрос. Но помните, что увеличение этого параметра также увеличивает максимальную нагрузку на сеть. В большинстве случаев можно оставить значение по умолчанию — 4.
* <code>devices</code> — список опрашиваемых устройств.
 
==== Описание устройства ====
{| class="wikitable"
|-
! Имя параметра !! Тип !! Описание !! Обязательный !! Значение по умолчанию
|-
| '''name ''' || string || Имя устройства || Нет || SNMP [address]_[community]
|-
| '''id''' || string || ID устройства в MQTT || Нет || snmp_[address]_[community]
|-
| '''address''' || string || Сетевой адрес устройства || style="background: #22EE44;" | Да || -
|-
| '''device_type''' || string || Тип устройства, нужен для загрузки шаблона || Нет || -
|-
| '''enabled''' || bool || Включает или выключает опрос устройства || Нет || true
|-
| '''community''' || string || Имя сообщества SNMP || style="background: #22EE44;" | Да || -
|-
| '''oid_prefix''' || string || Префикс (имя MIB) для текстовых OID каналов, где он не указан явно || Нет || -
|-
| '''snmp_version''' || string || Версия SNMP, поддерживается только 2с || Нет || 2c
|-
| '''snmp_timeout''' || integer || Время ожидания ответа, в секундах || Нет || 5
|-
| '''poll_interval''' || integer || Минимальное время опроса для каждого канала по умолчанию || Нет || -
|-
| '''channels''' || array || Описание каналов устройства (переменных SNMP) || Нет || -
|-
|}
 
==== Описание каналов ====
{| class="wikitable"
|-
! Имя параметра !! Тип !! Описание !! Обязательный !! Значение по умолчанию
|-
| '''name''' || string || Имя канала || style="background: #22EE44;" | Да || -
|-
| '''oid''' || string || OID в числовом или текстовом виде || style="background: #22EE44;" | Да || -
|-
| '''enabled''' || boolean || Включает или выключает опрос устройства || Нет || true
|-
| '''control_type''' || string || Тип данных, согласно [https://github.com/wirenboard/homeui/blob/master/conventions.md Conventions] || Нет || text
|-
| '''units''' || string || Обозначение единиц измерения, для <code>control_type == value</code> || Нет || -
|-
| '''scale''' || float || Множитель, для числовых значений || Нет || 1.0
|-
| '''poll_interval''' || int || Минимальный интервал опроса канала, в мс || Нет || <code>poll_interval</code> из описания устройства, либо 1000
|-
|}
 
== Преобразование OID ==
При запуске демона происходит попытка преобразовать записанные в конфигурации текстовые OID в числовые:
* OID числовой: начинается с точки: <code>.1.2.3.4</code> — преобразование не происходит.
* OID текстовый: например, <code>SNMPv2-MIB::sysName.0</code> — происходит преобразование в числовой. В системе должен быть установлен MIB, который содержит описание этой переменной.
 
Преобразование имен происходит с помощью вызова утилиты <code>snmptranslate</code>, так что можно проверить наличие MIB вручную с [[#Проверка работы преобразования | помощью команды]].
 
Параметр <code>oid_prefix</code> в описании устройства позволяет опустить имя MIB (префикс: ''SNMPv2-MIB''::sysName.0). В этом случае префикс из <code>oid_prefix</code> будет автоматически присоединён ко всем OID каналам устройства, где он явно не указан. Например, при <code>oid_prefix</code> равном ''SNMPv2-MIB'':
 
* sysName.0 → ''SNMPv2-MIB''::sysName.0
* sysLocation.0 → ''SNMPv2-MIB''::sysLocation.0
* HOST-RESOURCES-MIB::hrSystemUptime.0 → HOST-RESOURCES-MIB::hrSystemUptime.0
* .1.3.6.1.2.1.1.6.0 → .1.3.6.1.2.1.1.6.0
 
=== Установка MIB ===
Если у вас есть нужный MIB-файл, то достаточно скопировать его в директорию <code>/root/.snmp/mibs</code>:
<syntaxhighlight lang="bash">
# cp your-mibs-file.mib /root/.snmp/mibs
</syntaxhighlight>
 
Если на контроллере нет директории <code>/root/.snmp/mibs</code> — создайте ее:
<syntaxhighlight lang="bash">
# mkdir -p /root/.snmp/mibs
</syntaxhighlight>
 
После копирования MIB-файла [[#Проверка работы преобразования | проверьте правильность преобразования]] <code>snmptranslate</code> с каким-либо известным OID.
 
=== Проверка работы преобразования ===
Для проверки введите команду, где <code>yourOid</code> — известный вам OID:
<syntaxhighlight lang="bash">
# snmptranslate -On yourOid
</syntaxhighlight>
 
== Шаблоны ==
Для описания устройств не обязательно, но удобно использовать ''шаблоны''.
 
''Шаблон (тип устройства)'' — это внешний конфигурационный файл с именем <code>config-[device-type-name].json</code>, который располагается в <code>/usr/share/wb-mqtt-snmp/templates</code>. Например, <code>/usr/share/wb-mqtt-snmp/templates/config-test-snmp.json</code>. В файле шаблона содержится описание устройства: имя сообщества SNMP и базовое описание всех его каналов.
 
Для использования шаблона в описании устройства в конфигурационном файле укажите поле <code>device_type</code>. Среди всех представленных шаблонов будет выбран тот, где такое же значение <code>device_type</code> и все неопределенные в конфигурационном файле поля примут значения из шаблона.
 
Точно так же это работает с каналами. Сравнение каналов происходит по обязательному полю <code>name</code>: если имя канала из конфигурационного файла совпадёт с именем канала в шаблоне, из шаблона будут взяты все неопределенные значения.
 
=== Пример ===
Шаблон <code>config-my-device.json</code>:
 
<syntaxhighlight lang="json">
{
    "device_type": "my-device",
    "community": "public",
    "channels": [
        {
            "name": "Channel 1",
            "oid": ".1.2.3.4.1"
        },
        {
            "name": "Channel 2",
            "oid": ".1.2.3.4.2",
            "poll_interval": 3000
        }
    ]
}
</syntaxhighlight>
 
Конфигурационный файл:
<syntaxhighlight lang="json">
{
    "devices": [
        {
            "name": "Device 1",
            "device_type": "my-device",
            "address": "192.168.0.5",
            "snmp_timeout": 1
        },
        {
            "name": "Device 2",
            "device_type": "my-device",
            "address": "my-device.example.org",
            "snmp_timeout": 5,
            "channels": [
                {
                    "name": "Channel 2",
                    "poll_interval": 10000
                }
            ]
        }
    ]
}
</syntaxhighlight>
 
В примере мы описали один шаблон <code>my-device</code>, по которому определили два разных устройства ''Device 1'' и ''Device 2'' с одинаковым набором каналов.
 
Поскольку ''Device 1'' находится в локальной сети, то логично выставить ему небольшое значение таймаута — это позволит быстрее определить неисправность устройства. Все остальные настройки берутся из шаблона.
 
''Device 2'' — удалённый сервер, потому для него стоит увеличить таймаут, чтобы не считать устройство неисправным при задержке пакета. Более того, для канала ''Channel 2'' здесь мы переопределяем интервал опроса на б''о''льший — это снизит нагрузку на сеть.
 
Таким образом, шаблоны удобно использовать для описания группы однотипных устройств.
 
= Список шаблонов =
В поставке <code>wb-mqtt-snmp</code> прилагается набор шаблонов для типовых устройств:
 
{| class="wikitable"
|-
! Устройство !! Имя шаблона !! Протестировано !! Комментарии
|-
| Тестовый сервер Net-SNMP || test-snmp || style="background: #22EE44;" | Да || адрес тестового сервера test.net-snmp.org
|-
| APC UPS || apc-ups || Нет ||
* Требуется локально установленный PowerNet-MIB
* Описание устройства такое же, как в <code>wb-mqtt-apcsnmp</code>
|-
|}

Версия 19:17, 21 января 2021


SNMP (Simple Network Management Protocol) — стандартный протокол для управления сетевыми устройствами в IP-сетях. Он часто используется для обмена сервисной информацией с устройствами и представляет данные в виде отдельных переменных. Поддержка протокола встречается в сетевых коммутаторах, маршрутизаторах, системах бесперебойного питания (UPS), серверах и т.п. Подробнее о протоколе читайте в Wikipedia.

В контроллер Wiren Board добавлен драйвер для получения данных от SNMP-устройств. Но вы можете настроить и отправку данных (агент на контроллере), для этого нужно установить Агент SNMP настроив демон snmpd.

Установка и настройка на контроллере

Для установки и настройки подключитесь к контроллеру по SSH.

Установка

Сначала нужно установить пакет wb-mqtt-snmp, для этого введите в консоли команды:

apt update
apt install wb-mqtt-snmp

Настройка

Структура конфигурации похожа на wb-mqtt-serial.

Пример конфигурационного файла /etc/wb-mqtt-snmp.conf:

{
    "debug": false,
    "num_workers": 4,
    "devices": [
        {
            "address": "192.168.0.1",
            "name": "My SNMP server",
            "community": "public",
            "oid_prefix": "SNMPv2-MIB",
            "channels": [
                {
                    "name": "Number of services",
                    "oid": "sysServices.0",
                    "poll_interval": 1000
                },
                {
                    "name": "Boot string",
                    "oid": "HOST-RESOURCES-MIB::hrSystemInitialLoadParameters.0",
                    "poll_interval": 10000
                },
                {
                    "name": "System location",
                    "oid": ".1.3.6.1.2.1.1.6.0"
                }
            ]
        },
        {
            "address": "test.net-snmp.org",
            "name": "Test SNMP server",
            "device_type": "test-snmp"
        }
    ]
}

О структуре файла и назначении параметров читайте ниже.

Файл конфигурации

  • debug — флаг включения режима отладки. Если true, то в процессе работы демона в лог-файл будет выноситься также отладочная информация (по умолчанию — false).
  • num_workers — максимальное количество одновременно устанавливаемых SNMP-соединений. Если опрашивается много SNMP-устройств, то увеличение этого параметра может ускорить опрос. Но помните, что увеличение этого параметра также увеличивает максимальную нагрузку на сеть. В большинстве случаев можно оставить значение по умолчанию — 4.
  • devices — список опрашиваемых устройств.

Описание устройства

Имя параметра Тип Описание Обязательный Значение по умолчанию
name string Имя устройства Нет SNMP [address]_[community]
id string ID устройства в MQTT Нет snmp_[address]_[community]
address string Сетевой адрес устройства Да -
device_type string Тип устройства, нужен для загрузки шаблона Нет -
enabled bool Включает или выключает опрос устройства Нет true
community string Имя сообщества SNMP Да -
oid_prefix string Префикс (имя MIB) для текстовых OID каналов, где он не указан явно Нет -
snmp_version string Версия SNMP, поддерживается только 2с Нет 2c
snmp_timeout integer Время ожидания ответа, в секундах Нет 5
poll_interval integer Минимальное время опроса для каждого канала по умолчанию Нет -
channels array Описание каналов устройства (переменных SNMP) Нет -

Описание каналов

Имя параметра Тип Описание Обязательный Значение по умолчанию
name string Имя канала Да -
oid string OID в числовом или текстовом виде Да -
enabled boolean Включает или выключает опрос устройства Нет true
control_type string Тип данных, согласно Conventions Нет text
units string Обозначение единиц измерения, для control_type == value Нет -
scale float Множитель, для числовых значений Нет 1.0
poll_interval int Минимальный интервал опроса канала, в мс Нет poll_interval из описания устройства, либо 1000

Преобразование OID

При запуске демона происходит попытка преобразовать записанные в конфигурации текстовые OID в числовые:

  • OID числовой: начинается с точки: .1.2.3.4 — преобразование не происходит.
  • OID текстовый: например, SNMPv2-MIB::sysName.0 — происходит преобразование в числовой. В системе должен быть установлен MIB, который содержит описание этой переменной.

Преобразование имен происходит с помощью вызова утилиты snmptranslate, так что можно проверить наличие MIB вручную с помощью команды.

Параметр oid_prefix в описании устройства позволяет опустить имя MIB (префикс: SNMPv2-MIB::sysName.0). В этом случае префикс из oid_prefix будет автоматически присоединён ко всем OID каналам устройства, где он явно не указан. Например, при oid_prefix равном SNMPv2-MIB:

  • sysName.0 → SNMPv2-MIB::sysName.0
  • sysLocation.0 → SNMPv2-MIB::sysLocation.0
  • HOST-RESOURCES-MIB::hrSystemUptime.0 → HOST-RESOURCES-MIB::hrSystemUptime.0
  • .1.3.6.1.2.1.1.6.0 → .1.3.6.1.2.1.1.6.0

Установка MIB

Если у вас есть нужный MIB-файл, то достаточно скопировать его в директорию /root/.snmp/mibs:

# cp your-mibs-file.mib /root/.snmp/mibs

Если на контроллере нет директории /root/.snmp/mibs — создайте ее:

# mkdir -p /root/.snmp/mibs

После копирования MIB-файла проверьте правильность преобразования snmptranslate с каким-либо известным OID.

Проверка работы преобразования

Для проверки введите команду, где yourOid — известный вам OID:

# snmptranslate -On yourOid

Шаблоны

Для описания устройств не обязательно, но удобно использовать шаблоны.

Шаблон (тип устройства) — это внешний конфигурационный файл с именем config-[device-type-name].json, который располагается в /usr/share/wb-mqtt-snmp/templates. Например, /usr/share/wb-mqtt-snmp/templates/config-test-snmp.json. В файле шаблона содержится описание устройства: имя сообщества SNMP и базовое описание всех его каналов.

Для использования шаблона в описании устройства в конфигурационном файле укажите поле device_type. Среди всех представленных шаблонов будет выбран тот, где такое же значение device_type и все неопределенные в конфигурационном файле поля примут значения из шаблона.

Точно так же это работает с каналами. Сравнение каналов происходит по обязательному полю name: если имя канала из конфигурационного файла совпадёт с именем канала в шаблоне, из шаблона будут взяты все неопределенные значения.

Пример

Шаблон config-my-device.json:

{
    "device_type": "my-device",
    "community": "public",
    "channels": [
        {
            "name": "Channel 1",
            "oid": ".1.2.3.4.1"
        },
        {
            "name": "Channel 2",
            "oid": ".1.2.3.4.2",
            "poll_interval": 3000
        }
    ]
}

Конфигурационный файл:

{
    "devices": [
        {
            "name": "Device 1",
            "device_type": "my-device",
            "address": "192.168.0.5",
            "snmp_timeout": 1
        },
        {
            "name": "Device 2",
            "device_type": "my-device",
            "address": "my-device.example.org",
            "snmp_timeout": 5,
            "channels": [
                {
                    "name": "Channel 2",
                    "poll_interval": 10000
                }
            ]
        }
    ]
}

В примере мы описали один шаблон my-device, по которому определили два разных устройства Device 1 и Device 2 с одинаковым набором каналов.

Поскольку Device 1 находится в локальной сети, то логично выставить ему небольшое значение таймаута — это позволит быстрее определить неисправность устройства. Все остальные настройки берутся из шаблона.

Device 2 — удалённый сервер, потому для него стоит увеличить таймаут, чтобы не считать устройство неисправным при задержке пакета. Более того, для канала Channel 2 здесь мы переопределяем интервал опроса на больший — это снизит нагрузку на сеть.

Таким образом, шаблоны удобно использовать для описания группы однотипных устройств.

Список шаблонов

В поставке wb-mqtt-snmp прилагается набор шаблонов для типовых устройств:

Устройство Имя шаблона Протестировано Комментарии
Тестовый сервер Net-SNMP test-snmp Да адрес тестового сервера test.net-snmp.org
APC UPS apc-ups Нет
  • Требуется локально установленный PowerNet-MIB
  • Описание устройства такое же, как в wb-mqtt-apcsnmp