Ad Widget

Collapse

Полученные данные из "Списка обнаружения" передать в ключ "Прототипа элемента данных"

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Tonik
    Junior Member
    • Jun 2023
    • 13

    #1

    Полученные данные из "Списка обнаружения" передать в ключ "Прототипа элемента данных"

    Добрый день.
    Хочу проверять SMART у обнаруженных локальных дисков через Smartmontools.
    1) Создаю "Элемент данных"
    Code:
    Тип: Zabbix агент
    Ключ: system.run["smartctl --scan-open"]​
    Получаю следую​щие данные:
    Code:
    /dev/sda -d ata # /dev/sda, ATA device
    /dev/sdb -d sat # /dev/sdb [SAT], ATA device
    /dev/sdc -d sat # /dev/sdc [SAT], ATA device​
    В этом же элементе данных, делаю предобработку (JavaScript):​
    Code:
    const sd = value.match(/sd(.)/g);
    var data = [];
    for (i = 0; i <= sd.length; i++) {
    if (i % 2 == 0) {
    data.push({"disk": sd[i]});
    }
    }
    data.pop();
    return JSON.stringify(data);
    На выходе "Элемента данных" получается JSON​:
    Code:
    [{"disk":"sda"},{"disk":"sdb"},{"disk":"sdc"}]
    2) Создаю "Правило обнаружения":
    Code:
    Тип: Зависимый элемент данных
    Ключ: local.disk.list
    LLD макрос: LLD - {#DISK} и JSONPath - $..disk
    3) Создаю "Прототип элементов данных"
    Code:
    Тип: Zabbix агент
    Ключ: system.run["smartctl -A /dev/[{$DISK}]"]
    Но данные макроса в ключ подставляются в виде ​["sda"]​, а мне надо просто sda. Иначе не сработает команда smartctl.
    Надо в ключе каждого "прототипа элемента данных" получить ключ вида:
    Code:
    system.run["smartctl -A /dev/sda"]
    Как мне это провернуть? Подскажите, пожалуйста.
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Так вы же сами эти квадратные скобки пишете в прототипе:
    Code:
    Ключ: system.run["smartctl -A /dev/[{$DISK}]"]
    -----------------------------------^-------^

    Comment


    • Tonik
      Tonik commented
      Editing a comment
      Если прописать в прототипе элемента ключ вида system.run["smartctl -A /dev/{$DISK}"], то данные туда подставляться не будут. И Zabbix не сможет создать прототипы для каждого найденного значения из JSON, так как ключ у каждого элемента будет одинаковый - system.run["smartctl -A /dev/{$DISK}"], а с одинаковыми ключами элементы создавать нельзя. В ключе необходимо именно указать [{$DISK}], чтоб подставились найденные данные (​["sda"], ​["sdb"] и т.д.)
  • Hamardaban
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • May 2019
    • 2713

    #3
    пардон - промахнулся.

    Comment

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

      #4
      Если прописать в прототипе элемента ключ вида system.run["smartctl -A /dev/{$DISK}"], то данные туда подставляться не будут. И Zabbix не сможет создать прототипы для каждого найденного значения из JSON, так как ключ у каждого элемента будет одинаковый - system.run["smartctl -A /dev/{$DISK}"],
      1) пожалуйста, отвечайте отдельной репликой, а не комментарием к чужой реплике.
      2) в прототипе должен использоваться LLD-макрос, а не пользовательский. Т.е. не {$DISK}​, а {#DISK}​.

      Comment

      • Tonik
        Junior Member
        • Jun 2023
        • 13

        #5
        Originally posted by Kos
        1) пожалуйста, отвечайте отдельной репликой, а не комментарием к чужой реплике.
        2) в прототипе должен использоваться LLD-макрос, а не пользовательский. Т.е. не {$DISK}​, а {#DISK}​.
        Спасибо за ответ. Но даже при использовании {#DISK}​ данные приходили в виде ["sda"]. Но с помощью функции макросов, мне получилось превратить в нужное мне значение:
        Code:
        system.run["smartctl -A /dev/{{#DISK}.regsub(\"..(...)\", \1)}"]
        Вопрос решился, буду теперь через зависимые элементы парсить вывод смарт у каждого диска.

        Comment

        Working...