Скажите почему система может не считывать данные с UPS APC, из 15 установленных устройств определилось только одно, с остальных данные не получаются. Так же у них есть разница в SNMP Object ID, у работающего SNMP Object ID=.1.3.6.1.4.1.318.1.3.2.7, а у не рабочих SNMP Object ID=.1.3.6.1.4.1.318.1.3.2.9.
И еще вопрос как можно сменить отображение имени ноды в Entire Network, на ip адрес, по умолчанию он показывает SNMP sysName, причем не у всех свитчей, и у меня в списке есть 40 свитчей с названием H3C, так же это доставляет не удобство при поиске по мак адресу, пишет H3C порт такой то?
Разобрался с APC, в исправил автоматические применяемые правила, добавил в поиск по snmpOID строчку, "|| ( $node->snmpOID == ".1.3.6.1.4.1.318.1.3.2.9" )", шаблон применился к проблемным UPS.
Остался вопрос по множественному редактированию параметров, как все-таки изменить "Имя объекта" на IP?
Может кому понадобиться, для массового отключения опроса по NetXMS agent и EtherNet/IP нужно, в скрипт Hook::ConfigurationPoll, из Библиотеки скриптов, вставить строчки:
$object->enableEtherNetIP(false);
$object->enableAgent(false);
ошибку выдает :(
посмотрите пож повнимательнее
Quote from: sergey_t on November 29, 2021, 10:39:06 AM
ошибку выдает :(
посмотрите пож повнимательнее
У меня нормально скомпилировался скрипт.
Quote from: comfortal on November 18, 2021, 02:17:45 PM
И еще вопрос как можно сменить отображение имени ноды в Entire Network, на ip адрес, по умолчанию он показывает SNMP sysName, причем не у всех свитчей, и у меня в списке есть 40 свитчей с названием H3C, так же это доставляет не удобство при поиске по мак адресу, пишет H3C порт такой то?
Присоединяюсь, вопрос актуальный.
Quote from: sergey_t on November 29, 2021, 10:39:06 AM
ошибку выдает :(
посмотрите пож повнимательнее
Ошибку где и какую?
Quote from: sergey_t on November 29, 2021, 10:39:06 AM
ошибку выдает :(
посмотрите пож повнимательнее
добавляю в скрипт указанные строки, скрипт компилируется и в логах вижу ошибку:
"Script (Hook::ConfigurationPoll) execution error: Error 30 in line 8: Unknown object's method"
8 строка это именно первая строка скрипта
Quote from: sergey_t on December 01, 2021, 08:32:52 AM
Quote from: sergey_t on November 29, 2021, 10:39:06 AM
ошибку выдает :(
посмотрите пож повнимательнее
добавляю в скрипт указанные строки, скрипт компилируется и в логах вижу ошибку:
"Script (Hook::ConfigurationPoll) execution error: Error 30 in line 8: Unknown object's method"
8 строка это именно первая строка скрипта
Вот https://prnt.sc/217j1mu (https://prnt.sc/217j1mu) скрин скрипта, у меня работает, название объектов брал отсюда https://www.netxms.org/documentation/nxsl-latest/#class-netobj (https://www.netxms.org/documentation/nxsl-latest/#class-netobj)
очередной раз, скопировал - вставил, скомпилировал и все, ошибки нет !
не, опять вылезла :(
С какой-то из недавних версий configuration poll появился не только на нодах, но еще как минимум на кластерах. Поэтому, если такие объекты в системе есть, то скрипт будет на них тоже запускаться и расстраиваться что там нет каких-то вещей, которые есть на нодах. Попробуйте так:
if (classof($object) == "Node")
{
$object->enableEtherNetIP(false);
$object->enableAgent(false);
}
Quote from: Filipp Sudanov on December 03, 2021, 06:18:49 PM
С какой-то из недавних версий configuration poll появился не только на нодах, но еще как минимум на кластерах. Поэтому, если такие объекты в системе есть, то скрипт будет на них тоже запускаться и расстраиваться что там нет каких-то вещей, которые есть на нодах. Попробуйте так:
if (classof($object) == "Node")
{
$object->enableEtherNetIP(false);
$object->enableAgent(false);
}
Прописал именно так, ошибки больше нет
Остался еще вопрос по поводу множественного редактирования, как изменить название ноды на IP, если нод с одинаковым именем более 100?
Это тоже можно сделать в configuration poll - вот например для нод с определенным SNMP Object ID:
if (classof($object) == "Node" and $node->snmpOID == ".1.3.6.1.4.1.14988.1") $node->rename($node->ipAddr);
Quote from: Filipp Sudanov on December 07, 2021, 05:04:24 PM
Это тоже можно сделать в configuration poll - вот например для нод с определенным SNMP Object ID:
if (classof($object) == "Node" and $node->snmpOID == ".1.3.6.1.4.1.14988.1") $node->rename($node->ipAddr);
Спасибо, помогло
Получилось вот так:
if (classof($object) == "Node" and capabilities == "0x00000001")
{
$object->enableEtherNetIP(false);
$object->enableAgent(false);
$node->rename($node->ipAddr);
$node->setAlias($node->snmpSysName);
}
/* Для принтеров Kyocera установить alias из SysLocation */
if (classof($object) == "Node" and $node->snmpOID == ".1.3.6.1.4.1.1347.41") $node->setAlias($node->snmpSysLocation);
Появились еще вопросы:
- Правильно я понял, что указывая capabilities == "0x00000001" скрипт будет выбирать устройства только с SNMP?
- Как там же получить значение oid=.1.3.6.1.4.1.318.1.1.1.1.1.2.0 и вставить его в алиас, просто в ИПБ APC у нас не везде используется SysLocation
В capabilites кроме младшего бита, который isSNMP могут быть взведены еще какие-то биты. Поэтому лучше проверять накладывая битовую маску бинарным and:
if ($node->capabilities & 0x00000001)
Пример чтения значения по SNMP есть тут: https://www.netxms.org/documentation/nxsl-latest/#_read_snmp_value_from_node
Почему то у меня ошибка в строке: transport = FindObject($1)->createSNMPTransport();
Error 14 in line 40: Function or operation argument is not an object
Для дебага эту строчку можно переписать так:
trace(0, "$1: " . $1)
o = FindObject($1);
trace(0, "Found object: " . o->name);
transport = o->createSNMPTransport();
здесь мы сначала проверим, что в $1 есть название или ID объекта а потом проверим, что FindObject действительно смог найти объект. А $1 вообще откуда в вашем скрипте должне был присвоен? Если это configuration poll, то там выставляются $node и $object и надо так:
transport = $node->createSNMPTransport();
Спасибо, сделал так:
transport = $node->createSNMPTransport();
if (transport == null)
{
println "Failed to create SNMP transport, exit";
return 1;
}
value = SNMPGetValue(transport, ".1.3.6.1.4.1.318.1.1.1.1.1.2.0");
if (value == null)
{
println "Failed to issue SNMP GET request";
return 2;
}
else
{
$node->setAlias(value);
return 0;
}
И получил то что мне нужно, просто в программировании несилен и просто скопировал строчки из предложенного примера, а $1 оказывается пусто