Ad Widget

Collapse

сложные проверки

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • annawhite
    Junior Member
    • Oct 2013
    • 12

    #1

    сложные проверки

    Уважаемые гуру поделитесь решением как лучше сделать:
    1. внешние проверки (нестандартное оборудование например работа с сом портами)
    2. в проверке возвращается сразу несколько значений.
    3. устройств много разных.

    Я пишу скрипт делающий запрос в устройство на основе шаблона устройства, который парсит данные и выдает в нужном формате.
    Как поступить лучше?
    А) создаю элемент данных как внешний скрипт и возвращаю данные в формате лога. Этот лог в общем то можно парсить и записывать новые значения данных. Можно ли (и как) в исчисляемых элементах данных обратиться к логу данного хоста (группы элементов) ? Конечно можно сделать триггер на таблице history_log но это совсем неудобно...
    Б) создаю элемент данных как внешний скрипт и возвращаю данные в текстовый файл с логом и потом парсю файл при его изменении. Но здесь встает задача как передать скрипту имя хоста (группу элементов данных).
    В) Скриптом передаю данные в траппер. Но тут встает опять же проблема Б пункта и возможно потеря данных при больших объёмах.

    Как это можно сделать?
    Может есть более элегантные решения?
    ЗЫ. Писать скрипт на возвращение одного значения не рассматривается...
    Спасибо!
  • Jimson
    Senior Member
    • Jan 2008
    • 1327

    #2
    Скрипт-демон, который собирает нужные данные и отправляет их по протоколу zabbix-sender. Необходимость в таких скриптах возникает не только когда нужно сформировать данные на основе нескольких исходных, так же существует проблема SNMP интерфейсов - при недоступности одного SNMP агента хост получает статус snmp_unavailable и перестает собирать SNMP данные с других агентов (интерфейсов), так же есть проблема обработки SNMP трапов - что бы сформировать нормальный лог или раскидать трапы приходящие с одного источника по разным "хостам", или хочется собирать "редко" меняющиеся данные не забивая базу мусором, но при этом обрабатывать изменение этих данных не спустя сутки/часы.

    Zabbix trapper достаточно производителен, даже обрабатывая данные в один тред можно не переживать что данные "пропадут", ну если написать нормально.

    Code:
     UID   PID  PPID CPU PRI NI     VSZ     RSS MWCHAN   STAT TT          TIME COMMAND
       0 42875     1   0  20  0   68052   19192 nanslp   Ss   ??       2:56.45 SkyEdge_NMS_VSAT_scanner: idle [21.19 snmp vps / 5.79 sent vps / 0 in queue] (perl
    Один из скриптов, собирает "редко" изменяющиеся данные VSAT с хаба, такие как версии софта, тип модема, шаблон конфигурации и тд, данные собираются с интервалами 5-10 минут, если есть изменения то отсылаются на траппер, в противном случае отсылаем данные раз в сутки.

    Нужные данные из конфигурации zabbix я беру из базы данных напрямую, например:
    Code:
    $zItemsSqlQuery = '
            SELECT h.host AS HOST, h.status AS STATUS, m.value AS CPA, i.key_ AS ITEM, p.host AS PROXY
            FROM hosts AS h
                JOIN items AS i ON i.hostid = h.hostid
                JOIN hostmacro AS m ON m.hostid = h.hostid
                LEFT OUTER JOIN hosts AS p ON p.hostid = h.proxy_hostid
            WHERE h.status IN (' . ZABBIX_HOST_STATUS_MONITORED . ',' . ZABBIX_HOST_STATUS_NOT_MONITORED . ')
                AND m.macro = \'{\$' . ZABBIX_VSAT_CPA_MACRO . '}\'
                AND i.type = ' . ZABBIX_ITEM_TYPE_TRAPPER . '
                AND i.status = ' . ZABBIX_ITEM_STATUS_ACTIVE . '
                AND i.key_ in (\'' . join('\',\'', keys %items) . '\')
        ';
    Правильнее, вроде как, использовать API, но кроме "правильности" никаких плюсов у API я не вижу для задачи "получить в readonly режиме данные", мало того что лишние запросы на php/apache, так еще и голову сломаешь как нужные тебе данные получить.

    Вообщем пилите

    Comment

    • annawhite
      Junior Member
      • Oct 2013
      • 12

      #3
      Jimson, спасибо за ответ!
      Скрипт демон на посылку трапов конечно вариант...
      Но я хотела сделать универсальный вариант при котором не надо при любом малейшем изменении лезть на какую-то машину и править там настройки... И четко соблюдать координацию между настройками заббикса и скриптами.

      Хотела бы еще повторить вопросы.
      1. Можно ли скрипту (в элементе данных внешняя проверка) передать имя хоста в качестве параметра?
      2. Можно ли в исчисляемых элементах данных обратиться к логу данного хоста (группы элементов) ? Вытащить одно значение из лога.

      Comment

      • Jimson
        Senior Member
        • Jan 2008
        • 1327

        #4
        Originally posted by annawhite
        И четко соблюдать координацию между настройками заббикса и скриптами.
        Но вы понимаете что вычисляемые элементы данных никак не синхронизированны с реальными данными которые они используют при вычислениях? Хотеть не вредно.

        Originally posted by annawhite
        Хотела бы еще повторить вопросы.
        1. Можно ли скрипту (в элементе данных внешняя проверка) передать имя хоста в качестве параметра?
        2. Можно ли в исчисляемых элементах данных обратиться к логу данного хоста (группы элементов) ? Вытащить одно значение из лога.
        1. {HOST.HOST}

        2. Что такое "лог данного хоста"? Можете в выражении вычисляемого элемента данных обращаться к данным так же как в выражении триггера: {host:key.func(params)}

        Comment

        • annawhite
          Junior Member
          • Oct 2013
          • 12

          #5
          Огромное спасибо!
          Можно еще "помучать" вопросами? ))
          2. Неправильно выразилась. К элементу данных типа лог в данном хосте.

          В {host:key.func(params)} не нашла как можно вырезать из подстроки из лога значение... или опять невнимательно читаю документацию?... например функцию last?

          Comment

          • Jimson
            Senior Member
            • Jan 2008
            • 1327

            #6
            Originally posted by annawhite
            В {host:key.func(params)} не нашла как можно вырезать из подстроки из лога значение... или опять невнимательно читаю документацию?... например функцию last?
            такого сделать нельзя

            Comment

            Working...