Ad Widget

Collapse

lld нескольких БД oracle

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #16
    Всё пытаюсь понять, что же Вы делаете, и всё не уверен, что понимаю правильно...

    Начнём с конца.

    Есть правило LLD, которому на вход подаётся JSON вида:
    Code:
    {"data": [{"{#INST_NAME}": "ONIXDB"},{"{#INST_NAME}": "akdb"}]}
    (видимо, список инстансов). ОК.

    На основе этого правила генерируются айтемы (элементы данных), в прототипах которых для ключей указано:
    Code:
    dbinfo[{#INST_NAME} --json]
    ОК, до этого места понятно. С данным JSON-ом должно появиться два айтема (по числу инстансов) с такими ключами:
    • dbinfo[ONIXDB --json]
    • dbinfo[akdb --json]

    а) они появляются?
    б) данные в них поступают (смотреть в Latest data, желательно отметив в фильтре "галочки" "Show items without data" и "Show details")?

    Что делается дальше, уже менее понятно. Поправьте, пожалуйста, где я ошибаюсь.

    Видимо, данные в указанные айтемы поступают; в частности - для айтема с ключом dbinfo[akdb --json] в качестве значение приходит такой текст:
    Code:
    {"dbinfo[akdb]": {"instname": "akdb" }}
    В том же правиле обнаружения в прототипах, кроме айтема с ключом dbinfo[{#INST_NAME} --json], задан ещё и другой айтем - с ключом:
    Code:
    instname[{#INST_NAME}]
    Он описан как зависимый от предыдущего, и в правилах препроцессинга указано, что получать значения надо из JSON-а, возвращаемого как значение предыдущего айтема.

    Т.е. должны получиться ещё два айтема с ключами:
    • instname[ONIXDB]
    • instname[akdb]

    В частности, предполагается, что значением айтема instname[akdb] будет строка "akdb".

    Они создаются?
    Если да - то приходят ли в них какие-то значения?
    Становятся ли эти айтему неподдерживаемыми (помеченными значком "х" в красном квадратике)? Если да - то какое сообщение "светится" при нажатии на эту пометку?

    Если все мои предположения верны, то да - Вы правы:
    Наверное, надо писать
    $.dbinfo[akdb].instname,
    но тогда нужно использовать макрос (он на этом этапе уже определён?)
    Макрос возвращается правилом в JSON-е, по которому работает правило LLD, там он есть. Вы же в прототипе строите айтем с использованием данного макроса; единственное - я не уверен, что можно LLD-макросы использовать в правилах препроцессинга. Логично было бы написать там:
    Code:
    $.dbinfo[{#INST_NAME}].instname
    , но точно сказать не могу - у меня нет Zabbix v3.4. К сожалению, официальная документация ничего не говорит об LLD-макросах в правилах препроцессинга, поэтому, может оказаться, что они там (пока?) не поддерживаются. Но даже если так, то можно обойти эту проблему, воспользовавшись в препроцессинге регулярными выражениями вместо разбора JSON-а (по крайней мере, для такого простого JSON-а, как в Вашем примере).

    Comment

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

      #17
      Originally posted by Kos
      [...] единственное - я не уверен, что можно LLD-макросы использовать в правилах препроцессинга. Логично было бы написать там:
      Code:
      $.dbinfo[{#INST_NAME}].instname
      , но точно сказать не могу - у меня нет Zabbix v3.4. К сожалению, официальная документация ничего не говорит об LLD-макросах в правилах препроцессинга, поэтому, может оказаться, что они там (пока?) не поддерживаются.
      Похоже, что таки не поддерживается. Сходил, проголосовал за этот feature request.

      Comment

      • Alexey.Kuzmin
        Member
        • Jun 2017
        • 47

        #18
        Kos, спасибо Вам большое за подробный анализ!
        а) они появляются?
        б) данные в них поступают (смотреть в Latest data, желательно отметив в фильтре "галочки" "Show items without data" и "Show details")?
        - да, данные поступают.

        В частности, предполагается, что значением айтема instname[akdb] будет строка "akdb".

        Они создаются?
        Items создаются, но - не заполняются: не работает препроцессинг. Макросы, как Вы выяснили, не поддерживаются.
        Пытаюсь разобрать строку с помощью регулярных выражений, но пока не очень получается.
        Сделал так: "instname": "(\w+)"
        Во втором поле - \2
        Last edited by Alexey.Kuzmin; 14-02-2018, 08:58.

        Comment

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

          #19
          Спасибо за ответ.
          Originally posted by alexey.kuzmin
          Пытаюсь разобрать строку с помощью регулярных выражений, но пока не очень получается.
          Сделал так: "instname": "(\w+)"
          Во втором поле - \2
          Ну да, как-то так. Только у Вас в регулярном выражении всего одна группа (в круглых скобках), а во втором поле Вы ссылаетесь на вторую. Должно бы быть "\1" (без кавычек).

          Comment

          • Alexey.Kuzmin
            Member
            • Jun 2017
            • 47

            #20
            УРА!!!! Заработало!
            Спасибо Вам БОЛЬШОЕ!
            Буду дальше настраивать.

            Comment

            • Alexey.Kuzmin
              Member
              • Jun 2017
              • 47

              #21
              Сделал так: из массива dbinfo данные получаю через JSON.
              Работает для двух БД отлично.
              Теперь вопрос: как сделать lld в каждой из БД (определить список TBS и т.д.)?
              Можно ли делать зависимые lld?
              Можно ли для каждой БД (для каждого найденного экземляра) делать свой lld (так же, как получали dbinfo)?
              Как это прописать (что-то, типа db_lld[*]?

              Comment

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

                #22
                Как я говорил - не знаю; не уверен, что такое возможно
                У нас соответствующие LLD обрабатывают все объекты единым списком. Т.е. для, скажем, tablespace-ов JSON возвращает в одном списке все TBS-ы для всех баз данных, указывая для каждого из них, к какой базе данных он относится (отдельным макросом). См. примеры, которые я приводил выше.

                Comment

                Working...