NetXMS Support Forum

Russian Support => Общие вопросы => Topic started by: andrey--k on February 17, 2014, 03:45:21 PM

Title: netxms snmp table
Post by: andrey--k on February 17, 2014, 03:45:21 PM
Я хочу вытягивать с ряда хостов таблицу с установленным софтом...
(.1.3.6.1.2.1.25.6.3.1)
Уже перепробовал пару десятков вариантов параметров. Не могу понять где ошибка...
Скриншоты:
https://drive.google.com/file/d/0B0SS9KVzB6egRmR5bXI0LVZoMlk/edit?usp=sharing
https://drive.google.com/file/d/0B0SS9KVzB6egMkFEcG1lX3d0QlU/edit?usp=sharing
Можете дать пример рабочей настройки любой snmp table?
Title: Re: netxms snmp table
Post by: Victor Kirhenshtein on February 17, 2014, 04:41:58 PM
А как выглядит результат snmpwalk по этой ветке?
Title: Re: netxms snmp table
Post by: andrey--k on February 17, 2014, 05:05:47 PM
См аттач
Title: Re: netxms snmp table
Post by: Victor Kirhenshtein on February 17, 2014, 05:16:29 PM
Надо в качестве имени параметра на закладке "General" указать .1.3.6.1.2.1.25.6.3.1.1 - тогда сервер получит правильные индексы для OID'ов в колонках.
Title: Re: netxms snmp table
Post by: andrey--k on February 17, 2014, 05:55:59 PM
Спасибо!
Заработало!

А коррекцию значений можно как-то из mib подтягивать или на каждый случай надо отдельный скрипт писать?
А то вместо времени hex выводит :(
Title: Re: netxms snmp table
Post by: Victor Kirhenshtein on February 17, 2014, 06:33:37 PM
Я посмотрел MIB - там не используется какой-то стандартный формат:

A date-time specification.

            field  octets  contents                  range
            -----  ------  --------                  -----
              1      1-2   year*                     0..65536
              2       3    month                     1..12
              3       4    day                       1..31
              4       5    hour                      0..23
              5       6    minutes                   0..59
              6       7    seconds                   0..60
                           (use 60 for leap-second)
              7       8    deci-seconds              0..9
              8       9    direction from UTC        '+' / '-'
              9      10    hours from UTC*           0..13
             10      11    minutes from UTC          0..59

            * Notes:
            - the value of year is in network-byte order
            - daylight saving time in New Zealand is +13

Так что надо будет писать transformation script на эту колонку.
Title: Re: netxms snmp table
Post by: andrey--k on February 24, 2014, 10:37:02 AM
не смог найти образца скрипта для парсинга/исправления значений для snmp table.
Подскажите, как делать отдельные скрипты для разных колонок.

Обнаружил нехорошую бяку в таблицах...
Вместо кириллицы (OID .1.3.6.1.2.1.25.6.3.1.2) - знаки вопроса.
Вместо строки с хексом (OID .1.3.6.1.2.1.25.6.3.1.5) - те же самые знаки вопроса :(

Можно ли заставить netxms писать в БД raw значения прибывшие по snmp?

see attach
Title: Re: netxms snmp table
Post by: Victor Kirhenshtein on February 24, 2014, 11:14:52 AM
Насчет русских букв - а в какой кодировке они по SNMP приходят? Я бы рекомендовал использовать UNICODE сборку сервера и поставить CodePage в netxmsd.conf в кодировку, используемую в SNMP.
Title: Re: netxms snmp table
Post by: andrey--k on February 24, 2014, 11:20:54 AM
Кодировки зависят от локали ПК... 1251, 1252, 886.
Установка кодировки в какую-то определенную даст только частичный результат :(

Хотелось бы все же иметь raw ответы... Там хоть конвертацию по словарю наладить можно...
Title: Re: netxms snmp table
Post by: andrey--k on February 24, 2014, 04:51:15 PM
Quote from: Victor Kirhenshtein on February 24, 2014, 11:14:52 AM
Насчет русских букв - а в какой кодировке они по SNMP приходят? Я бы рекомендовал использовать UNICODE сборку сервера и поставить CodePage в netxmsd.conf в кодировку, используемую в SNMP.
Какие варианты кодировок?
Я попробовал windows-1251 и cp1251.
Эфекта нет  :(
Title: Re: netxms snmp table
Post by: andrey--k on February 25, 2014, 10:17:00 AM
Quote from: andrey--k on February 24, 2014, 04:51:15 PM
Quote from: Victor Kirhenshtein on February 24, 2014, 11:14:52 AM
Насчет русских букв - а в какой кодировке они по SNMP приходят? Я бы рекомендовал использовать UNICODE сборку сервера и поставить CodePage в netxmsd.conf в кодировку, используемую в SNMP.
Какие варианты кодировок?
Я попробовал windows-1251 и cp1251.
Нашел на форуме рекомендацию поставить CP1251.
Поставил, перезапустил сервис.
Удалил и повторно добавил подопытную ноду.
Результат отсутствует.
/etc/netxmsd.conf

...
CodePage=CP1251
...
Title: Re: netxms snmp table
Post by: andrey--k on February 26, 2014, 11:42:44 PM
Можно ли заставить программу собирать расшифрованые при помощи mib файлов значения, вместо написания скриптов?
Title: Re: netxms snmp table
Post by: Victor Kirhenshtein on February 26, 2014, 11:49:00 PM
Quote from: andrey--k on February 26, 2014, 11:42:44 PM
Можно ли заставить программу собирать расшифрованые при помощи mib файлов значения, вместо написания скриптов?

А что значит "расшифрованные"? В рассматриваемом случае например формат поля описан в виде текстового комментария, а формально его формат OCTET STRING - система его и принимает как последовательность байтов. А по описанию на английском языке правильно разбирать поле - это уже ИИ нужен...
Title: Re: netxms snmp table
Post by: andrey--k on February 26, 2014, 11:54:39 PM
Часть полей указаны в mib как integer/unsigned/etc... С ними все сложно.
А вот по строкам... Та же строка даты/времени приходит в уже "красивом" виде из snmpwalk используя mib файл.
Да и еще много "подставных" строковых значений тоже...
Title: Re: netxms snmp table
Post by: andrey--k on February 27, 2014, 12:14:02 AM
Quote from: Victor Kirhenshtein on February 26, 2014, 11:49:00 PM
А по описанию на английском языке правильно разбирать поле - это уже ИИ нужен...
snmpget и snmpwalk ведь делают это без всякого ИИ на основании инструкций в MIB файле...
В данном случае snmpwalk при включенном mib файле выдает всего 2 варианта, причем они указаны в выводе:

.1.3.6.1.2.1.25.6.3.1.2.135 [Hex-STRING]: CE E1 ED EE E2 EB E5 ED E8 E5 20 E1 E5 E7 EE EF E0 F1 ED EE F1 F2 E8 20 E4 EB FF 20 57 69 6E 64 6F 77 73 20 58 50 20 28 4B 42 39 38 32 36 36 35 29
.1.3.6.1.2.1.25.6.3.1.2.136 [STRING]: Oracle VM VirtualBox Guest Additions 4.3.6

Для подавляющего большинства веток SNMP - типы указанны коректно...

[INTEGER]
[COUNTER32]
[COUNTER64]

Да и типов этих 10-15 да и закончились...
Title: Re: netxms snmp table
Post by: Victor Kirhenshtein on February 27, 2014, 12:23:51 AM
А как показывает даты из .1.3.6.1.2.1.25.6.3.1 snmpwalk?
Title: Re: netxms snmp table
Post by: andrey--k on February 27, 2014, 12:26:05 AM

HOST-RESOURCES-MIB::hrSWInstalledDate.9 = STRING: 2014-1-20,19:1:46.0
HOST-RESOURCES-MIB::hrSWInstalledDate.10 = STRING: 2014-1-20,19:1:46.0
HOST-RESOURCES-MIB::hrSWInstalledDate.11 = STRING: 2014-1-20,19:1:46.0
HOST-RESOURCES-MIB::hrSWInstalledDate.12 = STRING: 2014-1-20,19:1:46.0
HOST-RESOURCES-MIB::hrSWInstalledDate.13 = STRING: 2014-1-20,19:1:46.0
HOST-RESOURCES-MIB::hrSWInstalledDate.14 = STRING: 2014-1-20,19:1:46.0
HOST-RESOURCES-MIB::hrSWInstalledDate.15 = STRING: 2014-1-20,19:1:46.0
HOST-RESOURCES-MIB::hrSWInstalledDate.16 = STRING: 2014-1-20,19:1:44.0
HOST-RESOURCES-MIB::hrSWInstalledDate.17 = STRING: 2014-1-20,19:1:46.0
HOST-RESOURCES-MIB::hrSWInstalledDate.18 = STRING: 2014-1-20,19:1:46.0
HOST-RESOURCES-MIB::hrSWInstalledDate.19 = STRING: 2014-1-20,19:1:46.0
Title: Re: netxms snmp table
Post by: andrey--k on February 27, 2014, 12:30:00 AM
А вот замечательный пример "недорасшифрованной строки"

HOST-RESOURCES-MIB::hrDeviceDescr.3 = STRING: Red Hat VirtIO Ethernet Adapter - <CC><E8><ED><E8><EF><EE><F0><F2> <EF><EB>
<E0><ED><E8><F0><EE><E2><F9><E8><EA><E0> <EF><E0><EA><E5><F2><EE><E2>
HOST-RESOURCES-MIB::hrDeviceDescr.4 = STRING: Red Hat VirtIO Ethernet Adapter #2 - <CC><E8><ED><E8><EF><EE><F0><F2> <EF><EB>
<E0><ED><E8><F0><EE><E2><F9><E8><EA><E0> <EF><E0><EA><E5><F2>
Title: Re: netxms snmp table
Post by: Victor Kirhenshtein on February 27, 2014, 12:32:06 AM
Да, действительно, в MIB'е есть описание конвертации:

DateAndTime ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "2d-1d-1d,1d:1d:1d.1d,1a1d:1d"

кто бы мог подумать :) Сейчас наш MIB компилятор поле DISPLAY-HINT игнорирует, я добавлю feature request на это.
Title: Re: netxms snmp table
Post by: andrey--k on February 27, 2014, 12:35:20 AM
По поводу mib-компилятора...
Думаю вам будет интересно взглянуть на mib2c из net-snmp.
Title: Re: netxms snmp table
Post by: andrey--k on March 04, 2014, 11:09:53 PM
Решил задачу через динамические DCI. Там пишет raw (hex) в БД.

Спасибо.
Title: Re: netxms snmp table
Post by: andrey--k on March 05, 2014, 12:08:26 PM
Quote from: andrey--k on March 04, 2014, 11:09:53 PM
Решил задачу через динамические DCI. Там пишет raw (hex) в БД.

Спасибо.
Решение оказалось неудачным.
Сервер начал потреблять очень много ОЗУ.
Буду пробовать реализовать поддержку CP1251.

Подскажите пожалуйста, deb пакеты в последней версии (1.2.12), для Debian Wheezy, скомпилированы с  --enable-UNICODE ?
Title: Re: netxms snmp table
Post by: andrey--k on March 05, 2014, 04:34:01 PM
Приведите пожалуйста пример создания Transformatin script для SNMP-table.
Title: Re: netxms snmp table
Post by: Victor Kirhenshtein on March 05, 2014, 10:42:16 PM
Quote from: andrey--k on March 05, 2014, 12:08:26 PM
Quote from: andrey--k on March 04, 2014, 11:09:53 PM
Решил задачу через динамические DCI. Там пишет raw (hex) в БД.

Спасибо.
Решение оказалось неудачным.
Сервер начал потреблять очень много ОЗУ.
Буду пробовать реализовать поддержку CP1251.

Подскажите пожалуйста, deb пакеты в последней версии (1.2.12), для Debian Wheezy, скомпилированы с  --enable-UNICODE ?

Да, с UNICODE.
Title: Re: netxms snmp table
Post by: Victor Kirhenshtein on March 05, 2014, 11:11:41 PM
Quote from: andrey--k on March 05, 2014, 04:34:01 PM
Приведите пожалуйста пример создания Transformatin script для SNMP-table.

Вот пример скрипта для таблицы - списка процессов на Cisco рутере. Колонку TIME из микросекунд переводим в проценты. В аттаче шаблон с етой таблицей, чтобы можно было посмотреть всю конфигурацию целиком.


ciTime = $1->getColumnIndex("TIME");
for(row = 0; row < $1->rowCount; row++)
{
value = $1->get(row, ciTime);
$1->set(row, ciTime, value * 100 / 1000000);
}

Title: Re: netxms snmp table
Post by: andrey--k on March 06, 2014, 12:19:10 AM
Quote from: Victor Kirhenshtein on March 05, 2014, 10:42:16 PM
Да, с UNICODE.
Переставил чистую виртуалку (Debian 7.4)
Пересобрал с исходников netxms 1.2.12.
конфиг:
./configure --with-server --with-agent --with-all-static --with-mysql --with-snmp --enable-static --enable-unicode --disable-xmpp

В логе при старте:
[06-Mar-2014 00:01:12.720] Log file opened
[06-Mar-2014 00:01:12.720] [DEBUG] Code page set to CP1251


Кирилица все равно не собирается нормально.
:(

Я что-то упускаю, но не могу понять что именно :(
Title: Re: netxms snmp table
Post by: Victor Kirhenshtein on March 06, 2014, 12:25:00 AM
Сервер не надо со статикой собирать, ничего хорошего из этого не выйдет. Правильней будет так:

./configure --with-server --with-mysql --enable-unicode --disable-xmpp

и как выглядит summary после отработки configure?
Title: Re: netxms snmp table
Post by: andrey--k on March 06, 2014, 12:33:04 AM
Quote from: Victor Kirhenshtein on March 06, 2014, 12:25:00 AM
Сервер не надо со статикой собирать, ничего хорошего из этого не выйдет. Правильней будет так:

./configure --with-server --with-mysql --enable-unicode --disable-xmpp

и как выглядит summary после отработки configure?
После моего:
---------------------------------------------------------------------
                         Configure results
---------------------------------------------------------------------

Prefix                  : /usr/local
Platform                : Linux
Shared library suffix   : .so
Build Server            : YES
Server libs             :  -lssl
XMPP support            : NO
Encryption enabled      : YES
Build DB-Drivers        : mysql
Build Clients           : NO
Build Agent             : YES
Subagents list          : linux
Build Static Agent      : NO
UNICODE build           : YES
Use internal libexpat   : YES
Use internal libtre     : YES
Use internal zlib       : NO
Force 32bit build       : NO
C compiler              : gcc
C++ compiler            : g++
CPPFLAGS                :  -D_THREAD_SAFE -DTRE_WCHAR=1 -I/usr/local/mysql/include -I/usr/include/mysql -I/usr/mysql/include -I/usr/local/include/mysql -I/usr/local/mysql/include/mysql -I/usr/mysql/include/mysql -DUNICODE -D_GNU_SOURCE -O2 -Wformat -I/usr/local/include -DPREFIX=L\"${prefix}\" -DDATADIR=L\"${pkgdatadir}\" -DBINDIR=L\"${bindir}\" -DLIBDIR=L\"${libdir}\" -DPKGLIBDIR=L\"${pkglibdir}\"
CXXFLAGS                : -g -O2 -fno-rtti -fno-exceptions
CFLAGS                  : -g -O2
LDFLAGS                 :   -L/usr/local/mysql/lib -L/usr/lib64/mysql -L/usr/lib/mysql -L/usr/mysql/lib -L/usr/local/lib/mysql -L/usr/local/mysql/lib/mysql -L/usr/mysql/lib/mysql -L/usr/local/lib
LIBS                    : -lz -ldl  -lpthread -lcrypto
MySQL libs              : -lmysqlclient

После предложенного Вами варианта
---------------------------------------------------------------------
                         Configure results
---------------------------------------------------------------------

Prefix                  : /usr/local
Platform                : Linux
Shared library suffix   : .so
Build Server            : YES
Server libs             :  -lssl
XMPP support            : NO
Encryption enabled      : YES
Build DB-Drivers        : mysql
Build Clients           : NO
Build Agent             : YES
Subagents list          : linux
Build Static Agent      : NO
UNICODE build           : YES
Use internal libexpat   : YES
Use internal libtre     : YES
Use internal zlib       : NO
Force 32bit build       : NO
C compiler              : gcc
C++ compiler            : g++
CPPFLAGS                :  -D_THREAD_SAFE -DTRE_WCHAR=1 -I/usr/local/mysql/include -I/usr/include/mysql -I/usr/mysql/include -I/usr/local/include/mysql -I/usr/local/mysql/include/mysql -I/usr/mysql/include/mysql -DUNICODE -D_GNU_SOURCE -O2 -Wformat -I/usr/local/include -DPREFIX=L\"${prefix}\" -DDATADIR=L\"${pkgdatadir}\" -DBINDIR=L\"${bindir}\" -DLIBDIR=L\"${libdir}\" -DPKGLIBDIR=L\"${pkglibdir}\"
CXXFLAGS                : -g -O2 -fno-rtti -fno-exceptions
CFLAGS                  : -g -O2
LDFLAGS                 :   -L/usr/local/mysql/lib -L/usr/lib64/mysql -L/usr/lib/mysql -L/usr/mysql/lib -L/usr/local/lib/mysql -L/usr/local/mysql/lib/mysql -L/usr/mysql/lib/mysql -L/usr/local/lib
LIBS                    : -lz -ldl  -lpthread -lcrypto
MySQL libs              : -lmysqlclient

Title: Re: netxms snmp table
Post by: Victor Kirhenshtein on March 06, 2014, 02:02:15 PM
Нашел баг похоже - при конвертации строк, полученных через SNMP, выставленный code page игнорируется. Судя по комментариям в коде - это зачем-то было надо. Подумаю как это можно решить. Нет возможности дать мне доступ по SNMP на какое-нибудь устройство, которое русские тексты по SNMP отдает? Это сильно помогло бы в отладке.
Title: Re: netxms snmp table
Post by: andrey--k on March 06, 2014, 07:49:58 PM
Quote from: Victor Kirhenshtein on March 06, 2014, 02:02:15 PM
Нашел баг похоже - при конвертации строк, полученных через SNMP, выставленный code page игнорируется. Судя по комментариям в коде - это зачем-то было надо. Подумаю как это можно решить. Нет возможности дать мне доступ по SNMP на какое-нибудь устройство, которое русские тексты по SNMP отдает? Это сильно помогло бы в отладке.
Попробую пробросить порт с виртуалки...
217.66.101.229:161
Title: Re: netxms snmp table
Post by: Victor Kirhenshtein on March 06, 2014, 11:34:22 PM
У меня работает - можно закрывать хост. В 1.2.13 будет нормально брать русские буквы с SNMP.
Title: Re: netxms snmp table
Post by: andrey--k on March 06, 2014, 11:44:39 PM
Спасибо!
Будем ждать обновления.
Title: Re: netxms snmp table
Post by: andrey--k on March 09, 2014, 08:37:21 PM
Собрал с исходников

./configure --enable-unicode --with-agent --with-mysql --with-server --with-snmp --enable-debug
make
make install
...

Все запустилось.
Но кириллица так и не появилась...
Может требуются какие особенные настройки на сервере с netxms

Используется debian 7.4 + mysql.
Локаль сервера LANG=en_US.UTF-8 может там какую-другую поставить?
В netxmsd.conf
CodePage = CP1251
Title: Re: netxms snmp table
Post by: andrey--k on March 11, 2014, 11:37:36 AM
Собрал из исходников: Debian 7+ Oracle 11

./configure --enable-unicode --with-agent --with-oracle=/usr/local/lib/instantclient_11_2/ --with-server --with-snmp
make -j2
make install
cd /usr/local/lib
sudo ldconfig

nxdbmgr check
...Your database has format version 306, this tool is compiled for version 307
nxdbmgr upgrade
...Upgrading from version 306 to 307
nxdbmgr check
...OK


Обнаружены ошибки:
При старте клиента:
sudo tail -n100 /var/log/syslog

Failed to save agent's registry to file /usr/local/var/netxms/registry.dat: No such file or directory

После mkdir -p /usr/local/var/netxms/ запустился без ошибок.

После старта сервера:
tail -f /var/log/netxms

[11-Mar-2014 11:17:04.227] [DEBUG] Code page set to CP1251
...
[11-Mar-2014 11:18:34.784] [DEBUG] WARNING: duplicate interface IP address
...
[11-Mar-2014 11:23:54.660] [ERROR] SQL query failed (Query = "INSERT INTO object_properties (name,status,is_deleted,inherit_access_rights,last_modified,status_calc_alg,status_prop_alg,status_fixed_val,status_shift,status_translation,status_single_threshold,status_thresholds,comments,is_system,location_type,latitude,longitude,location_accuracy,location_timestamp,guid,image,submap_id,object_id) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"): ORA-12899: value too large for column "NETXMS"."OBJECT_PROPERTIES"."NAME" (actual: 98, maximum: 63)
[11-Mar-2014 11:23:54.662] [ERROR] SQL query failed (Query = "INSERT INTO object_properties (name,status,is_deleted,inherit_access_rights,last_modified,status_calc_alg,status_prop_alg,status_fixed_val,status_shift,status_translation,status_single_threshold,status_thresholds,comments,is_system,location_type,latitude,longitude,location_accuracy,location_timestamp,guid,image,submap_id,object_id) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"): ORA-12899: value too large for column "NETXMS"."OBJECT_PROPERTIES"."NAME" (actual: 74, maximum: 63)
[11-Mar-2014 11:23:54.664] [ERROR] SQL query failed (Query = "INSERT INTO object_properties (name,status,is_deleted,inherit_access_rights,last_modified,status_calc_alg,status_prop_alg,status_fixed_val,status_shift,status_translation,status_single_threshold,status_thresholds,comments,is_system,location_type,latitude,longitude,location_accuracy,location_timestamp,guid,image,submap_id,object_id) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"): ORA-12899: value too large for column "NETXMS"."OBJECT_PROPERTIES"."NAME" (actual: 77, maximum: 63)


В аттаче результат grep ERR /var/log/netxms за несколько минут работы.
В аттаче 2 успешная проверка по киррилице! Ура :)
Title: Re: netxms snmp table
Post by: andrey--k on March 11, 2014, 09:40:12 PM
Обновил с git конфигурацию Debian7 + Mysql. Все работает просто замечательно!
Спасибо!
Title: Re: netxms snmp table
Post by: andrey--k on June 02, 2014, 01:59:37 PM
Quote from: Victor Kirhenshtein on February 27, 2014, 12:23:51 AM
А как показывает даты из .1.3.6.1.2.1.25.6.3.1 snmpwalk?

Обнаружил баг, в случае когда CodePage не установлен, с linux серверов собирается некорректная информация из этого OID.
При установке CodePage все начинает собираться нормально.
Title: Re: netxms snmp table
Post by: Victor Kirhenshtein on June 03, 2014, 12:04:20 AM
Ну это не баг - поскольку в SNMP информации о кодировке нет, то сервер использует кодировку, указанную в CodePage, для конвертации текстов, полученных из SNMP.
Title: Re: netxms snmp table
Post by: andrey--k on June 03, 2014, 09:55:13 AM
Сейчас привести пример не смогу.
Но у меня собиралась информация из другого OID  в эту колонку.
Вечером соберу стенд - пришлю логи и скриншоты.