Ad Widget

Collapse

Snmp фильтрация данных

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Scorpey
    Member
    • Oct 2010
    • 97

    #1

    Snmp фильтрация данных

    Есть железка которая отдает нагрузку процессора в формате 10% или 12% т.е. параметр текстовый, а мне естественно хочется получить числовой параметр для построения графиков и настройки триггеров.

    Подскажите как быть?
  • Jimson
    Senior Member
    • Jan 2008
    • 1327

    #2
    А если этот параметр попытаться сохранить как число, забикс будет ругаться? Есть да, то я бы похачил, отрезал бы весь "хвост" строки начинающийся с первого нечислового символа если тип обрабатываемого итема числовой.
    Фигово когда агент отдает, например, географичечкие координаты в виде строки `56 34" 21' E`, такое без парсера вообще никак не обработать, приходится "проксировать" через agentx.

    Comment

    • Scorpey
      Member
      • Oct 2010
      • 97

      #3
      Originally posted by Jimson
      А если этот параметр попытаться сохранить как число, забикс будет ругаться? Есть да, то я бы похачил, отрезал бы весь "хвост" строки начинающийся с первого нечислового символа если тип обрабатываемого итема числовой.
      Фигово когда агент отдает, например, географичечкие координаты в виде строки `56 34" 21' E`, такое без парсера вообще никак не обработать, приходится "проксировать" через agentx.
      Как число не сохраняет, т.к. данные фактически не число, а текст.

      И как ты бы похачил?

      что такое agentx ?

      Я пока решил проблему через внешний скрипт.

      Comment

      • Jimson
        Senior Member
        • Jan 2008
        • 1327

        #4
        Навскидку, в функции get_value_snmp (check_snmp.c), в самом конце перед тем как делать `return ret` можно проверить тип итема, итем передаетсяв эту функцию в качестве параметра DC_ITEM *item, так что ничего хитрого делать не прийдется, если тип итема числовой то просто проверяем что у нас в ret и отрезаем с первого нечислового символа до конца строки. Есть хачить только для целочисленных данных, то вообще просто, если еще и для float, то прийдется учесть точки/запятые и тп.

        Вариант второй ждать, но походу ждать прийдется 2.3/2.4, так как в 2.1 вот эта вот красота https://support.zabbix.com/browse/ZBXNEXT-1444 похоже не попадает (postponed).

        AgentX это расширение net-snmp, например, embeded perl это по сути agentx. Надежнее расширять не через embeded, а полноценным agentx демоном, пишется он очень просто на том же perl или еще лучше на C. Я перекрываю некоторые железки проксей, используя стандарный функционал net-snmp "proxy", по сути это snmpd у которого в конфиге только строчки "proxy", затем к этому snmpd цепляются несколько agentx которые или "перекрывают" какие то OID, значения которых я хочу исправить, или создают дополнительные OID. Это решение удобно когда у нас 2-3 "жирных" SNMP агента, если же у нас 100500 мелких железок, то проксировать это все будет не очень удобно, геморойно.

        P.S. Скриптом можно довольствоваться если это единичный случай, десяток проверок в час, если же дергать срипт по 10 раз в секунду серверу станет плохо.

        Comment

        • Scorpey
          Member
          • Oct 2010
          • 97

          #5
          Originally posted by jimson
          Навскидку, в функции get_value_snmp (check_snmp.c), в самом конце перед тем как делать `return ret` можно проверить тип итема, итем передаетсяв эту функцию в качестве параметра dc_item *item, так что ничего хитрого делать не прийдется, если тип итема числовой то просто проверяем что у нас в ret и отрезаем с первого нечислового символа до конца строки. Есть хачить только для целочисленных данных, то вообще просто, если еще и для float, то прийдется учесть точки/запятые и тп.

          Вариант второй ждать, но походу ждать прийдется 2.3/2.4, так как в 2.1 вот эта вот красота https://support.zabbix.com/browse/zbxnext-1444 похоже не попадает (postponed).

          Agentx это расширение net-snmp, например, embeded perl это по сути agentx. Надежнее расширять не через embeded, а полноценным agentx демоном, пишется он очень просто на том же perl или еще лучше на c. Я перекрываю некоторые железки проксей, используя стандарный функционал net-snmp "proxy", по сути это snmpd у которого в конфиге только строчки "proxy", затем к этому snmpd цепляются несколько agentx которые или "перекрывают" какие то oid, значения которых я хочу исправить, или создают дополнительные oid. Это решение удобно когда у нас 2-3 "жирных" snmp агента, если же у нас 100500 мелких железок, то проксировать это все будет не очень удобно, геморойно.

          P.s. Скриптом можно довольствоваться если это единичный случай, десяток проверок в час, если же дергать срипт по 10 раз в секунду серверу станет плохо.
          К сожалению я не настолько силен в c кодинге.
          И версию пока стоит старенькая 1.8 - нам пока хватает.

          Comment

          Working...