Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (Flatly)
  • No Skin
Collapse
Brand Logo

NetXMS Forum

  1. Home
  2. Support (Russian)
  3. Network Maps и status

Network Maps и status

Scheduled Pinned Locked Moved Support (Russian)
13 Posts 4 Posters 63.4k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • H
    H
    hzdrus
    wrote on last edited by
    #1

    Сделал карту в NetXMS. Но почему-то устройства имеют статус Critical, если у них есть down интерфейс, хотя я поменял severity таких alarm'ов на minor в Event Processing Policy.

    Похоже этот статус с алармами не связан, так как он остается критическим даже после acknowledge/resolve аларма?

    Лечится только если ставить Changed interface expected state = ignore или down, первое как я понимаю приведет к потере алармов на интерфейсе, а второе делать муторно. 😞

    Есть ли варианты, как это поднастроить?

    1 Reply Last reply
    0
    • H
      H
      hsvt
      wrote on last edited by
      #2

      Можете попробовать по этой теме - https://www.netxms.org/forum/oe-oo/ooee-o-1-2-6/msg9783/#msg9783

      Чтобы убрать статус CRITICAL на портах, статус которых не интересует, можно поменять им expected state на IGNORE.
      Это можно делать даже автоматически через configuration poll hook,
      используя функцию SetInterfaceExpectedState (http://wiki.netxms.org/wiki/NXSL:SetInterfaceExpectedState

      Сами столкнулись с данной проблемой. Но решение тоже не совсем удобное - получается нужно смотреть информацию об интерфейсе чтобы понять на самом деле его состояние сейчас DOWN или же он IGNORE.

      Карту какую используете ? Wolrd map или обычную? Когда уже появится интерактивная карта со связими в реальном времени, например, как в The dude 🙂

      1 Reply Last reply
      0
      • H
        H
        hzdrus
        wrote on last edited by
        #3

        Но решение тоже не совсем удобное - получается нужно смотреть информацию об интерфейсе чтобы понять на самом деле его состояние сейчас DOWN или же он IGNORE.

        Я б сказал, что это вообще не решение, так как приводит к потере мониторинга портов. 😞

        Карту какую используете ? Wolrd map или обычную? Когда уже появится интерактивная карта со связими в реальном времени, например, как в The dude 🙂

        Если вы про динамическое показывание нагрузки на каналах между устройствами, то NetXMS это умеет (Data Source в Property линка на карте).

        1 Reply Last reply
        0
        • G
          G
          glebofff
          wrote on last edited by
          #4

          Это ещё какое решение, просто вам надо бы поглубже посмотреть в сторону nxsl, посоны.

          http://wiki.netxms.org/wiki/NXSL:Interface

          У объекта Interface появилось свойство alias, есть name, появились незадокументированные методы setStatusPropagation / setStatusCalculation.

          http://wiki.netxms.org/wiki/NXSL_Function_Reference#Object_Management

          Тут есть SetInterfaceExpectedState, ManageObject, UnmanageObject.

          Cначала прикинем типовой сценарий: вот если это маршрутизатор Cisco, а интерфейс Tu* или Fa*, то этот интерфейс мне не особо критичен, если это Di*, Nu0, Lo* - то вообще игнорим, а вот Gi* мне очень интересны.

          Осталось - написать скрипт, который, в зависимости от ваших предпочтений, сделает интерфейсу i:
            - если совсем не интересует - UnmanageObject (i),
            - если интересует, но не совсем - SetInterfaceExpectedState (i, "IGNORE"),
            - если интересует - i->setStatusPropagation (4,1,2,3,3),
            - если интересует очень - оставит всё по-умолчанию.

          if (i->node->sysDescription ~= "^Cisco")
          {
            if (i->name ~= "^Nu|^Di|^Lo")
            {
              UnmanageObject (i);
            } else  if (i->name ~= "^Fa|^Tu")
            {
              i->setStatusPropagation (4,1,2,3,3);
            } else  if (! i->name ~= "^Gi")
            {
              SetInterfaceExpectedState (i, "IGNORE");
            }
          }
          

          Можно без всей этой автоматизации, врукопашную. Но, если узлов тысячи, а тут у некоторых есть такие инсталляции, то придётся тяжко.

          PS:

          setStatusPropagation (4,1,2,3,3) соответствует картинке, которую я приаттачил.


          -Properties for Fa0-0.204 .png

          1 Reply Last reply
          0
          • H
            H
            hsvt
            wrote on last edited by
            #5

            @glebofff said in Network Maps и status:

            Это ещё какое решение, просто вам надо бы поглубже посмотреть в сторону nxsl, посоны.

            http://wiki.netxms.org/wiki/NXSL:Interface

            У объекта Interface появилось свойство alias, есть name, появились незадокументированные методы setStatusPropagation / setStatusCalculation.

            http://wiki.netxms.org/wiki/NXSL_Function_Reference#Object_Management

            Тут есть SetInterfaceExpectedState, ManageObject, UnmanageObject.

            Cначала прикинем типовой сценарий: вот если это маршрутизатор Cisco, а интерфейс Tu* или Fa*, то этот интерфейс мне не особо критичен, если это Di*, Nu0, Lo* - то вообще игнорим, а вот Gi* мне очень интересны.

            Осталось - написать скрипт, который, в зависимости от ваших предпочтений, сделает интерфейсу i:
              - если совсем не интересует - UnmanageObject (i),
              - если интересует, но не совсем - SetInterfaceExpectedState (i, "IGNORE"),
              - если интересует - i->setStatusPropagation (4,1,2,3,3),
              - если интересует очень - оставит всё по-умолчанию.

            if (i->node->sysDescription ~= "^Cisco")
            {
              if (i->name ~= "^Nu|^Di|^Lo")
              {
                UnmanageObject (i);
              } else  if (i->name ~= "^Fa|^Tu")
              {
                i->setStatusPropagation (4,1,2,3,3);
              } else  if (! i->name ~= "^Gi")
              {
                SetInterfaceExpectedState (i, "IGNORE");
              }
            }
            

            Можно без всей этой автоматизации, врукопашную. Но, если узлов тысячи, а тут у некоторых есть такие инсталляции, то придётся тяжко.

            PS:

            setStatusPropagation (4,1,2,3,3) соответствует картинке, которую я приаттачил.

            Ага, спасибо большое за наводку. Но вот человеку который не знаком и не умеет программировать - тяжеловато даётся данные надстройки...

            Мне вот под D-Link надо, пробую написать так:

            i = GetInterfaceObject($node);
            if (i->node->driver == DLINK)
            {
              if (i->slot == 1 && i->port <= 24)
              {
                SetInterfaceExpectedState (i, "IGNORE");
              } else  if (i->port ~= "^25|^26|^27|^28" & i->slot = "1")
              {
                i->setStatusPropagation (4,1,2,3,3);
              } else  if (! i->name ~= "^ge")
              SetInterfaceExpectedState (i, "IGNORE");
              }
            

            Или даже так:

            foreach(i : GetNodeInterfaces($node))
            {
            	if (i->operState == 0)
            	SetInterfaceExpectedState(i, "IGNORE");
            }
            

            Но что-то ничего не срабатывает. Есть ли какая то отладка кода или дебаг\проверка на ошибки при компиляции?

            Я чего хотел бы получить: Отображение всех клиентских портов с 1-24 и их состоянием (если UP значит UP, если DOWN значит DOWN, но при этом чтобы красненьким было отмечено что интерфейс DOWN, а вся нода была NORMAL. "Если интересует, но не совсем", подходит к этому варианту, да ставим IGNORE, но тогда в списке интерфейсов он отображается как зелёный и нужно лезть во вкладки и смотреть там его состояние.

            Для магистральных портов сделать условие и  i->setStatusPropagation (4,1,2,3,3)

            Я пытаюсь взять за основу ваш вариант с кошкой, но ничего не выходит...

            1 Reply Last reply
            0
            • G
              G
              glebofff
              wrote on last edited by
              #6

              Ну тут всё просто. Надо понять netxms, прежде, чем что-то от него хотеть. В который раз уж пишу. 🙂

              1 Reply Last reply
              0
              • H
                H
                hsvt
                wrote on last edited by
                #7

                @glebofff said in Network Maps и status:

                Ну тут всё просто. Надо понять netxms, прежде, чем что-то от него хотеть. В который раз уж пишу. 🙂

                Вам легко говорить, а я тут головой бьюсь :))) с программированием на "ВЫ" это мягко сказано. Но я пытаюсь учиться.

                Ну вы хотя бы поправьте меня пожалуйста если я ошибся где-то...

                foreach(i : GetNodeInterfaces($node))
                
                {
                
                if (i->node->sysDescription ~= "^DES|^D-Link DES-3028")
                {
                	 println(i->node->sysDescription);
                	 if (i->slot == "1" && i->port <= "24")
                    {
                	 	SetInterfaceExpectedState (i, "IGNORE");
                	 }
                
                	  else  if (i->port ~= "^25|^26|^27|^28" & i->slot = "1")
                    {
                		  i->setStatusPropagation (4,1,2,3,3);
                    }
                
                	}
                
                }
                

                Вот так оно вроде бы работает с Hook::ConfigurationPoll

                Если мне всё равно у некоторых портов надо поставить expected state вручную (IGNORE) - сохраниться ли МОЁ ручное состояние или при вызове скрипта он сделает по своему?

                setStatusPropagation (4,1,2,3,3) соответствует картинке, которую я приаттачил.

                Я не совсем понял, вы для всех интерфейсов изменили Severity based ? Где можно узнать какая цифру какому состоянию соотвествует?

                И еще вы пишите:

                если интересует - i->setStatusPropagation (4,1,2,3,3),

                Но у вас это условие относится к "^Fa|^Tu" - как раз он вам не особо критичен.

                1 Reply Last reply
                0
                • V
                  V
                  Victor Kirhenshtein
                  wrote on last edited by
                  #8

                  Немного поправил скрипт:

                  println($node->sysDescription);
                  
                  if ($node->sysDescription ~= "^DES|^D-Link DES-3028")
                  {
                     println "Node passed filter";
                  	foreach(i : GetNodeInterfaces($node))
                  	{
                  	   if (i->slot == 1 && i->port <= 24)
                  	   {
                  	 	   SetInterfaceExpectedState(i, "IGNORE");
                  	   }
                        else if (i->port >= 25 && i->port <= 28 && i->slot == 1)
                        {
                  		   i->setStatusPropagation(4,1,2,3,3);
                  	   }
                  	}
                  }
                  

                  Там было несколько мелких ошибок по синтаксису (& вместо &&, = вместо ==, пробел перед скобкой в вызове функции, и т.д.), но в целом идея правильная.
                  Скрипты удобно проверять через меню "Run server script" в контекстном меню ноды - можно видеть результат выполнения и вывод trace/println.

                  1 Reply Last reply
                  0
                  • H
                    H
                    hsvt
                    wrote on last edited by
                    #9

                    @victor said in Network Maps и status:

                    Немного поправил скрипт:

                    println($node->sysDescription);
                    
                    if ($node->sysDescription ~= "^DES|^D-Link DES-3028")
                    {
                       println "Node passed filter";
                    	foreach(i : GetNodeInterfaces($node))
                    	{
                    	   if (i->slot == 1 && i->port <= 24)
                    	   {
                    	 	   SetInterfaceExpectedState(i, "IGNORE");
                    	   }
                          else if (i->port >= 25 && i->port <= 28 && i->slot == 1)
                          {
                    		   i->setStatusPropagation(4,1,2,3,3);
                    	   }
                    	}
                    }
                    

                    Там было несколько мелких ошибок по синтаксису (& вместо &&, = вместо ==, пробел перед скобкой в вызове функции, и т.д.), но в целом идея правильная.
                    Скрипты удобно проверять через меню "Run server script" в контекстном меню ноды - можно видеть результат выполнения и вывод trace/println.

                    Спасибо за исправления, вы имеете в виду "Execute server script" ?

                    Если выставлять для некоторых портов epected state вручную -  скрипт всё равно в приоритете проходит и выставляет свои значения. Как быть в таком случае, для каждой ноды писать в скрипте свои исключения? Бывает, например такое, что не на всех коммутаторов и магистральных портах нужно ожидаемый статус выставлять на UP.

                    1 Reply Last reply
                    0
                    • V
                      V
                      Victor Kirhenshtein
                      wrote on last edited by
                      #10

                      Можно добавить свой custom attribute на таких интерфейсах и в скрипте проверять - если он выставлен, то ничего не делать.

                      1 Reply Last reply
                      0
                      • H
                        H
                        hsvt
                        wrote on last edited by
                        #11

                        @victor said in Network Maps и status:

                        Можно добавить свой custom attribute на таких интерфейсах и в скрипте проверять - если он выставлен, то ничего не делать.

                        апну тему...

                        Продолжаю дальше продумывать логику ожидаемых состояний интерфейса и вернулся к custom attribute.

                        Every object can have custom attributes defined either by user or integrated application via NetXMS API. Custom attributes distinguished by names (an attribute name can contain up to 127 printable characters), and have string values of unlimited length. However, if you wish to access custom attributes in NXSL scripts as properties of node object, you should name them conforming to NXSL identifier naming constraints. To create or change value of custom attribute manually, right-click object in NetXMS console, and select Properties ‣ Custom Attributes tab.

                        Я так понимаю имя и строка, но что вы имеете в виду под добавить "свой" какие значения мне необходимо указать?

                        1 Reply Last reply
                        0
                        • V
                          V
                          Victor Kirhenshtein
                          wrote on last edited by
                          #12

                          Можно любое имя выбрать для атрибута - как-то специально описывать их не надо.

                          1 Reply Last reply
                          0
                          • H
                            H
                            hsvt
                            wrote on last edited by
                            #13

                            @victor said in Network Maps и status:

                            Можно любое имя выбрать для атрибута - как-то специально описывать их не надо.

                            А вы случайно ни какие изменения не вводили, например, на приоритет, если Excepted state выставлен вручную то тогда скрипт Hook::ConfigurationPoll не будет выставлять по своему. Потому что сейчас если я выставляю на некоторых портов в ручную Excepted state - он таким и остаётся, не смотря на работу скрипта поверх. Может быть тогда так и должно быть? Меня этот вариант больше устраивает т.к. осилить нужную логику скрипта с атрибутами проблематично 🙂

                            И если я правильно понял то функция GetCustomAttribute(node, attributeName) только для ноды, тогда как проверять аттрибут для интерфейса?

                            Еще заметил у всех коммутаторов Dlink автоматически выставляется атрибут .dlink.slotSize со значением 48 - что это означает? Slot как я понимаю может быть 1 или 2 если коммутатор поддерживает stack

                            У объекта Interface появилось свойство alias, есть name, появились незадокументированные методы setStatusPropagation / setStatusCalculation.

                            А документации на эти методы не появилось случайно?


                            state.jpg

                            1 Reply Last reply
                            0

                            Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                            Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                            With your input, this post could be even better 💗

                            Register Login
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            Powered by NodeBB Contributors
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • Users
                            • Groups