Ad Widget

Collapse

Принцип создания LLD обнаружения

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Danethz
    Junior Member
    • Aug 2018
    • 18

    #1

    Принцип создания LLD обнаружения

    Доброго времени суток, товарищи!
    В наличии Zabbix 3.4

    Прошу развеять моё недопонимание в области LLD:
    Хочу с помощью .ps1-скрипта обнаружить все сертификаты в личном хранилище пользователя и вывести информацию о каждом. Триггер повесить только на дату окончания действия.
    С помощью User Parametr'a забираю у хоста JSON:
    Code:
    zabbix_get -s $PC -k Certs_Info
    [
        {
            "CERTNAME":  " \"ООО \"\"РОГА-И-КОПЫТА"\"\"",
            "ISSUER":  "\"АО \"\"ПФ \"\"СКБ КОНТУР\"\"\"",
            "EXPIRES":  "20.10.2019"
        },
        {
            "CERTNAME":  "1EAC630F-1983-4C6E-978D-6957E25A2E70",
            "ISSUER":  "Apple iPhone Device CA",
            "EXPIRES":  "17.01.2018"
        },
        {
            "CERTNAME":  " \"ООО \"\"ДЕМЬЯН\"\"\"",
            "ISSUER":  "\"АО \"\"ПФ \"\"СКБ КОНТУР\"\"\"",
            "EXPIRES":  "01.06.2019"
        }
    ]
    Могу ли я создать элементы данных на основании данного JSON'а без дополнительных запросов? Какой ключ необходимо указать в элементе?
    Либо же мне необходимо так же сделать скрипт, который в качестве параметра будет принимать {#CERTNAME} и выдавать информацию о сертификате в ответе?

    Заранее спасибо всем ответившим
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Сначала немного позанудничаю.
    Во-первых, у вас некорректный JSON (в третьей строке после РОГА-И-КОПЫТА незаэкранированная кавычка).
    Во-вторых, JSON для LLD должен открываться левой фигурной скобкой и корневым элементом "data" (см. пример в документации, в конце страницы). В версии 4.2 собираются это требование убрать, но 4.2 ещё не вышла.

    По существу - да, Вы правы: в общем случае получение списка элементов для работы механизма LLD (создания айтемов/триггеров) и получение значений для этих айтемов - это разные операции, поэтому, как правило, используются разные скрипты (один выдаёт список в виде JSON для LLD, другой - конкретные значения).
    Однако, начиная с версии 3.4 в Zabbix-е появились такие вещи как зависимые элементы данных и препроцессинг.
    Сразу оговорюсь - на практике я этого не делал, но, теоретически, можно сделать один айтем с типом "Text", в который засылать исходный JSON; а затем сделать несколько зависимых от него айтемов. Один из зависимых айтемов - собственно, тот, который используется для LLD. Остальные айтемы (созданные через прототипы механизмом LLD) также используют первый айтем (зависимы от него), но дополнительно применяют препроцессинг для парсинга исходного JSON-а и выдёргивания оттуда нужных фрагментов.

    Напоследок замечу, что желательно дату выводить в таком формате, чтобы её было удобно использовать в триггере. Например, не "DD.MM.YYYY", а "YYYYMMDD" (тогда её можно хотя бы сравнить с результатом триггерной функции date() на больше/меньше). Впрочем, это тоже можно поправить через препроцессинг.

    Comment

    • Danethz
      Junior Member
      • Aug 2018
      • 18

      #3
      Спасибо за ответ
      Originally posted by Kos
      Сначала немного позанудничаю.
      У меня сейчас недопонимание логики работы заббикса, поэтому за такое "занудничество" я Вам искренне благодарен.
      Originally posted by Kos
      Во-первых, у вас некорректный JSON
      JSON создался из командлета PowerShell - CovertTo-JSON, судя по всему, придётся делать руками
      По поводу даты тоже спасибо - избавили от возможного геморроя )
      Буду пробовать зависимые элементы данных. Не получится - буду делать дополнительный скрипт для забора данных из LLD.
      Отпишусь

      Comment

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

        #4
        Originally posted by Kos
        В версии 4.2 собираются это требование убрать, но 4.2 ещё не вышла.
        Ну вот, накаркал :-)
        Версия 4.2 вышла как раз сегодня.

        Update: Ну вот, похоже, что мои теоретические изыскания были в правильном направлении, но несколько преждевременными.
        Один из зависимых айтемов - собственно, тот, который используется для LLD
        Это возможно, начиная с версии 4.2.
        Last edited by Kos; 02-04-2019, 13:16.

        Comment

        • Danethz
          Junior Member
          • Aug 2018
          • 18

          #5
          В итоге пошел путём дополнительных скриптов, однако, и тут странный затык:
          Создал LLD правило, с ключом "Certs_JSON", на что клиент возвращает:
          Code:
          {"data":[{"#CERTNAME":"ООО РОГА-И-КОПЫТА","#ISSUER":"АО ПФ СКБ КОНТУР","#EXPIRES":"20191020"},{"#CERTNAME":"1EAC630F-1983-4C6E-978D-6957E25A2E70","#ISSUER":"Apple iPhone Device CA","#EXPIRES":"20180117"},{"#CERTNAME":"ДЕМЬЯН","#ISSUER":"АО ПФ СКБ КОНТУР","#EXPIRES":"20190601"}]}
          Проверил JSON на валидность с помощью https://jsonformatter.curiousconcept.com/ , говорят, всё в порядке.
          В правиле LLD, создаю макрос:
          Code:
          {#CERTNAME} matches .*
          Создаю прототип элемент данных:
          Code:
          Имя - Cent_Name
          Ключ - Certs_Info[{#CERTNAME},0]
          И в статусе LLD правила вижу:
          Code:
          Cannot accurately apply filter: no value received for macro "{#CERTNAME}".
          Сначала думал, что проблема в кодировке и попробовал использовать "{#EXPIRES}", где только цифры, но ошибка осталась прежней.
          Судя по руководству (https://www.zabbix.com/documentation...on/whatsnew344) - "JSON данные не содержат значения для соответствующего макроса".
          Подскажите, в чём может быть проблема?

          Comment

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

            #6
            Originally posted by Danethz
            Подскажите, в чём может быть проблема?
            Почти всё правильно, кроме одного. Имя макроса реально должно включать в себя фигурные скобки (они являются частью его имени).
            Т.е. в JSON-е должно быть не:
            ...{"#CERTNAME":"ООО РОГА-И-КОПЫТА",...
            а так:
            ...{"{#CERTNAME}":"ООО РОГА-И-КОПЫТА",...

            Comment

            • Danethz
              Junior Member
              • Aug 2018
              • 18

              #7
              Originally posted by Kos
              Имя макроса реально должно включать в себя фигурные скобки (они являются частью его имени).
              Благодарствую!!! Заработало
              Праздный интерес - стандарт JSON разный для сайта валидации и заббикса? Либо же это просто формат "NAME":"VALUE", где NAME - {#CERNAME}. То есть просто сам заббикс хочет видеть такой формат?
              И проблема кодировки всё же присутствует, создавшиеся элементы:
              Certs_JSON: Cert Expires Certs_Info[1EAC630F-1983-4C6E-978D-6957E25A2E70,2]
              Certs_JSON: Cert Name Certs_Info[??? ???????-?????,0]
              Не сочтите за наглость, сразу же, дополнительный вопрос:
              Формирую дату окончания срока действия сертификата по Вашему совету "Например, не "DD.MM.YYYY", а "YYYYMMDD"". Подскажите, как триггером проверить, что-то вроде:
              $date = (Get-date).adddays(30)
              if ({#EXPIRES} -le $date ) - алярма!
              Last edited by Danethz; 03-04-2019, 08:54.

              Comment

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

                #8
                Да, LLD-макросы Zabbix должны иметь именно такой формат.
                Да, кодировка должна быть UTF-8.

                Comment

                • Danethz
                  Junior Member
                  • Aug 2018
                  • 18

                  #9
                  Никак не могу забороть проблему кодировки
                  Клиент при логоне создаёт Cert_JSON.txt, с помощью:
                  Code:
                  Set-Content -Encoding UTF8 -Path "C:\Certs_JSON.txt"
                  Открываю этот файл в NotePad++, вижу, что его кодировка UTF-8
                  UserParameter на клиенте:
                  Code:
                  Certs_JSON,powershell.exe "Get-Content C:\Certs_JSON.txt -Encoding UTF8"
                  Захожу на Zabbix-сервер с помощью putty, в настройках подключения кодировка - UTF-8.
                  Code:
                  zabbix_get -s $pc -k Cert_JSON
                  И вывод:
                  Code:
                  {"data":[{"{#CERTNAME}":"▒▒▒ ▒▒▒▒▒▒▒-▒▒▒▒▒▒","{#ISSUER}":"▒▒ ▒▒ ▒▒▒ ▒▒▒▒▒▒","{#EXPIRES}":"20191020"},{"{#CERTNAME}":"1EAC630F-1983-4C6E-978D-6957E25A2E70","{#ISSUER}":"Apple iPhone Device CA","{#EXPIRES}":"20180117"},{"{#CERTNAME}":"▒▒▒ ▒▒▒▒▒▒▒-▒▒▒▒▒","{#ISSUER}":"▒▒ ▒▒ ▒▒▒ ▒▒▒▒▒▒","{#EXPIRES}":"20190601"}]}
                  Не понимаю, что ему не нравится...

                  Comment

                  Working...