Ad Widget

Collapse

Макрос IP адрес хоста

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Anro33
    Junior Member
    • Feb 2020
    • 5

    #1

    Макрос IP адрес хоста

    Доброго времени суток Господа!

    Есть хост с мониторинга через Zabbix-агент подключенный по DNS (т.к. работает DHCP и IP адрес может меняться) нужно при срабатывании определенного события что бы отправлялись оповещения причем не только с именем хоста но и с IP-адресом. Макрос {HOST.IP} либо не срабатывает (насколько я понял если в поле: Интерфейсы агента ничего не указано) либо выдает значении указанное в этом поле вручную. Вопрос: откуда можно взять действующий IP-адрес хоста и как его добавить отправляемое уведомление? Например, по sms J
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Постановка задачи некорректна.

    Как верно замечено, макрос {HOST.IP} - это не IP-адрес, реально использующийся на хосте, а свойство объекта "хост" в настройках Zabbix-а, при помощи которого Zabbix-сервер знает, где искать этот хост при необходимости к нему обратиться (чтобы запросить данные или выполнить команду). Он может и не быть прописан вообще (например, у нас практически для всех хостов прописаны не IP-адреса, а DNS-имена).
    При этом, если опрос идёт со стороны сервера по IP, а у хоста меняется IP-адрес, то без корректировки этого адреса на Zabbix-сервере он до хоста просто не достучится.

    С другой стороны, для агентов, работающих только в активном режиме, эта настройка не обязательна (там агент обращается к серверу, а не сервер к агенту, и пофиг, какой адрес прописан со стороны сервера).

    Наконец, с третьей стороны, у хоста может быть несколько IP-адресов (даже если не считать loopback-а).

    В качестве альтернативы могу предложить такой путь:
    1. Сделать отдельный элемент данных (ЭД), в который собирать список всех актуальных IP-адресов хоста через некоторый разделитель (например, запятую). Тип данных для этого ЭД - "Text" (поскольку он может быть достаточно длинным на хосте с несколькими десятками IP-адресов), а сам тип ЭД - "Zabbix agent (active)" (поскольку иначе при смене айпишника до агента будет не достучаться). Поскольку IP-адрес не меняется часто (даже при работе по DHCP), то частоту опроса можно поставить относительно продолжительную - скажем, раз в час.
    2. Выбрать какое-либо поле в таблице Inventory, которое заполнять данными из этого ЭД. Например, хорошо подходит поле "Host networks" (поскольку оно довольно большое).
    3. В шаблон уведомления для нужного триггера добавить макрос, разворачивающийся в выбранное поле Inventory. Скажем, для данного примера - {INVENTORY.HOST.NETMASK1}.

    Если такой вариант устраивает, то можно обсуждать дальше. Например, я только что решал такую задачу для операционок Windows/Linux/Solars/AIX для версии Zabbix 4.0 - могу поделиться настройками соответствующих ЭД для каждой из них, чтобы собирать все IPv4-адреса (кроме loopback) в один список через запятую.
    Last edited by Kos; 03-02-2020, 14:05.

    Comment

    • exesition
      Senior Member
      • Nov 2019
      • 121

      #3
      Originally posted by Kos
      Постановка задачи некорректна.

      Как верно замечено, макрос {HOST.IP} - это не IP-адрес, реально использующийся на хосте, а свойство объекта "хост" в настройках Zabbix-а, при помощи которого Zabbix-сервер знает, где искать этот хост при необходимости к нему обратиться (чтобы запросить данные или выполнить команду). Он может и не быть прописан вообще (например, у нас практически для всех хостов прописаны не IP-адреса, а DNS-имена).
      При этом, если опрос идёт со стороны сервера по IP, а у хоста меняется IP-адрес, то без корректировки этого адреса на Zabbix-сервере он до хоста просто не достучится.

      С другой стороны, для агентов, работающих только в активном режиме, эта настройка не обязательна (там агент обращается к серверу, а не сервер к агенту, и пофиг, какой адрес прописан со стороны сервера).

      Наконец, с третьей стороны, у хоста может быть несколько IP-адресов (даже если не считать loopback-а).

      В качестве альтернативы могу предложить такой путь:
      1. Сделать отдельный элемент данных (ЭД), в который собирать список всех актуальных IP-адресов хоста через некоторый разделитель (например, запятую). Тип данных для этого ЭД - "Text" (поскольку он может быть достаточно длинным на хосте с несколькими десятками IP-адресов), а сам тип ЭД - "Zabbix agent (active)" (поскольку иначе при смене айпишника до агента будет не достучаться). Поскольку IP-адрес не меняется часто (даже при работе по DHCP), то частоту опроса можно поставить относительно продолжительную - скажем, раз в час.
      2. Выбрать какое-либо поле в таблице Inventory, которое заполнять данными из этого ЭД. Например, хорошо подходит поле "Host networks" (поскольку оно довольно большое).
      3. В шаблон уведомления для нужного триггера добавить макрос, разворачивающийся в выбранное поле Inventory. Скажем, для данного примера - {INVENTORY.HOST.NETMASK1}.

      Если такой вариант устраивает, то можно обсуждать дальше. Например, я только что решал такую задачу для операционок Windows/Linux/Solars/AIX для версии Zabbix 4.0 - могу поделиться настройками соответствующих ЭД для каждой из них, чтобы собирать все IPv4-адреса (кроме loopback) в один список через запятую.
      Тоже интересно было бы такое решение увидеть!

      Comment

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

        #4
        Originally posted by exesition
        Тоже интересно было бы такое решение увидеть!
        Если Вы о моём решении, как в инвентори собирать список IP-адресов каждого хоста, то это сделано так.

        В шаблон для всех операционок добавлен ещё один элемент данных:
        • Name: IP Addresses
        • Type: Zabbix agent (active)
        • Type of information: Text
        • Update interval: 1d
        • Applications: Network interfaces
        • Populates host inventory field: Host networks
        • Description: Coma-separated list of IPv4 addresses
        Кроме того, в препроцессинг добавлен один шаг: "Right trim" символа "," (запятая).
        Key для всех операционок одинаковый - system.run["..."], но сама выполняемая команда отличается:

        Linux:
        Code:
        system.run["ip addr show|awk -F'[/ ]+' 'BEGIN {ORS=\",\"} $2==\"inet\" && $3!~\"^127.0.0.\" {print $3}'"]
        AIX:
        Code:
        system.run["ifconfig -a|awk 'BEGIN {ORS=\",\"} $1==\"inet\" && $2!~\"^127.0.0.\" {print $2}'"]
        Solaris:
        Code:
        system.run["ifconfig -a|awk 'BEGIN {ORS=\",\"} $1==\"inet\" && $2!=\"0.0.0.0\" && substr($2,1,8)!=\"127.0.0.\" {print $2}'"]
        Windows:
        Code:
        system.run["for /F \"tokens=1,14\" %I in ('ipconfig') do @if %I==IPv4 (set /P A=%J,<nul)"]
        По сути, с помощью штатной команды операционной системы опрашивается список IP-адресов, который затем с помощью awk (для *nix) или цикла for (для Windows) заворачивается в одну строку через запятую. Финальная запятая потом убирается препроцессингом.

        Comment

        • Victor Sklyarov
          Senior Member
          • Apr 2016
          • 184

          #5
          Не будет работать на всех версиях Win. Вот вывод 8.1 IPv4-адрес. . . . . . . . . . . . : 192.168.0.106
          Лучше так: system.run["for /F \"tokens=1,14\" %I in ('ipconfig ^| FIND \"IPv4\"') do (set /P A=%J,<nul)"]
          Last edited by Victor Sklyarov; 27-02-2020, 17:46. Reason: Не понимаю, почему удаляются экранирующие слэши

          Comment

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

            #6
            Originally posted by Victor Sklyarov
            Не понимаю, почему удаляются экранирующие слэши
            Используйте возможности форматирования на этом форуме. В верхней правой части окна ввода есть малозаметная кнопочка "A", при нажатии на которую появляется/убирается панель инструментов. В этой панели, в свою очередь, есть кнопка "#", которая добавляет тег "CODE". Всё, что внутри этого тега, отображается "как есть" и моноширинным шрифтом. Ну, почти всё :-)

            Originally posted by Victor Sklyarov
            Не будет работать на всех версиях Win. Вот вывод 8.1: IPv4-адрес. . . . . . . . . . . . : 192.168.0.106
            Лучше так: system.run["for /F "tokens=1,14" %I in ('ipconfig ^| FIND "IPv4"') do (set /P A=%J,<nul)"]
            Я правильно понял, что на русскоязычной версии Windows в выводе команды "ipconfig" будет не строка "IPv4 Adress", а "IPv4-адрес" (одним словом)?
            Если так, то спасибо за поправку, принимается.
            К нас просто все версии Windows - англоязычные.

            Comment

            • Victor Sklyarov
              Senior Member
              • Apr 2016
              • 184

              #7
              Да, Вы поняли правильно.
              А со слешами просто сработала экранировка, т.е. // И проблема решилась.

              Comment

              Working...