NetXMS Support Forum

Russian Support => Общие вопросы => Topic started by: wonderboy on January 14, 2010, 10:29:00 AM

Title: Приоритет алярма в зависимости от номера интерфейса
Post by: wonderboy on January 14, 2010, 10:29:00 AM
Все привет!

Такой вопрос:
Есть ли какая-нибудь возможность выставлять приоритет алярма в зависимости от интерфейса на коммутаторе?

Например:
На циске порт 1 подключен к серверу, а порт 2 к обычному пользователю. Нужно чтобы после падения порта 1 алярм был CRITICAL, а при падении порта 2 был MAJOR.

Спасибо.
Title: Re: Приоритет алярма в зависимости от номера интерфейса
Post by: rostyslav on January 14, 2010, 12:19:01 PM
Здравствуйте.
Да, можно. Надо в Event Policy Editor'e создать два правила. В Source прописываем ту железку для которой создаем правила, в поле Alarm создаем в обоих один тот же аларм, но с разными приоритетами. В поле Script пишем скрипт такого плана:
Quotesub main()
{
   if ($2 == 1)
   {
       return 1;
   }
}
Будет приходить либо индекс интерфейса (SNMP_LINK_DOWN - трапы), либо его имя (SYS_IF_DOWN - опрос). В зависимости от этого и надо писать условие.
(http://img69.imageshack.us/img69/5775/snmplinkdown.jpg)
Title: Re: Приоритет алярма в зависимости от номера интерфейса
Post by: Alex Kirhenshtein on January 14, 2010, 12:32:08 PM
Кстати, для таких простых скрипров можно не писать "sub main ...", достаточно $2 == 1
Title: Re: Приоритет алярма в зависимости от номера интерфейса
Post by: wonderboy on January 15, 2010, 03:04:02 PM
Спасибо за помощь, но сразу возник еще один вопрос.

Так как на разном оборудовании разные порты могут быть серверными, транковыми и т.д.
Решил в дескрипшенах писать что-то типа Trunk ... , User ... , Server ...
И иметь всего 3 правила на все устройства.

Пишу в политике для эвента SYS_IF_DOWN скрипт ($2 - содержит имя интерфейса в указанном выше формате):
sub main() {
if ($2 ~= "Trunk")
{
  return 1;
}
}


Но вот видимо не срабатывает, потому что алярмы свой приоритет не меняют.

PS: Stdout куда выводятся print, println это где? Куда нужно смотреть? :)
Title: Re: Приоритет алярма в зависимости от номера интерфейса
Post by: wonderboy on January 15, 2010, 04:25:02 PM
Попытался выяснить в чем дело и получил вот что:

(http://img707.imageshack.us/img707/3148/35924771.jpg)

Даже если не стоит никаких скриптов в policy event editor алярмы выскакивают с severity minor, тоесть ни major, ни critical не отрабатывает. В опциях для политик поставил stop processing if rule match.

???
Title: Re: Приоритет алярма в зависимости от номера интерфейса
Post by: Victor Kirhenshtein on January 15, 2010, 05:44:57 PM
В заголовке окна видна пометка "modified". Event processing policy вступает в силу только после того, как она сохранена на сервере. Эти тестовые изменения были сохранены?
Title: Re: Приоритет алярма в зависимости от номера интерфейса
Post by: Victor Kirhenshtein on January 15, 2010, 06:24:52 PM
Quote from: wonderboy on January 15, 2010, 03:04:02 PM
Спасибо за помощь, но сразу возник еще один вопрос.

Так как на разном оборудовании разные порты могут быть серверными, транковыми и т.д.
Решил в дескрипшенах писать что-то типа Trunk ... , User ... , Server ...
И иметь всего 3 правила на все устройства.

Пишу в политике для эвента SYS_IF_DOWN скрипт ($2 - содержит имя интерфейса в указанном выше формате):
sub main() {
if ($2 ~= "Trunk")
{
  return 1;
}
}


Но вот видимо не срабатывает, потому что алярмы свой приоритет не меняют.

PS: Stdout куда выводятся print, println это где? Куда нужно смотреть? :)

Скрипт выглядит правильно. Stdout доступен только если скрипт запущен через nxscript. Приведенный выше скрипт можно протестировать например так:

1. создать файл test.nxsl, скопировать в него скрипт;
2. запустить команду

nxscript -r test.nxsl param1 param2


Результат будет примерно такой:


C:\Source\NetXMS\debug>nxscript -r test6.nxsl param1 param2
NetXMS Scripting Host  Version 1.1.0-rc10
Copyright (c) 2005-2009 Victor Kirhenshtein

Result = (null)

C:\Source\NetXMS\debug>

C:\Source\NetXMS\debug>nxscript -r test6.nxsl param1 Trunk
NetXMS Scripting Host  Version 1.1.0-rc10
Copyright (c) 2005-2009 Victor Kirhenshtein

Result = 1

C:\Source\NetXMS\debug>


Если в скрипте для отладки нужна печать на экран, то можно использовать print / println:


sub main()
{
   println "$2='" . $2 . "'";
   if ($2 ~= "Trunk")
   {
      println "match";
      return 1;
   }
   println "no match";
}


Получим


C:\Source\NetXMS\debug>nxscript -r test6.nxsl param1 param2
NetXMS Scripting Host  Version 1.1.0-rc10
Copyright (c) 2005-2009 Victor Kirhenshtein

$2='param2'
no match
Result = (null)

C:\Source\NetXMS\debug>

C:\Source\NetXMS\debug>nxscript -r test6.nxsl param1 Trunk
NetXMS Scripting Host  Version 1.1.0-rc10
Copyright (c) 2005-2009 Victor Kirhenshtein

$2='Trunk'
match
Result = 1

C:\Source\NetXMS\debug>

Title: Re: Приоритет алярма в зависимости от номера интерфейса
Post by: wonderboy on January 16, 2010, 10:22:57 AM
Всем спасибо! Сейчас все работает как надо. Видимо куда-то очень спешил  :-\ и забыл сохранить Event processing policy!