NetXMS Support Forum

Russian Support => Общие вопросы => Topic started by: Harun on August 06, 2015, 11:59:42 AM

Title: Как правильно создать шаблон
Post by: Harun on August 06, 2015, 11:59:42 AM
Бьюсь, не могу разобраться, как правильно создать шаблон с Instance Dicsovery.

Например, мне нужно снимать сигнал/шум для некоторых интерфейсов по условию:

Для всех интерфейсов, у которых ifTable.ifEntry.ifType = 129 нужно создавать DCI  SNMP OID .1.3.6.1.2.1.10.127.1.1.4.1.5.<ID>, где <ID> - id интерфейса.

В Data Parametr я ввожу .1.3.6.1.2.1.10.127.1.1.4.1.5.{instance}, в Instance Dicsovery добавляю в поле Base SNMP OID .1.3.6.1.2.1.2.2.1.3 (ifTable.ifEntry.ifType), ставлю метод SNMP Walk - OIDs. Как теперь правильно создать filter script?
Title: Re: Как правильно создать шаблон
Post by: Harun on August 06, 2015, 12:50:08 PM
Покопался в примерах, сделал такое:

SNMP Walk - OID
Base SNMP OID = .1.3.6.1.2.1.2.2.1.1

transport = CreateSNMPTransport($node);
if (transport == null)
return false;
x = SNMPGet(transport, ".1.3.6.1.2.1.2.2.1.3." . $1);
if (x == null)
return false;
if (x->value == "129")
return true;
return false;

Работает!

Есть вопрос. Каким способом в Description добавлять имя интерфейса? Сейчас Description = SignalToNoise {instance}, что неинформативно.
Title: Re: Как правильно создать шаблон
Post by: Victor Kirhenshtein on August 06, 2015, 01:08:13 PM
Из фильтра можно возвращать измененый instance и instance name. Можно попробовать такой скрипт:


transport = CreateSNMPTransport($node);
if (transport == null)
return false;
type = SNMPGet(transport, ".1.3.6.1.2.1.2.2.1.3." . $1);
if (type == null)
return false;
if (type->value != 129)
return false;

name = SNMPGetValue(transport, ".1.3.6.1.2.1.2.2.1.2." . $1);  // ifDescr
if (name == null)
        name = $1; // use interface index as fallback

return %(true, $1, name);


и в параметре использовать {instance-name} там где надо подставить имя интерфейса.
Title: Re: Как правильно создать шаблон
Post by: Harun on August 06, 2015, 01:13:40 PM
https://www.netxms.org/forum/configuration/interface-names-in-instance-discovery/msg15724/#msg15724
Тут советуют следующее - зачем запрашивать по SNMP лишнюю информацию, если она есть в самой системе. Окончательный вариант:


transport = CreateSNMPTransport($node);
if (transport == null)
return false;
x = SNMPGet(transport, ".1.3.6.1.2.1.2.2.1.3." . $1);
if (x == null)
return false;
if (x->value != 129)
return false;
i = GetInterfaceObject($node, $1);
if (i != null && i->adminState == 1)
{
  return %(true, $1, i->name);
}
return false;

Спасибо за помощь, всё работает как надо!
Title: Re: Как правильно создать шаблон
Post by: Victor Kirhenshtein on August 06, 2015, 01:15:51 PM
Логично на самом деле. Тип тоже можно ведь достать из объекта интерфейса - поле ifType.
Title: Re: Как правильно создать шаблон
Post by: Harun on August 06, 2015, 03:20:32 PM
Тогда всё значительно упрощается

i = GetInterfaceObject($node, $1);
if ( i != null && i->adminState == 1 && i->ifType == 129)
{
  return %(true, $1, i->name);
}
return false;
Title: Re: Как правильно создать шаблон
Post by: Harun on August 13, 2015, 09:06:27 PM
После обновления до версии 2.0-RC1 шаблон перестал работать, видит только первый интерфейс, а остальные пропали.
Видимо это та же проблема:
https://www.netxms.org/forum/announcements/netxms-2-0-rc1-released/msg17520/#msg17520

2.0-RC2 - исправлено