Решаем проблему «Cannot find module (SNMPv2-MIB)» при старте zabbix-server

На одном из серверов стоит zabbix-server v3.4 (на 4.0 так же актуально), при старте в лог /var/log/zabbix/zabbix_server.log выводится огромная простыня надписей вида:

...
Cannot find module (SNMPv2-MIB): At line 2 in (none)
Cannot find module (IF-MIB): At line 2 in (none)
Cannot find module (IP-MIB): At line 2 in (none)
Cannot find module (TCP-MIB): At line 2 in (none)
Cannot find module (UDP-MIB): At line 2 in (none)
...

Давайте исправим это.

Исходные данные: Сервер с Debian 9 и zabbix-server 4.0.1
Задача: Исправить ошибки Cannot find module (SNMPv2-MIB).

Смысл ошибки в том, что при запуске zabbix-server ищет скомпилированные MIB в каталоге /usr/share/snmp/mibs и некоторых других и не может найти, т.к. их там попросту нет. На общую работу zabbix-server эти ошибки никак не влияют, но если Вы используете в Zabbix мониторинг устройств по протоколу SNMP, то не имея нужных MIB-файлов zabbix-server не сможет использовать человеко-читаемые OID.
Так же не имея базы MIB’ов Вы не сможете использовать человеко-читаемые OID в утилите snmpwalk.

Давайте установим программу, которая скачает и скомпилирует все нужные нам MIB-файлы.

Для Debian пакет называется snmp-mibs-downloader и находится в non-free репозитарии.

Добавим non-free репозитарии в файл /etc/apt/sources.list

Мой файл /etc/apt/sources.list до изменения:

deb http://mirror.yandex.ru/debian/ stretch main
deb-src http://mirror.yandex.ru/debian/ stretch main
deb http://security.debian.org/debian-security stretch/updates main
deb-src http://security.debian.org/debian-security stretch/updates main
deb http://mirror.yandex.ru/debian/ stretch-updates main
deb-src http://mirror.yandex.ru/debian/ stretch-updates main

После:

deb http://mirror.yandex.ru/debian/ stretch main non-free
deb-src http://mirror.yandex.ru/debian/ stretch main non-free
deb http://security.debian.org/debian-security stretch/updates main non-free
deb-src http://security.debian.org/debian-security stretch/updates main non-free
deb http://mirror.yandex.ru/debian/ stretch-updates main non-free
deb-src http://mirror.yandex.ru/debian/ stretch-updates main non-free

По сути мы добавили non-free после слова main.

Выполним обновление базы пакетов:

apt-get update

Установим snmp-mibs-downloader:

apt-get install snmp-mibs-downloader

В процессе установки будет сразу запущена на утилита download-mibs, которая распакует, скомпилирует и разложит по нужным папкам MIB-файлы.

Теперь мы можем перезапустить zabbix-server и посмотреть лог, все ошибки вида «Cannot find module (SNMPv2-MIB)» там больше не появятся.

Дополнительно (нужно выполнить только если Вы используете в zabbix мониторинг по SNMP или используете утилиты snmpwalk и т.п. из пакета snmp):

Для того, чтобы утилита snmpwalk так же могла использовать нашу готовую базу MIB-файлов нужно ей указать какие MIB’ы подгружать.

Посмотрим текущее дерево MIB’оф:

snmptranslate -Tp

Результат:

+--iso(1)

То есть утилита snmpwalk и другие из пакета snmp ничего не знают о наших MIB’ах.
Причина кроется в строке mib: в файле /etc/snmp/snmp.conf, эту строку нужно просто закомментировать, например так:

sed -i "s/^\(mibs *:\).*/#\1/" /etc/snmp/snmp.conf

После этого, если на сервере есть запущенный демон snmpd, то нужно его перезапустить:

systemctl restart snmpd

Теперь при вызове snmptranslate мы увидим все дерево MIB’ов, примерно такое:

# snmptranslate -Tp
+--iso(1)
   |
   +--org(3)
      |
      +--dod(6)
         |
         +--internet(1)
            |
            +--directory(1)
            |
            +--mgmt(2)
            |  |
            |  +--mib-2(1)
            |     |
            |     +--system(1)
            |     |  |
            |     |  +-- -R-- String    sysDescr(1)
            |     |  |        Textual Convention: DisplayString
            |     |  |        Size: 0..255
            |     |  +-- -R-- ObjID     sysObjectID(2)
            |     |  +-- -R-- TimeTicks sysUpTime(3)
            |     |  |  |
            |     |  |  +--sysUpTimeInstance(0)
            |     |  |
            |     |  +-- -RW- String    sysContact(4)
            |     |  |        Textual Convention: DisplayString
            |     |  |        Size: 0..255
            |     |  +-- -RW- String    sysName(5)
            |     |  |        Textual Convention: DisplayString
            |     |  |        Size: 0..255

На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.


Хотите оставить комментарий?