Я хочу вытягивать с ряда хостов таблицу с установленным софтом...
(.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?
			
			
			
				А как выглядит результат snmpwalk по этой ветке?
			
			
			
				См аттач
			
			
			
				Надо в качестве имени параметра на закладке "General" указать .1.3.6.1.2.1.25.6.3.1.1 - тогда сервер получит правильные индексы для OID'ов в колонках.
			
			
			
				Спасибо!
Заработало!
А коррекцию значений можно как-то из mib подтягивать или на каждый случай надо отдельный скрипт писать?
А то вместо времени hex выводит :(
			
			
			
				Я посмотрел 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 на эту колонку.
			
			
			
				не смог найти образца скрипта для парсинга/исправления значений для 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
			
			
			
				Насчет русских букв - а в какой кодировке они по SNMP приходят? Я бы рекомендовал использовать UNICODE сборку сервера и поставить CodePage в netxmsd.conf в кодировку, используемую в SNMP.
			
			
			
				Кодировки зависят от локали ПК... 1251, 1252, 886.
Установка кодировки в какую-то определенную даст только частичный результат :(
Хотелось бы все же иметь raw ответы... Там хоть конвертацию по словарю наладить можно...
			
			
			
				Quote from: Victor Kirhenshtein on February 24, 2014, 11:14:52 AM
Насчет русских букв - а в какой кодировке они по SNMP приходят? Я бы рекомендовал использовать UNICODE сборку сервера и поставить CodePage в netxmsd.conf в кодировку, используемую в SNMP.
Какие варианты кодировок?
Я попробовал windows-1251 и cp1251.
Эфекта нет  :(
			
 
			
			
				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
...
 
			
			
				Можно ли заставить программу собирать расшифрованые при помощи mib файлов значения, вместо написания скриптов?
			
			
			
				Quote from: andrey--k on February 26, 2014, 11:42:44 PM
Можно ли заставить программу собирать расшифрованые при помощи mib файлов значения, вместо написания скриптов?
А что значит "расшифрованные"? В рассматриваемом случае например формат поля описан в виде текстового комментария, а формально его формат OCTET STRING - система его и принимает как последовательность байтов. А по описанию на английском языке правильно разбирать поле - это уже ИИ нужен...
			
 
			
			
				Часть полей указаны в mib как integer/unsigned/etc... С ними все сложно.
А вот по строкам... Та же строка даты/времени приходит в уже "красивом" виде из snmpwalk используя mib файл.
Да и еще много "подставных" строковых значений тоже... 
			
			
			
				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 да и закончились...
			
 
			
			
				А как показывает даты из .1.3.6.1.2.1.25.6.3.1 snmpwalk?
			
			
			
				
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
			
			
				А вот замечательный пример "недорасшифрованной строки"
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>
			
			
				Да, действительно, в MIB'е есть описание конвертации:
DateAndTime ::= TEXTUAL-CONVENTION
    DISPLAY-HINT "2d-1d-1d,1d:1d:1d.1d,1a1d:1d"
кто бы мог подумать :) Сейчас наш MIB компилятор поле DISPLAY-HINT игнорирует, я добавлю feature request на это.
			
			
			
				По поводу mib-компилятора...
Думаю вам будет интересно взглянуть на mib2c из net-snmp.
			
			
			
				Решил задачу через динамические DCI. Там пишет raw (hex) в БД.
Спасибо.
			
			
			
				Quote from: andrey--k on March 04, 2014, 11:09:53 PM
Решил задачу через динамические DCI. Там пишет raw (hex) в БД.
Спасибо.
Решение оказалось неудачным.
Сервер начал потреблять очень много ОЗУ.
Буду пробовать реализовать поддержку CP1251.
Подскажите пожалуйста, deb пакеты в последней версии (1.2.12), для Debian Wheezy, скомпилированы с  --enable-UNICODE ?
			
 
			
			
				Приведите пожалуйста пример создания Transformatin script для SNMP-table.
			
			
			
				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.
			
 
			
			
				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);
}
 
			
			
				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
Кирилица все равно не собирается нормально.
 :(
Я что-то упускаю, но не могу понять что именно :(
			
 
			
			
				Сервер не надо со статикой собирать, ничего хорошего из этого не выйдет. Правильней будет так:
./configure --with-server --with-mysql --enable-unicode --disable-xmpp
и как выглядит summary после отработки configure?
			
			
			
				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
			 
			
			
				Нашел баг похоже - при конвертации строк, полученных через SNMP, выставленный code page игнорируется. Судя по комментариям в коде - это зачем-то было надо. Подумаю как это можно решить. Нет возможности дать мне доступ по SNMP на какое-нибудь устройство, которое русские тексты по SNMP отдает? Это сильно помогло бы в отладке.
			
			
			
				Quote from: Victor Kirhenshtein on March 06, 2014, 02:02:15 PM
Нашел баг похоже - при конвертации строк, полученных через SNMP, выставленный code page игнорируется. Судя по комментариям в коде - это зачем-то было надо. Подумаю как это можно решить. Нет возможности дать мне доступ по SNMP на какое-нибудь устройство, которое русские тексты по SNMP отдает? Это сильно помогло бы в отладке.
Попробую пробросить порт с виртуалки...
217.66.101.229:161
			
 
			
			
				У меня работает - можно закрывать хост. В 1.2.13 будет нормально брать русские буквы с SNMP.
			
			
			
				Спасибо!
Будем ждать обновления.
			
			
			
				Собрал с исходников
./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
			
			
			
				Собрал из исходников: 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 успешная проверка по киррилице! Ура :)
			
			
			
				Обновил с git конфигурацию Debian7 + Mysql. Все работает просто замечательно!
Спасибо!
			
			
			
				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 все начинает собираться нормально.
			
 
			
			
				Ну это не баг - поскольку в SNMP информации о кодировке нет, то сервер использует кодировку, указанную в CodePage, для конвертации текстов, полученных из SNMP.
			
			
			
				Сейчас привести пример не смогу.
Но у меня собиралась информация из другого OID  в эту колонку.
Вечером соберу стенд - пришлю логи и скриншоты.