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. Скриптовая задачка (в приложении к hardware-мониторингу на HP Proliant)

Скриптовая задачка (в приложении к hardware-мониторингу на HP Proliant)

Scheduled Pinned Locked Moved Support (Russian)
4 Posts 2 Posters 5.8k 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.
  • E
    E
    Ethril
    wrote on last edited by
    #1

    Имеется зоопарк серверов серии HP Proliant, с которых NetXMS'ом по SNMP собираются температуры с внутренних датчиков. Сервера разных времён и моделей, поэтому у них разный состав этих датчиков. Где-то их 3 штуки, где-то 5, где-то первый датчик мониторит cpu, а где-то - powersupply...
    (Местоположение датчика нумер N можно получить SNMP-запросом по OID .1.3.6.1.4.1.232.6.2.6.8.1.3.0.[N]. Затем запросом по OID .1.3.6.1.4.1.232.6.2.6.8.1.4.0.[N] получить температуру.)

    На первых порах интересуют только данные датчиков с местоположением ambient.

    Хотелось бы, не вдаваясь в подробности установки датчиков на каждой модели, получать полный список их значений с каждого сервера, находить там тот, который ambient, и слать алерт при превышении порога, скажем, 20 гр.

    Завёл шаблон, перенёс в него все Пролианты, завёл в нём пары датчиков ([N]SensorLocale, [N]SensorData) ; N=1..5.
    Во всех датчиках [N]SensorData вобью Thresholds, при превышении которых сработает некий эвент.
    На некоем полу-NXSL, полу-псевдоязыке попытался накропать скрипт, который хочу вставить в Event Processing Policy:

    set i=1;             //define integer variable
    
    while ( i < 6 )     //cycle from 1Sensor[Locale/Data] to 5Sensor[Locale/Data]
    {
    	if ( GetDCIValue($node, FindDCIByDescription($node, right("SensorLocale", 13, i))) == "ambient" )   // is [N]SensorLocale == "ambient" ?
    	{
    		if ( GetDCIValue($node, FindDCIByDescription($node, right("SensorData", 11, i))) > 20 )     // is ambient sensor overheat?
    		{
    			return GetDCIValue($node, FindDCIByDescription($node, right("SensorData", 11, i))); // if true, true then get data from ambient sensor
    		};
    	};
    	i++;
    };
    
    return 0;         // return current temperature from overheated ambient sensor, or 0.
    

    , т.е., при срабатывании эвента отрабатывает скрипт, который перепроверяет, какой же это эвент сработал. Уж не ambient ли? Если ambient, то ахтунг. Как-то это всё криво. Может можно лучше? И заодно скрипт причесать... ::)

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

      Долго думал над красивым решением, без патчей на сервер не получится к сожалению. В следующей версии сделаю дополнительные функции, которые упростят конфигурацию в таких ситуациях. Пока-что можно сделать такой скрипт для event processing policy (для события по трешолду на параметры [N]SensorData):

      sub main()
      {
         loc = GetDCIValue($node, FindDCIByDescription($node, left($2, 1) . "SensorLocale"));
         return loc == "ambient";
      }
      

      C таким скриптом правило будет срабатывать для событий от [N]SensorData если значение соответствующего [N]SensorLocale равно строке ambient.

      P.S. Скрипт можно упростить до

      GetDCIValue($node, FindDCIByDescription($node, left($2, 1) . "SensorLocale")) == "ambient"
      
      1 Reply Last reply
      0
      • E
        E
        Ethril
        wrote on last edited by
        #3

        В общем, сделал так - завёл в шаблоне ещё один DCI, впихнул ему в thresholds скрипт:

        sub main()
        {
        	if ( GetDCIValue($node, FindDCIByDescription($node, "1SensorLocale")) == "ambient" )
        		return GetDCIValue($node, FindDCIByDescription($node, "1SensorData"));
        	if ( GetDCIValue($node, FindDCIByDescription($node, "2SensorLocale")) == "ambient" )
        		return GetDCIValue($node, FindDCIByDescription($node, "2SensorData"));
        	if ( GetDCIValue($node, FindDCIByDescription($node, "3SensorLocale")) == "ambient" )
        		return GetDCIValue($node, FindDCIByDescription($node, "3SensorData"));
        	if ( GetDCIValue($node, FindDCIByDescription($node, "4SensorLocale")) == "ambient" )
        		return GetDCIValue($node, FindDCIByDescription($node, "4SensorData"));
        	if ( GetDCIValue($node, FindDCIByDescription($node, "5SensorLocale")) == "ambient" )
        		return GetDCIValue($node, FindDCIByDescription($node, "5SensorData"));
        	return 0;
        }
        

        Ну и в Event Processing просто отслеживаю только его состояние.

        Осталось научиться заводить переменные и делать циклы типа for на вашем NXSL, чтобы скрипт свернуть до 3-х строк 🙂

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

          Вариант с циклом:

          sub main()
          {
                  i = 1;
                  while(i < 6)
                  {
                          if (GetDCIValue($node, FindDCIByDescription($node, i . "SensorLocale")) == "ambient" )
                                  return GetDCIValue($node, FindDCIByDescription($node, i . "SensorData"));
                          i++;
                  }
                  return 0;
          }
          
          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