Бьюсь, не могу разобраться, как правильно создать шаблон с 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?
			
			
			
				Покопался в примерах, сделал такое:
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}, что неинформативно.
			
			
			
				Из фильтра можно возвращать измененый 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} там где надо подставить имя интерфейса.
			
			
			
				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;
Спасибо за помощь, всё работает как надо!
			
			
			
				Логично на самом деле. Тип тоже можно ведь достать из объекта интерфейса - поле ifType.
			
			
			
				Тогда всё значительно упрощается
i = GetInterfaceObject($node, $1);
if ( i != null && i->adminState == 1 && i->ifType == 129)
{
  return %(true, $1, i->name);
}
return false;
			
			
				После обновления до версии 2.0-RC1 шаблон перестал работать, видит только первый интерфейс, а остальные пропали.
Видимо это та же проблема:
https://www.netxms.org/forum/announcements/netxms-2-0-rc1-released/msg17520/#msg17520
2.0-RC2 - исправлено