Ad Widget

Collapse

Использование внешнего скрипта

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • screeble
    Member
    • Dec 2011
    • 34

    #1

    Использование внешнего скрипта

    Приветствую, Всех!
    1) Написал скрипт который выводит следующую инфу:

    Code:
    {
    	"data":[
    
    	{
    		"{#DNAME}":"/dev/sda",
    	}
    	
    	{
    		"{#DNAME}":"/dev/sda1",
    	}
    	
    	{
    		"{#DNAME}":"/dev/sda2",
    	}
    	
    	{
    		"{#DNAME}":"/dev/sda5",
    	}
    	
    	{
    		"{#DNAME}":"/dev/sdb",
    	}
    	
    	{
    		"{#DNAME}":"/dev/sdb1",
    	}
    	
    	{
    		"{#DNAME}":"/dev/sdb2",
    	}
    	
    	{
    		"{#DNAME}":"/dev/sdb5",
    	}
    	
    	]
    }

    2) Добавил запись в файл zabbix_agentd.conf:
    UserParameter=vfs.disk.discovery, perl /usr/local/etc/vfs.disk.discovery

    3) Подскажите как теперь значение DNAME использовать например

    вместе с vfs.dev.read: vfs.dev.read[{#DNAME},sectors] . Как дать знать забиксу откуда брать DNAME ?

    Спасибо!
  • zalex_ua
    Senior Member
    Zabbix Certified Trainer
    Zabbix Certified SpecialistZabbix Certified Professional
    • Oct 2009
    • 1286

    #2
    А чем штатный ключ vfs.fs.discovery, встроенный у агента, вас не устроил ?

    Comment

    • Jimson
      Senior Member
      • Jan 2008
      • 1327

      #3
      Originally posted by zalex_ua
      А чем штатный ключ vfs.fs.discovery, встроенный у агента, вас не устроил ?
      тем что поддерживается для неведомых OS ?

      1) для фри я сделал дискавери параметры прям в конфиге:
      Code:
      UserParameter=vfs.dev.discovery2,iostat -x -t da | awk 'BEGIN { ORS=""; print "{\n\t\"data\":\[\n\t\t" } $1 ~ /^[a-z]+[0-9]+$/ { print "{\n\t\t\t\"{#DEVNAME}\":\""$1"\"\n\t\t}" } END { print "\n\t\]\n}\n" }' | awk '{ sub(/\}\{$/, "},\n\t\t{"); print }'
      
      UserParameter=net.if.discovery2,ifconfig -l -u | awk 'BEGIN { RS=" "; ORS=""; print "{\n\t\"data\":\[\n\t\t" } { print "{\n\t\t\t\"{#IFNAME}\":\""$1"\"\n\t\t}" } END { print "\n\t\]\n}\n" }' | awk '{ sub(/\}\{$/, "},\n\t\t{"); print }'
      2) использовать как zalex_ua уже написал - читать про "низкоуровневое обнаружение", создаешь правило обнаружение тип агент, указываешь ключ, а элементы данных твои это будут прототипы элементов данных, в этих прототипах ты уже можешь использовать макросы, которые определяются в JSON правила обнаружения, в твоем случае это {#DNAME}

      Comment

      • screeble
        Member
        • Dec 2011
        • 34

        #4
        Originally posted by zalex_ua
        А чем штатный ключ vfs.fs.discovery, встроенный у агента, вас не устроил ?
        потому что он не находит устройства типа sg* и тп.

        мне нужно мониторить составный RAID масива а vfs.fs.discovery находит только примонтированые файловые системы.
        Last edited by screeble; 05-09-2012, 07:19.

        Comment

        • screeble
          Member
          • Dec 2011
          • 34

          #5
          2) использовать как zalex_ua уже написал - читать про "низкоуровневое обнаружение", создаешь правило обнаружение тип агент, указываешь ключ, а элементы данных твои это будут прототипы элементов данных, в этих прототипах ты уже можешь использовать макросы, которые определяются в JSON правила обнаружения, в твоем случае это {#DNAME}[/QUOTE]


          Этот способ мне помог)) Спасибо

          Comment

          • screeble
            Member
            • Dec 2011
            • 34

            #6
            Вообщем все вроде запустилось, но есть проблема с выводом всех дисков которые передаются в {#DNAME}
            Например с этого списка работа идет только с первым элементом(sr0),
            а остальные уже не добавляются:
            "{#DNAME}":"sr0",
            "{#DNAME}":"sda",
            "{#DNAME}":"sda1",
            "{#DNAME}":"sda2",
            "{#DNAME}":"sda5",
            "{#DNAME}":"sda6",
            "{#DNAME}":"sdb",
            "{#DNAME}":"sdb1",
            "{#DNAME}":"loop0",
            "{#DNAME}":"loop1",
            "{#DNAME}":"loop2",
            "{#DNAME}":"loop3",
            "{#DNAME}":"loop4",
            "{#DNAME}":"loop5",
            "{#DNAME}":"loop6",
            "{#DNAME}":"loop7",

            Подскажите что не так?

            Comment

            • Jimson
              Senior Member
              • Jan 2008
              • 1327

              #7
              наверно ты поставил фильтр в дискавери правиле, что то вроде ^sr
              поставь ^(sr|sda) и добавятся еще sda*

              P.S. покажи целиком JSON, а то каша какая то, то что ты написал вообще не удовлетворяет формату, а то что писал в первом посте там нет запятых между {}, зато есть лишняя запятая после пары макрос-значение

              у тебя должно быть так
              Code:
              {
                      "data":[
                              {
                                      "{#SNMPINDEX}":"2",
                                      "{#SNMPVALUE}":"2.1.1.74"
                              },
                              {
                                      "{#SNMPINDEX}":"3",
                                      "{#SNMPVALUE}":"2.1.1.70"
                              },
                              {
                                      "{#SNMPINDEX}":"4",
                                      "{#SNMPVALUE}":"2.1.24.2"
                              }
                      ]
              }
              Last edited by Jimson; 05-09-2012, 13:27.

              Comment

              • screeble
                Member
                • Dec 2011
                • 34

                #8
                Вот JSON:

                Code:
                {
                	"data":[
                
                	{
                		"{#DNAME}":"sr0",
                	}
                	
                	{
                		"{#DNAME}":"sda",
                	}
                	
                	{
                		"{#DNAME}":"sda1",
                	}
                	
                	{
                		"{#DNAME}":"sda2",
                	}
                	
                	{
                		"{#DNAME}":"sda3",
                	}
                	
                	{
                		"{#DNAME}":"sda4",
                	}
                	
                	{
                		"{#DNAME}":"sdb",
                	}
                	
                	{
                		"{#DNAME}":"sdb1",
                	}
                	
                	{
                		"{#DNAME}":"sdb5",
                	}
                	
                	{
                		"{#DNAME}":"loop0",
                	}
                	
                	{
                		"{#DNAME}":"loop1",
                	}
                	
                	{
                		"{#DNAME}":"loop2",
                	}
                	
                	{
                		"{#DNAME}":"loop3",
                	}
                	
                	{
                		"{#DNAME}":"loop4",
                	}
                	
                	{
                		"{#DNAME}":"loop5",
                	}
                	
                	{
                		"{#DNAME}":"loop6",
                	}
                	
                	{
                		"{#DNAME}":"loop7",
                	}
                	
                	{
                		"{#DNAME}":"sdc",
                	}
                	
                	{
                		"{#DNAME}":"sdc1",
                	}
                	
                	{
                		"{#DNAME}":"sdc5",
                	}
                	
                	{
                		"{#DNAME}":"sdd",
                	}
                	
                	{
                		"{#DNAME}":"sdd1",
                	}
                	
                	{
                		"{#DNAME}":"sdd5",
                	}
                
                	]
                }
                а вот выражение:

                Code:
                1	» 	^(sda|sdb)$	[Результат ИСТИНА]
                А вот и сам скрипт:

                Code:
                #!/usr/bin/perl
                
                $first = 1;
                
                print "{\n";
                print "\t\"data\":[\n\n";
                
                for (`cat /proc/diskstats`)
                {
                    ($dname) = m/\S+ (\S+) (\S+)/;
                    $dname =~ s!/!\\/!g;
                
                    print "\t\n" if not $first;
                    $first = 0;
                
                    print "\t{\n";
                    print "\t\t\"{#DNAME}\":\"$dname\",\n";
                    print "\t}\n";
                }
                
                print "\n\t]\n";
                print "}\n";

                Comment

                • Jimson
                  Senior Member
                  • Jan 2008
                  • 1327

                  #9
                  ну не правильный он, я тебе сказал уже в чем, во первых между секциями {} должна быть запятая, во вторых после последней/единственно пары макрос-значение запятая не нужна, так же не нужна запятая после последней секции {}

                  вообщем смотри внимательно на пример

                  Comment

                  • screeble
                    Member
                    • Dec 2011
                    • 34

                    #10
                    Originally posted by jimson
                    ну не правильный он, я тебе сказал уже в чем, во первых между секциями {} должна быть запятая, во вторых после последней/единственно пары макрос-значение запятая не нужна, так же не нужна запятая после последней секции {}

                    вообщем смотри внимательно на пример
                    Все исправил заработало Спасибо!

                    Comment

                    Working...