Ad Widget

Collapse

Не обновляется ip активного агента при авторегистрации

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Victor Sklyarov
    Senior Member
    • Apr 2016
    • 184

    #16
    Похожая проблема возникла у меня. Так же, как и у вас, имя агента прописывается в конфигурации = IP. Проблема возникала из-за копирования сотрудниками агента с узла на узел, либо клонирования образа OS с имплементированным агентом. Тут же появлялся узел с уже известным именем агента "Вася Пупкин" (задано жёстко в конфигурации агента) и все свои метрики активный агент начинал складывать в уже известный узел с таким же именем. И, конечно же, добавлял свой интерфейс к "первородному" узлу Вася Пупкин. Сначала у меня была идея использовать HostnameItem=system.run[ask_ip.bat], чтобы при изменении IP узла менялось и имя агента. Идея потерпела фиаско. Обсуждение можно посмотреть https://support.zabbix.com/browse/ZBX-21227 Суть -это не работает, агент стабильно падает. Пришлось жёстко прописать Hostname=IP Для этого написал батник, который на этапе установки спрашивал IP и прописывал в конфиг агента. И получил то, что описано выше.
    Создал метрику активный zabbix agent - agent.hostname. Её значение равно IP узла при развёртывании агента. Далее создал метрику активный zabbix agent, определяющую собственный IP wmi.getall["root\cimv2","select IPAddress from Win32_NetworkAdapterConfiguration where IpEnabled=TRUE and DHCPEnabled=FALSE"] У нас все IP - статика, потому DHCPEnabled=FALSE. Далее предобработка для выделения нужных IP Обсуждение здесь . Добавил триггер сравнения этих метрик и тут же получил ворох событий несовпадения имени и IP, поскольку все активные агенты с одинаковым именем, но разными интерфейсами асинхронно складывают метрику в метрику "первородного" узла. Что делать с событиями, порождаемыми триггером, решите сами.​ Если же у вас динамический IP, получаемый по DHCP, то описанная вами ситуация - штатное поведение. В этом случае есть несколько путей - либо настроить DNS и обращаться по DNS имени, либо зарезервировать все адреса узлов на DHCP сервере, чтобы они не менялись, либо по событию несовпадения IP и имени менять имя агента в конфигурации через выполнение батника system.run[change_name_agent.bat] Пропишите имя агента в отдельном конфигурационном файле и меняйте его перезаписью, что-то типа echo.Hostname=xx.xx.xx.xx>new_name.conf. Не забудьте после этого вставить в батнике команду перестартовки агента.​
    Last edited by Victor Sklyarov; 15-01-2023, 12:37.

    Comment

    • Griboed0ff
      Senior Member
      • Sep 2022
      • 153

      #17
      Приветствую! У меня немного другая ситуация, у меня в конфигах не прописано имя и не будет, так же у нас dhcp. Имя и ip взял из макроса и элемента данных, далее триггер по условию, если больше одного интерфейса, то скрипт меняет все интерфейсы на один с именем днс и ip на те, что из макросов. Все!
      Last edited by Griboed0ff; 16-01-2023, 11:51.

      Comment

      • Victor Sklyarov
        Senior Member
        • Apr 2016
        • 184

        #18
        Тогда совсем просто. Метрика - собственный IP wmi.getall["root\cimv2","select IPAddress from Win32_NetworkAdapterConfiguration where IpEnabled=TRUE"]->триггер на изменение ->скрипт, удаляющий ненужный интерфейс. Вообще-то неиспользуемый интерфейс не влияет на сбор данных. Запустите по cron раз в час задачку ищущую множественные интерфейсы. На работу ваших манагеров это никак не повлияет. Адрес узла может поменяться в любой момент, в том числе и в отрезок времени между считыванием адресов и подготовкой кого-то отчёта. Т.е. массив адресов всегда неактуален. Есть вероятность, растущая со временем, что в массиве произошли изменения. Поэтому стремится к мгновенному удалению старого интерфейса бессмысленно. Ну и совсем непонятно, что значит в конфиге не прописано имя агента? Этого не может быть, либо Hostname, либо HostnameItem. Иначе как он зарегистрируется на сервере zabbix?
        Last edited by Victor Sklyarov; 16-01-2023, 12:05.

        Comment

        • Griboed0ff
          Senior Member
          • Sep 2022
          • 153

          #19
          Originally posted by Victor Sklyarov
          Метрика - собственный IP wmi.getall["root\cimv2","select IPAddress from Win32_NetworkAdapterConfiguration where IpEnabled=TRUE"]->триггер на изменение ->скрипт, удаляющий ненужный интерфейс.
          К сожалению такой метод получения адреса мне не подходит. Есть разные сетевухи: проводные, вайфай, так же телефон как модем, а еще мои агенты приходят через впн программулину, а некоторые уже сразу во внутренней сети. Самый пока действенным способом оказалось, брать последний IP в списке интерфейсов. Я в целом и общем понимаю, что эти адреса и имена не имеют какого-то значения для активного агента, и что адреса не будут в любой момент времени актуальными, но решение, которое помогли выработать тут, пока меня устраивает и стоит не дорого для моих имеющихся мощностей.

          Comment

          • Griboed0ff
            Senior Member
            • Sep 2022
            • 153

            #20
            Originally posted by Kos
            в скрипте нужно опрашивать текущий список интерфейсов с типом "Zabbix agent" у хоста (например, методом hostinterface.get), после чего в первом из них (т.е. с наименьшим ID) менять его IP-адрес на актуальный (метод hostinterface.update), а затем удалять все остальные интерфейсы с этим типом (метод hostinterface.delete). Тогда не нужно будет трогать айтемы - они по-прежнему будут ссылаться на тот же интерфейс по его ID.​​
            И позже выяснилось, что вы были правы. Хоть у меня и одни интерфейс на активных агентах, но откуда-то взялись итемчики, которые ссылаются на id интерфейса и в итоге скрипт, который удалял все интерфейсы и ставил один верный не срабатывает, так как заббикс не дает удалить интерфейс, на который ссылаются итемы. Придется все же писать скрипт по вашему сценарию, но для меня это сложно на питоне, хоть и выглядит просто.

            Comment

            Working...