Перейти к содержанию

Использование шаблонов для Zabbix на основе MIB-файлов SpaceVM

Установка ZABBIX

Загрузка и установка Zabbix для Kubuntu 22.04.1.

Требуемые компоненты

  • Zabbix версия: 6.0.
  • Дистрибутив ОС Linux: Kubuntu.
  • Версия ОС: 22.04.1.
  • Компоненты Zabbix: Server, Frontend, Agent.
  • База данных: PostgreSQL.
  • Веб-сервер: Nginx.

Этапы установки

  1. Добавление репозитория и установка компонентов Zabbix:
    Zabbix Server, Frontend, Agent.

  2. Создание начальной базы данных.
    Необходимо убедиться, что база данных PostgreSQL установлена и запущена.
    Рекомендуется выполнять команды PostgreSQL из каталога /tmp.

  3. Импорт схемы базы данных и начальных данных в PostgreSQL.

  4. Настройка базы данных для сервера.

  5. Конфигурация параметров PHP для работы frontend.

  6. Запуск процессов Zabbix Server и Zabbix Agent.


Загрузка и проверка базы управляющей информации MIB SNMP для SpaceVM

Необходимо выполнить следующие шаги:

  1. Проверка с помощью MIB-браузера.
  2. Установка java-jre (java-sdk).
  3. Загрузка в MIB-браузер.
Пример

image

MIB файлы и шаблоны для Zabbix можно скачать по ссылке.


Создание шаблонов Zabbix из MIB

MIB файлы могут быть проанализированы и конвертированы в шаблоны, содержащие элементы данных, правила обнаружения и типы данных.

  1. Необходимо загрузить скрипт, доступный по ссылке.

  2. Установить и сконфигурировать пакеты командой:

    apt install snmp snmp-mibs-downloader
    
  3. Отредактировать /etc/snmp/snmp.conf

    Пример
    mibs :
    mibdirs /root/.snmp/mibs:/usr/share/snmp/mibs:/usr/share/snmp/mibs/iana:/usr/share/snmp/mibs/ietf:/usr/share/snmp/mibs/spacevm:
    mibs +DACOM-SPACEVM-ENV-MIB
    mibs +DACOM-SPACEVM-HADR-MIB
    mibs +DACOM-SPACEVM-RESOURCES-MIB
    mibs +DACOM-SPACEVM-ROOT-MIB
    mibs +DACOM-SPACEVM-SYSTEM-MIB
    mibs +DACOM-SPACEVM-VMINFO-MIB
    
  4. Загрузить и распаковать базу управляющей информации MIB SNMP для SpaceVM в каталог /usr/share/snmp/mibs/spacevm (или /root/.snmp/mibs).

  5. Выполнить тест командой snmptranslate 1.3.6.1.4.1.51290.

    Ожидаемый ответ: "DACOM-SPACEVM-ROOT-MIB::spacevm".

    snmptranslate готов транслировать MIB OID между числовым и текстовым представлением.

  6. Для корректной работы необходимо установить зависимости для скрипта:

    apt install perl libxml-simple-perl libsnmp-perl
    
  7. Загрузить скрипт:

    wget -O mib2zabbix https://raw.githubusercontent.com/cavaliercoder/mib2zabbix/master/mib2zabbix.pl
    
  8. Настроить права на исполнение:

    chmod a+x mib2zabbix
    
  9. Протестировать скрипт:

    ./mib2zabbix -h
    
    Ожидаемый вывод
    Usage:
        mib2zabbix.pl -o <OID> [OPTIONS]...
        Export loaded SNMP MIB OIDs to Zabbix Template XML
    
            -f, --filename=PATH         output filename (default: stdout)
    
            -N, --name=STRING           template name (default: OID label)
            -G, --group=STRING          template group (default: 'Templates')
            -e, --enable-items          enable all template items (default: disabled)
    
            -o, --oid=STRING            OID tree root to export
    
            -v, --snmpver=1|2|3         SNMP version (default: 2)
            -p, --port=PORT             SNMP UDP port number (default: 161)
    
        SNMP Version 1 or 2c specific
    
            -c, --community=STRING      SNMP community string (default: 'public')
    
        SNMP Version 3 specific
    
            -L, --level=LEVEL           security level (noAuthNoPriv|authNoPriv|authPriv)
            -n, --context=CONTEXT       context name
            -u, --username=USERNAME     security name
            -a, --auth=PROTOCOL         authentication protocol (MD5|SHA)
            -A, --authpass=PASSPHRASE   authentication protocol passphrase
            -x, --privacy=PROTOCOL      privacy protocol (DES|AES)
            -X, --privpass=PASSPHRASE   privacy passphrase
    
        Zabbix item configuration
    
            --check-delay=SECONDS       check interval in seconds (default: 60)
            --disc-delay=SECONDS        discovery interval in seconds (default: 3600)
            --history=DAYS              history retention in days (default: 7)
            --trends=DAYS               trends retention in days (default: 365)
    
            -h, --help                  print this message
    
    Пример использования скрипта
    ./mib2zabbix -f spacevm.xml -o .1.3.6.1.4.1.51290 -N SPACEVM -e --check-delay=60
    

    При выполнении данной команды будет создан файл с именем spacevm.xml. Имя шаблона SPACEVM. Все элементы данных будут иметь статус Enabled. Интервал проверки по умолчанию установлен в 60 сек. Типы данных Integer32 преобразуются в Numeric (Float).


Импорт шаблонов SpaceVM в Zabbix

  1. Для импорта необходимо перейти во вкладку Configuration -> Template -> Import -> Choose File.
  2. Выбрать xml-файл и нажать на «Import».

xml-файл для Zabbix находится в том же архиве, что и MIB файлы. Архив можно скачать по ссылке.

После выполнения данных действий будет создан шаблон с именем, указанным опцией -N.

Примеры

image

image

image

image


Присоединение шаблонов к хосту

  1. Для присоединения шаблонов необходимо перейти во вкладку Configuration -> Hosts -> HOST -> Templates -> Select ->SpaceVM.
  2. Выбрать шаблон SpaceVM.

image

Все элементы данных имеют статус Enabled.


Создание графиков и триггеров

  1. Для создания графиков необходимо перейти во вкладку Configuration -> Hosts -> HOST -> Graphs ->Create graph или Configuration ->Templates -> TEMPLATE -> Graphs ->Create graph.
  2. Для создания триггеров необходимо перейти во вкладку Configuration -> Hosts -> HOST -> Triggers ->Create Trigger.

Графики и триггеры создаются штатными средствами Zabbix.


Исправление типов данных в MIB

База управляющей информации MIB SNMP SpaceVM содержит описание объектов, по которым могут быть построены графики и созданы триггеры. Для этих объектов должен быть определен числовой тип Unsigned32 или Integer32.

Примечание

Объекты с типом DisplayString не пригодны для построения графиков и триггеров.

Графическое дерево MIB SpaceVM, можно получить с помощью команды:

snmptranslate -Tp .1.3.6.1.4.1.51290

Дерево объектов MIB SPACEVM
+--spacevm(51290)
   +--spacevmSystemObjects(10)
   |  +--spacevmSystemMIB(1)
   |     |
   |     +--spacevmSystemScalarObjects(1)
   |     |  |
   |     |  +-- -R-- String    spacevmSystemEnv(1)
   |     |  |        Textual Convention: DisplayString
   |     |  |        Size: 0..255
   |     |  +-- -R-- String    spacevmSystemRole(2)
   |     |  |        Textual Convention: DisplayString
   |     |  |        Size: 0..255
   |     |  +-- -R-- String    spacevmSystemBaseVersion(3)
   |     |           Textual Convention: DisplayString
   |     |           Size: 0..255
   |     |
   |     +--spacevmSystemTableObjects(2)
   |        |
   |        +-- -RW- Unsigned  spacevmSystemProductVersionsCount(1)
   |        |
   |        +--spacevmSystemProductVersionsTable(2)
   |           |
   |           +--spacevmSystemProductVersionsEntry(1)
   |              |  Index: spacevmSystemProductIdx
   |              |
   |              +-- ---- String    spacevmSystemProductIdx(1)
   |              |        Textual Convention: DisplayString
   |              |        Size: 0..255
   |              +-- -R-- String    spacevmSystemProductLabel(2)
   |              |        Textual Convention: DisplayString
   |              |        Size: 0..255
   |              +-- -R-- String    spacevmSystemProductVersion(3)
   |                       Textual Convention: DisplayString
   |                       Size: 0..255
   |
   +--spacevmResourcesObjects(20)
   |  +--spacevmResourcesMIB(1)
   |     +--spacevmResourcesCPU(1)
   |     |  +-- -R-- Integer32 spacevmResourcesCPUUsed(1)
   |     |  +-- -RW- Unsigned  spacevmResourcesCPUProcUsedCount(2)
   |     |  |
   |     |  +--spacevmResourcesCPUProcUsedTable(3)
   |     |     |
   |     |     +--spacevmResourcesCPUProcUsedEntry(1)
   |     |        |  Index: spacevmResourcesCPUIdx
   |     |        |
   |     |        +-- ---- String    spacevmResourcesCPUIdx(1)
   |     |        |        Textual Convention: DisplayString
   |     |        |        Size: 0..255
   |     |        +-- -R-- String    spacevmResourcesCPULabel(2)
   |     |        |        Textual Convention: DisplayString
   |     |        |        Size: 0..255
   |     |        +-- -R-- Integer32 spacevmResourcesCPUUsage(3)
   |     |
   |     +--spacevmResourcesMemory(2)
   |     |  +-- -R-- Integer32 spacevmResourcesMemCount(1)
   |     |  +-- -R-- Integer32 spacevmResourcesMemFree(2)
   |     |  +-- -R-- Integer32 spacevmResourcesMemUsed(3)
   |     |
   |     +--spacevmResourcesDisks(3)
   |     |  +-- -RW- Unsigned  spacevmResourcesDisksCount(1)
   |     |  |
   |     |  +--spacevmResourcesDisksTable(2)
   |     |     |
   |     |     +--spacevmResourcesDisksEntry(1)
   |     |        |  Index: spacevmResourcesDiskIdx
   |     |        |
   |     |        +-- ---- String    spacevmResourcesDiskIdx(1)
   |     |        |        Textual Convention: DisplayString
   |     |        |        Size: 0..255
   |     |        +-- -R-- String    spacevmResourcesDiskLabel(2)
   |     |        |        Textual Convention: DisplayString
   |     |        |        Size: 0..255
   |     |        +-- -R-- Integer32 spacevmResourcesDiskReadRate(3)
   |     |        +-- -R-- Integer32 spacevmResourcesDiskWriteRate(4)
   |     |
   |     +--spacevmResourcesNetwork(4)
   |     |  +-- -RW- Unsigned  spacevmResourcesNetCount(1)
   |     |  |
   |     |  +--spacevmResourcesNetTable(2)
   |     |     |
   |     |     +--spacevmResourcesNetEntry(1)
   |     |        |  Index: spacevmResourcesNetIdx
   |     |        |
   |     |        +-- ---- String    spacevmResourcesNetIdx(1)
   |     |        |        Textual Convention: DisplayString
   |     |        |        Size: 0..255
   |     |        +-- -R-- String    spacevmResourcesNetLabel(2)
   |     |        |        Textual Convention: DisplayString
   |     |        |        Size: 0..255
   |     |        +-- -R-- Integer32 spacevmResourcesNetReceiveRate(3)
   |     |        +-- -R-- Integer32 spacevmResourcesNetTransmitRate(4)
   |     |
   |     +--spacevmResourcesCluster(5)
   |        +-- -RW- Unsigned  spacevmResourcesClusterCount(1)
   |        |
   |        +--spacevmResourcesClusterTable(2)
   |           |
   |           +--spacevmResourcesClusterEntry(1)
   |              |  Index: spacevmResourcesClusterIdx
   |              |
   |              +-- ---- String    spacevmResourcesClusterIdx(1)
   |              |        Textual Convention: DisplayString
   |              |        Size: 0..255
   |              +-- -R-- String    spacevmResourcesClusterUuid(2)
   |              |        Textual Convention: DisplayString
   |              |        Size: 0..255
   |              +-- -R-- Integer32 spacevmResourcesClusterMemCount(3)
   |              +-- -R-- Integer32 spacevmResourcesClusterMemUsed(4)
   |              +-- -R-- Integer32 spacevmResourcesClusterMemUsedP(5)
   |              +-- -R-- Integer32 spacevmResourcesClusterMemFree(6)
   |              +-- -R-- Integer32 spacevmResourcesClusterCPUUsed(7)
   |              +-- -R-- Unsigned  spacevmResourcesClusterCPUCount(8)
   |              +-- -R-- Unsigned  spacevmResourcesClusterCPUHiLevel(9)
   |              +-- -R-- Unsigned  spacevmResourcesClusterCPUHhLevel(10)
   |              +-- -R-- Unsigned  spacevmResourcesClusterMEMHiLevel(11)
   |              +-- -R-- Unsigned  spacevmResourcesClusterMEMHhLevel(12)
   |
   +--spacevmEnvObjects(30)
   |  +--spacevmEnvMIB(1)
   |     |
   |     +--spacevmEnvTableObjects(1)
   |        |
   |        +-- -RW- Unsigned  spacevmEnvIPMICount(1)
   |        |
   |        +--spacevmEnvIPMITable(2)
   |        |  |
   |        |  +--spacevmEnvIPMIEntry(1)
   |        |     |  Index: spacevmEnvIPMIIdx
   |        |     |
   |        |     +-- ---- String    spacevmEnvIPMIIdx(1)
   |        |     |        Textual Convention: DisplayString
   |        |     |        Size: 0..255
   |        |     +-- -R-- String    spacevmEnvIPMIName(2)
   |        |     |        Textual Convention: DisplayString
   |        |     |        Size: 0..255
   |        |     +-- -R-- String    spacevmEnvIPMIStatus(3)
   |        |              Textual Convention: DisplayString
   |        |              Size: 0..255
   |        |
   |        +-- -RW- Unsigned  spacevmEnvHDDCount(3)
   |        |
   |        +--spacevmEnvHDDTable(4)
   |           |
   |           +--spacevmEnvHDDEntry(1)
   |              |  Index: spacevmEnvHDDIdx
   |              |
   |              +-- ---- String    spacevmEnvHDDIdx(1)
   |              |        Textual Convention: DisplayString
   |              |        Size: 0..255
   |              +-- -R-- String    spacevmEnvHDDName(2)
   |              |        Textual Convention: DisplayString
   |              |        Size: 0..255
   |              +-- -R-- String    spacevmEnvHDDStatus(3)
   |                       Textual Convention: DisplayString
   |                       Size: 0..255
   |
   +--spacevmVmInfoObjects(40)
   |  +--spacevmVmInfoMIB(1)
   |     |
   |     +--spacevmVmTableObjects(1)
   |        |
   |        +-- -RW- Unsigned  spacevmVmCount(1)
   |        |
   |        +--spacevmVmTable(2)
   |        |  |
   |        |  +--spacevmVmEntry(1)
   |        |     |  Index: spacevmVmIdx
   |        |     |
   |        |     +-- ---- String    spacevmVmIdx(1)
   |        |     |        Textual Convention: DisplayString
   |        |     |        Size: 0..255
   |        |     +-- -R-- String    spacevmVmUuid(2)
   |        |     |        Textual Convention: DisplayString
   |        |     |        Size: 0..255
   |        |     +-- -R-- String    spacevmVmStatus(3)
   |        |              Textual Convention: DisplayString
   |        |              Size: 0..255
   |        |
   |        +-- -RW- Unsigned  spacevmVmAggCount(3)
   |        |
   |        +--spacevmVmAggTable(4)
   |           |
   |           +--spacevmVmAggEntry(1)
   |              |  Index: spacevmVmAggIdx
   |              |
   |              +-- ---- String    spacevmVmAggIdx(1)
   |              |        Textual Convention: DisplayString
   |              |        Size: 0..255
   |              +-- -R-- String    spacevmVmAggUuid(2)
   |              |        Textual Convention: DisplayString
   |              |        Size: 0..255
   |              +-- -R-- String    spacevmVmAggName(3)
   |              |        Textual Convention: DisplayString
   |              |        Size: 0..255
   |              +-- -R-- String    spacevmVmAggStatus(4)
   |              |        Textual Convention: DisplayString
   |              |        Size: 0..255
   |              +-- -R-- String    spacevmVmAggCpuCount(5)
   |              |        Textual Convention: DisplayString
   |              |        Size: 0..255
   |              +-- -R-- String    spacevmVmAggMemCount(6)
   |              |        Textual Convention: DisplayString
   |              |        Size: 0..255
   |              +-- -R-- String    spacevmVmAggNodeUuid(7)
   |              |        Textual Convention: DisplayString
   |              |        Size: 0..255
   |              +-- -R-- String    spacevmVmAggNodeName(8)
   |              |        Textual Convention: DisplayString
   |              |        Size: 0..255
   |              +-- -R-- String    spacevmVmAggNodeIp(9)
   |              |        Textual Convention: DisplayString
   |              |        Size: 0..255
   |              +-- -R-- String    spacevmVmAggPowerState(10)
   |              |        Textual Convention: DisplayString
   |              |        Size: 0..255
   |              +-- -R-- String    spacevmVmAggUptime(11)
   |                       Textual Convention: DisplayString
   |                       Size: 0..255
   |
   +--spacevmHADRObjects(50)
      +--spacevmHADRMIB(1)
         |
         +--spacevmHADRTableObjects(1)
            |
            +-- -RW- Unsigned  spacevmHAVmCount(1)
            |
            +--spacevmHAVmTable(2)
            |  |
            |  +--spacevmHAVmEntry(1)
            |     |  Index: spacevmHAVmIdx
            |     |
            |     +-- ---- String    spacevmHAVmIdx(1)
            |     |        Textual Convention: DisplayString
            |     |        Size: 0..255
            |     +-- -R-- String    spacevmHAVmUuid(2)
            |     |        Textual Convention: DisplayString
            |     |        Size: 0..255
            |     +-- -R-- String    spacevmHAVmName(3)
            |     |        Textual Convention: DisplayString
            |     |        Size: 0..255
            |     +-- -R-- String    spacevmHAVmStatus(4)
            |     |        Textual Convention: DisplayString
            |     |        Size: 0..255
            |     +-- -R-- String    spacevmHAVmHaStatus(5)
            |     |        Textual Convention: DisplayString
            |     |        Size: 0..255
            |     +-- -R-- String    spacevmHAVmNodeUuid(6)
            |     |        Textual Convention: DisplayString
            |     |        Size: 0..255
            |     +-- -R-- String    spacevmHAVmNodeName(7)
            |     |        Textual Convention: DisplayString
            |     |        Size: 0..255
            |     +-- -R-- String    spacevmHAVmNodeIp(8)
            |     |        Textual Convention: DisplayString
            |     |        Size: 0..255
            |     +-- -R-- String    spacevmHAVmMigrated(9)
            |              Textual Convention: DisplayString
            |              Size: 0..255
            |
            +-- -RW- Unsigned  spacevmHAVmNodesCount(3)
            |
            +--spacevmHAVmNodesTable(4)
            |  |
            |  +--spacevmHAVmNodesEntry(1)
            |     |  Index: spacevmHAVmIdx, spacevmHAVmNodesIdx
            |     |
            |     +-- ---- String    spacevmHAVmNodesIdx(1)
            |     |        Textual Convention: DisplayString
            |     |        Size: 0..255
            |     +-- -R-- String    spacevmHAVmNodesUuid(2)
            |     |        Textual Convention: DisplayString
            |     |        Size: 0..255
            |     +-- -R-- String    spacevmHAVmNodesName(3)
            |     |        Textual Convention: DisplayString
            |     |        Size: 0..255
            |     +-- -R-- String    spacevmHAVmNodesIp(4)
            |     |        Textual Convention: DisplayString
            |     |        Size: 0..255
            |     +-- -R-- String    spacevmHAVmNodesStatus(5)
            |     |        Textual Convention: DisplayString
            |     |        Size: 0..255
            |     +-- -R-- String    spacevmHAVmNodesClusterUuid(6)
            |              Textual Convention: DisplayString
            |              Size: 0..255
            |
            +-- -RW- Unsigned  spacevmHAClusterCount(5)
            |
            +--spacevmHAClusterTable(6)
            |  |
            |  +--spacevmHAClusterEntry(1)
            |     |  Index: spacevmHAClusterIdx
            |     |
            |     +-- ---- String    spacevmHAClusterIdx(1)
            |     |        Textual Convention: DisplayString
            |     |        Size: 0..255
            |     +-- -R-- String    spacevmHAClusterUuid(2)
            |     |        Textual Convention: DisplayString
            |     |        Size: 0..255
            |     +-- -R-- String    spacevmHAClusterName(3)
            |     |        Textual Convention: DisplayString
            |     |        Size: 0..255
            |     +-- -R-- String    spacevmHAClusterHaStatus(4)
            |              Textual Convention: DisplayString
            |              Size: 0..255
            |
            +-- -RW- Unsigned  spacevmHAClusterNodesCount(7)
            |
            +--spacevmHAClusterNodesTable(8)
               |
               +--spacevmHAClusterNodesEntry(1)
                  |  Index: spacevmHAClusterIdx, spacevmHAClusterNodesIdx
                  |
                  +-- ---- String    spacevmHAClusterNodesIdx(1)
                  |        Textual Convention: DisplayString
                  |        Size: 0..255
                  +-- -R-- String    spacevmHAClusterNodesUuid(2)
                  |        Textual Convention: DisplayString
                  |        Size: 0..255
                  +-- -R-- String    spacevmHAClusterNodesName(3)
                  |        Textual Convention: DisplayString
                  |        Size: 0..255
                  +-- -R-- String    spacevmHAClusterNodesIp(4)
                  |        Textual Convention: DisplayString
                  |        Size: 0..255
                  +-- -R-- String    spacevmHAClusterNodesStatus(5)
                  |        Textual Convention: DisplayString
                  |        Size: 0..255
                  +-- -R-- String    spacevmHAClusterNodesClusterUuid(6)
                           Textual Convention: DisplayString
                           Size: 0..255

Необходимо учитывать, что Unsigned преобразуется в Numeric (Unsigned), Integer преобразуется в Numeric (Float).

snmpwalk -v1 -c public 192.168.145.10 1.3.6.1.4.1.51290

Утилита snmpwalk выводит предупреждение о том, что типы данных не совпадают, например:

DACOM-SPACEVM-RESOURCES-MIB::spacevmResourcesMemCount.0 = Wrong Type (should be IN
TEGER): STRING: "385620.5703125"

DACOM-SPACEVM-RESOURCES-MIB::spacevmResourcesMemFree.0 = Wrong Type (should be INT
EGER): STRING: "285185.12109375"

DACOM-SPACEVM-RESOURCES-MIB::spacevmResourcesMemUsed.0 = Wrong Type (should be INT
EGER): STRING: "63855.69140625"

Для корректной работы требуется соответствие типов данных OID и snmp-agent.