Автоматический сбор данных с сенсоров Cisco.

Started by token, August 20, 2018, 01:23:19 PM

Previous topic - Next topic

token

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

Попутный вопрос: Подскажите, как менять имя инстанции в процессе работы фильтра Instance Discovery. [SOLVED]

Понадобятся данные из 4-х SNMP OID-ов:
.1.3.6.1.4.1.9.9.91.1.1.1.1.4 - значение сенсоров
.1.3.6.1.2.1.47.1.1.1.1.7 - имена физических устройств.
.1.3.6.1.4.1.9.9.91.1.1.1.1.1 - тип физического устройства, если у OID-а есть значение, то это сенсор. По цифре значения определяется единица измерения (Volts,Ampers,Watts...)
.1.3.6.1.4.1.9.9.91.1.1.1.1.3 - точность сенсоров (количество знаков после запятой)

Создаем Template, в нем DCI со следующими параметрами:
Description = {instance-name}
Paramater = .1.3.6.1.4.1.9.9.91.1.1.1.1.4.{instance}
Origin = SNMP, Data type = Floating Point Number

В Instance Discovery определяем инстанции:
Instance discovery method = SNMP Walk - OIDs
Base SNMP OID = 1.3.6.1.2.1.47.1.1.1.1.7

Нужно разрешать только сенсоры имеющие единицы измерений, поэтому на Instance Discovery ставится фильтр:

transport = CreateSNMPTransport($node);
SensorType = SNMPGetValue(transport, ".1.3.6.1.4.1.9.9.91.1.1.1.1.1.".$1);
  if (typeof(SensorType) == "null") {
      return false;
  }
return true;


Для правильного вывода данных нужно установить "запятую" на место:

sub_oid = right($dci->name,4);
transport = CreateSNMPTransport($node);
prec = SNMPGetValue(transport, ".1.3.6.1.4.1.9.9.91.1.1.1.1.3.".sub_oid);

if (prec == 1) {
return $1/10;
}
if (prec == 2) {
return $1/100;
}
if (prec == 3) {
return $1/1000;
}
return $1;


Темплейт можно автоматом привязывать к узлу. Automatic Apply Rules = return $node->sysDescription like "Cisco *";

Для полного счастья не мешало бы добавлять в имя инстанции единицы измерения, из .1.3.6.1.4.1.9.9.91.1.1.1.1.1 Но сделать это у меня не получается, видимо чего-то недопонимаю... Решение в посте ниже.

token

"А ларчик просто открывался"... © И.А. Крылов

Скрипт Instance Discovery:

transport = CreateSNMPTransport($node);
SensorType = SNMPGetValue(transport, ".1.3.6.1.4.1.9.9.91.1.1.1.1.1.".$1);
if (typeof(SensorType) == "null") {
return false;
}
switch (SensorType)
{
case "1":
MU = "other";
break;
case "2":
MU = "unknown";
break;
case "3":
MU = ", VAC";
break;
case "4":
MU = ", VDC";
break;
case "5":
MU = ", mA";
break;
case "6":
MU = ", W";
break;
case "7":
MU = ", Hz";
break;
case "8":
MU = ", ˚C";
break;
case "9":
MU = ", %RH";
break;
case "10":
MU = ", RPM";
break;
case "11":
MU = ", CMM";
break;
case "14":
MU = ", dBm";
break;
}
return %(true,$1,$2.MU);


Пропущены значения 12 (truthvalue) и 13 (specialEnum), чего с ними делать пока не решил :)

Картинка с результатом прилагается.

Victor Kirhenshtein

А сделайте экспорт шаблона - мы бы его добавили как стандартный.

token

Пропустил сообщение про экспорт шаблона.

Экспортированный тепмлейт.