Ad Widget

Collapse

zabbix, данные в скрипт

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • reductor89
    Junior Member
    • Nov 2018
    • 12

    #1

    zabbix, данные в скрипт

    Добрый день. Забиксом занимаюсь относительно недавно. Подскажите решение данного вопроса. Собираю данные с оборудования через SNMP. Но получаемые данные не совсем правильные. Чтобы довести до нужно вида необходимо прогнать через формулу. На пример получаю значение 204 и должно получиться -16,9. Формула: 10 * log10(204) - 40 = -16,9. Посоветовали добавить скрипт php и в него загнать формулу. Но я не знаю как это всё сделать.
  • max.ch.88
    Senior Member
    • Oct 2018
    • 206

    #2
    А нужна ли такая математика? Возможно устройство отдаст нужное значение, но по другому OID? В противном случае действительно поможет только внешний скрипт. Для unix-среды копать в сторону bc или awk.

    Comment

    • reductor89
      Junior Member
      • Nov 2018
      • 12

      #3
      к сожалению только через формулу прогонять нужно. у оборудования есть два протокола по которому может отдать данные,cli и snmp.

      Comment

      • reductor89
        Junior Member
        • Nov 2018
        • 12

        #4
        awk не умеет работать с десятичными логарифмами(

        Comment

        • Kos
          Senior Member
          Zabbix Certified SpecialistZabbix Certified Professional
          • Aug 2015
          • 3404

          #5
          Originally posted by reductor89
          awk не умеет работать с десятичными логарифмами(
          Зато умеет с натуральными. Этого достаточно:

          lg x = (ln x / ln 10) = (lg e * ln x) ≈ (0,43429 * ln x)

          Ваша Википедия.
          Last edited by Kos; 16-11-2018, 11:33.

          Comment


          • reductor89
            reductor89 commented
            Editing a comment
            Подскажите,как правильно должна выглядеть формула для awk?
        • reductor89
          Junior Member
          • Nov 2018
          • 12

          #6
          Originally posted by Kos
          Зато умеет с натуральными. Этого достаточно:

          lg x = (ln x / ln 10) = (lg 10 * ln x) ≈ (0,43429 * ln x)

          Ваша Википедия.
          Подскажите,как правильно должна выглядеть формула для awk?

          Comment

          • Kos
            Senior Member
            Zabbix Certified SpecialistZabbix Certified Professional
            • Aug 2015
            • 3404

            #7
            Originally posted by reductor89
            Подскажите,как правильно должна выглядеть формула для awk?
            Ну подставьте в вашу формулу вместо десятичного логарифма натуральный, помноженный на указанную константу (один раз вычисленное значение десятичного логарифма числа e).
            10 * log10(X) - 40 ≈ 10 * (0,43429 * ln(X)) - 40 = 4,3429 * ln(X) - 40

            Соответственно, если у вас в скрипте переменной X присвоено значение, то дальше с помощью awk это можно пересчитать как-то так:
            Code:
            ...
            X=$(...)
            echo "$X" | awk '{print 4.3429 * log($1) - 40}'
            Соответственно, при X=204 возвращается -16.9039.

            Comment

            • reductor89
              Junior Member
              • Nov 2018
              • 12

              #8
              Originally posted by Kos
              Ну подставьте в вашу формулу вместо десятичного логарифма натуральный, помноженный на указанную константу (один раз вычисленное значение десятичного логарифма числа e).
              10 * log10(X) - 40 ≈ 10 * (0,43429 * ln(X)) - 40 = 4,3429 * ln(X) - 40

              Соответственно, если у вас в скрипте переменной X присвоено значение, то дальше с помощью awk это можно пересчитать как-то так:
              Code:
              ...
              X=$(...)
              echo "$X" | awk '{print 4.3429 * log($1) - 40}'
              Соответственно, при X=204 возвращается -16.9039.
              Сделал немного по другому.
              #!/bin/bash

              l=$(echo "l($1)/l(10)" | bc -l)
              echo $(echo "10*$l-40" | bc)

              Теперь пошла другая задача.
              Как этот скрипт использовать в элементе данных?
              Если элемент данных уже получаю по SNMP. Может как то можно добавить правило обнаружения, прототипы элементов данных
              Last edited by reductor89; 19-11-2018, 13:46.

              Comment

              • max.ch.88
                Senior Member
                • Oct 2018
                • 206

                #9
                По фэншую - надо рисовать модуль и делать calculated item
                Альтернатива немного аналоговая, но результат будет достигнут.
                Добавить в скрипт строку
                snmpget -v2c -c community HOST OID
                результат использовать в формуле.
                В конфиге агента нарисовать userparameter с вызовом скрипта.
                В хосте добавить item типа agent с созданным userparameter.

                Comment

                • reductor89
                  Junior Member
                  • Nov 2018
                  • 12

                  #10
                  Originally posted by max.ch.88
                  По фэншую - надо рисовать модуль и делать calculated item
                  Альтернатива немного аналоговая, но результат будет достигнут.
                  Добавить в скрипт строку
                  snmpget -v2c -c community HOST OID
                  результат использовать в формуле.
                  В конфиге агента нарисовать userparameter с вызовом скрипта.
                  В хосте добавить item типа agent с созданным userparameter.
                  Та дело в том,что мне придётся делать 512 скриптов тогда. Может есть способ по проще какой нибудь?

                  Comment

                  • max.ch.88
                    Senior Member
                    • Oct 2018
                    • 206

                    #11
                    Нет, скрипт будет один. В него надо только передать параметр HOST (имя или ip устройства)

                    Comment

                    • reductor89
                      Junior Member
                      • Nov 2018
                      • 12

                      #12
                      Разобрался как необходимо сделать. Расскажу может кому то что то будет полезно.
                      Создал скрипт в /usr/lib/zabbix/externalscripts
                      Создал Прототипы элементов данных с типом внешняя проверка, с ключом signal1.sh[{#SNMPVALUE}], передал параметр в скрипт и получил желаемый результ. Спасибо за помощь!
                      Last edited by reductor89; 20-11-2018, 10:35.

                      Comment


                      • slaventiy2007
                        slaventiy2007 commented
                        Editing a comment
                        Поделитесь скриптом. Такая же ситуация.
                    Working...