Ad Widget

Collapse

Отслеживание хоста с динамическим адресом (без DNS)

Collapse
This topic has been answered.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Bag
    Junior Member
    • Dec 2024
    • 13

    #16
    При замене уровня логировани на 4-й в Zabbix.log стали попадать множество других сообщений, но отработки скрипта я так и не вижу пока, хотя в виджите Action log событие показывается со статусом Executed.
    Tag, записанный в шаблоне хоста, не передаётся хосту.
    И Tag триггера не прописывается в шапке хоста, хотя в самой проблеме я Таг вижу.
    Возникает сомнение о возможности передачи значения Таг-а триггера через системный макрос {EVENT.TAGS.<имя_тега>}
    Last edited by Bag; 09-01-2025, 15:44.

    Comment

    • Bag
      Junior Member
      • Dec 2024
      • 13

      #17
      Originally posted by Kos
      Прежде чем что-то возвращать - логируйте, и должны увидеть в логах.
      Я добавил в код скрипта: Zabbix.log(3,'Test Log');
      Теперь весь скрипт:
      Zabbix.log(3,'Test Log. Incoming: ' + value);
      return value;
      И вижу теперь логировавние!!!!!
      Tag передаётся верно.
      Продолжу писать код скрипта..
      Last edited by Bag; 09-01-2025, 17:39.

      Comment

      • Bag
        Junior Member
        • Dec 2024
        • 13

        #18
        Originally posted by Kos
        Trigger Action может быть один, настроенный, например, на использование тега, которым помечен триггер.
        А значением тега может являться, например, последнее значение элемента данных из триггерного выражения, взятое при помощи макроса {ITEM.VALUE}.
        Только скрипту нужно ещё, кроме этого, передавать ссылку на тот хост (или даже на интерфейс хоста), который нужно редактировать. Но его тоже можно держать в каком-нибудь теге, которым помечать либо сам триггер, либо элемент данных, который в нём используется.

        Опять непроходимый тупик!
        Дело в том, что ссылку передавать я могу только в виде имени целевого хоста.
        Не могу придумать как при помощи API по имени хоста получить его ID, чтобы потом поменять при помощи метода hostinterface.replacehostinterfaces.
        Если не трудно, намекните пожалуйста

        Comment

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

          #19
          Originally posted by Bag
          Не могу придумать как при помощи API по имени хоста получить его ID, чтобы потом поменять при помощи метода hostinterface.replacehostinterfaces.
          Если не трудно, намекните пожалуйста
          Метод host.get (ссылка).
          Что-то вроде такого:
          Code:
          {
            "jsonrpc": "2.0",
            "method": "host.get",​
            "params": {​
              "output": ["hostid"],​
              "filter": {​
                "host": ​"техническое_имя_хоста"
              }
            },
            "id": 1
          }

          Comment

          • Bag
            Junior Member
            • Dec 2024
            • 13

            #20
            Originally posted by Kos

            Метод host.get (ссылка).
            Что-то вроде такого:
            Code:
            ......
            Спасибо.
            Затык был связан вообще с обращением к API.
            Это я поборл. Работет. ID Хоста получает!!!
            Но! Теперь я совсем потерял надежду. Даже расстроился. После вызова метода hostinterface.replacehostinterfaces
            Code:
            {
            "jsonrpc": "2.0",
            "method": "hostinterface.replacehostinterfaces",
            "params": {
              "hostid": hostid,
              "interfaces": {
              "dns": "",
              "ip": "192.168.0.1",
              "main": 1,
              "port": PortIF,
              "type": 1,
              "useip": 1
            }
            },
            "auth": token.trim(),
            "id": 1
            };
            получил ответ API: "API error: Invalid params.; Interface is linked to item "#1: CPU utilization"".
            Получается нельзя поменять "по горячему интерфейс хоста, к которому уже прикреплён item... ?
            Вера во всемогущество API серьёзно пошатнулась.
            Пожалуйста подскажите как это можно обойти. В доке этого не пишут
            Last edited by Bag; 14-01-2025, 07:56.

            Comment

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

              #21
              Originally posted by Bag

              Спасибо.
              Затык был связан вообще с обращением к API.
              Это я поборл. Работет. ID Хоста получает!!!
              Но! Теперь я совсем потерял надежду. Даже расстроился. После вызова метода hostinterface.replacehostinterfaces
              [...]

              получил ответ API: "API error: Invalid params.; Interface is linked to item "#1: CPU utilization"".
              Получается нельзя поменять "по горячему интерфейс хоста, к которому уже прикреплён item... ?
              Вера во всемогущество API серьёзно пошатнулась.
              Пожалуйста подскажите как это можно обойти. В доке этого не пишут
              Всё верно получаете. Метод hostinterface.replacehostinterfaces - это заменить все интерфейсы хоста на новые, в соответствии с предоставленным списком. Т.е. удалить старые интерфейсы и добавить новые; но нельзя удалить интерфейс, который уже используется каким-то элементом данных.
              Вам нужно не заменить список интерфейсов, а обновить свойства уже существующего интерфейса - это делается методом hostinterface.update.
              Только сначала нужно найти ID нужного интерфейса - либо вызовом метода hostinterface.get для конкретного хоста, либо прямо при вызове host.get, используя при вызове параметр selectInterfaces.
              Last edited by Kos; 14-01-2025, 10:06.

              Comment

              • Bag
                Junior Member
                • Dec 2024
                • 13

                #22
                Вааааууу!!
                Работает!!!
                Честно говоря, я уже был в шаге от имплементации Вашего предпоста. ID интерфейса давно получаю.
                Ваш комментарий меня только укрепил.
                Если бы не сработал hostinterface.update, я бы пробовал host.update.

                Счас на тестовом хосте скрипт отрабатывает "на ура". Переношу в скрипты trigger Action-а, которые у меня запускаются на основе триггеров шаблона (166 хостов.). Эти скрипы запускаются (с учётом количества хостов) примерно 1 раз в 10 мин. По-этому отлаживать их сработку и корректную передачу в них данных было занятием нервным (каждая коррекция скрипта требовала ожидания до 10мин).
                После отладки этой отработки процесс кодирования пошёл веселей. Я создал фиктивный script-item на произвольном хосте, и там уже можно нажимать "Execute now".
                Для контроля выходных значений использовал предложенную Вами функцию Zabbix.log() . Примерно так: Zabbix.log(3, prompt + ' Host Name: ' + DeviceHostName + '; ' + NewHostadr + ' API - Proced..'), где prompt использовал для выделения сообщения в логе.
                Для наблюдения за логом нарисовал панельку с виджетом item history, настроенную на item Zabbix.log хоста Zabbix server, с удобными для себя highlights.

                Это я всё описал для других участников форума. Конечно Вам это наверное не очень интересно.
                Ну а Вам ОГРОМНОЕ СПАСИБО за поддержку, терпение, и участие!
                Надеюсь, что я не слишком надоел.

                Comment

                Working...