Ad Widget

Collapse

полное имя хоста под Windows

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • teddy
    Senior Member
    • Dec 2017
    • 234

    #1

    полное имя хоста под Windows

    В настройках агента получаю полное имя хоста через Powershell
    HostnameItem=system.run["powershell.exe -NoProfile -ExecutionPolicy Bypass -NonInteractive [System.Net.Dns]::GetHostByName(($env:computerName)).Hostname.ToLo wer()"]
    в 99% случаев все работает.

    Но иногда на некоторых хостах ( пока логики от чего зависит не нашел ) получаю при старте ошибку:
    ​cannot process configuration: cannot get system hostname using "system.run["powershell.exe -NoProfile -ExecutionPolicy Bypass -NonInteractive [System.Net.Dns]::GetHostByName(($env:computerName)).Hostname.ToLo wer()"]" item specified by "HostnameItem" configuration parameter: Cannot execute command: exec: "cmd": cannot run executable found relative to current directory

    И как следствие не запускается агент как служба. Понять причину не могу никак - все остальные условия одинаковы, даже настройки у всех вин хостов идентичны на стороне агента.

    На том же хосте в интерактивном режиме, когда просто запускаешь exe-шник в папке - все стартует нормально. т.е все пош-команды выполняются корректно.


    PS пробел в функцию ToLower ставит редактор форума.. в оригинале, ошибке и настройках это одно слово, без пробела.
    Last edited by teddy; 25-03-2023, 17:38.
  • teddy
    Senior Member
    • Dec 2017
    • 234

    #2
    Не указывал версию агента т.к не думал что это важно. Версия Zabbix Agent 2 (6.4.0).
    Попробовал версию Zabbix Agent 2 (6.2.6) - под ней все работает на всех хостах. Вывод - откат пока на винде на 6.2 версию агента.
    6.2.7, 6.2.8, 6.4.0 - дают ошибку.
    От версии OS не зависит: ошибку дает на одном из winSRV 2012, но на еще массе 2012 работает нормально. так же как и на SRV2022, SRV2019, WIN10Pro. Не проверял только на win11 за не имением таковой.
    Last edited by teddy; 25-03-2023, 18:50.

    Comment

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

      #3
      А чем не устраивает вариант
      Code:
      HostnameItem=system.hostname[host,lower]
      ?
      Для чего нужно извлекать это именно через (довольно тяжело по нагрузке) отдельно запускаемый вызов PowerShell-а?
      пробел в функцию ToLower ставит редактор форума..
      При редактировании сообщения в правом верхнем углу поля ввода есть иконка с буквой "A" - нажатие на неё включае/выключает панель инструментов.
      А в панели инструментов есть много полезного для форматирования - в частности, кнопка "#", которая вставляет теги "CODE". Вот содержимое между этими тегами отображается как есть, безо всякого дополнительного форматирования (в том числе добавления ненужных пробелов в длинные строки), и шрифтом фиксированной ширины.

      Comment

      • teddy
        Senior Member
        • Dec 2017
        • 234

        #4
        Originally posted by Kos
        А чем не устраивает вариант
        Code:
        HostnameItem=system.hostname[host,lower]
        ?
        Для чего нужно извлекать это именно через (довольно тяжело по нагрузке) отдельно запускаемый вызов PowerShell-а?
        Ключ system.hostname под Windows отдает короткое имя хоста, без имени домена. Как это изменить я не нашел. Меня именование хоста при авторегистрации без доменного суффикса не устраивает, поэтому запуск Powershell.
        Про тяжесть смешно, эта команда запускается один раз при старте.
        А вот разное поведение на разных версиях совершенно не понятно. Такое ощущение что в 6.2.7+ при запуске в виде службы некорректно запускаются дочерние процессы. как минимум при старте. Как уже писал что если агента стартануть не как службу то все ок, все отрабатывает.

        Кстати на Linux системах system.hostname отдает полное имя. Если установлено hostname.domain.com - то так и вернет.

        Comment

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

          #5
          Originally posted by teddy
          Ключ system.hostname под Windows отдает короткое имя хоста, без имени домена.
          Понятно, спасибо.

          По исходному посту: судя по сообщениям об ошибках - похоже, что агент Zabbix, выполняя указанные команды при своей инициализации, делает это в тот момент, когда сама операционка ещё не до конца загрузилась (по крайней мере, не выставлены нужные переменные среды, в частности, PATH). Вероятнее всего, после рестарта агента этой проблемы не будет. Только в любом случае - непонятно, как с этим бороться. В голову приходит, разве что, смена режима автозапуска Windows Service для агента c "Automatic" на "Automatic (Delayed Start)". Но, если Вы говорите, что с прежними версиями агента такой проблемы не было, то имеет смысл открыть баг-репорт на support.zabbix.com.

          Comment

          • teddy
            Senior Member
            • Dec 2017
            • 234

            #6
            Originally posted by Kos
            смена режима автозапуска Windows Service для агента c "Automatic" на "Automatic (Delayed Start)".
            Это я попробовал сразу, но увы, не помогает.
            Сделал ZBX-22591.
            Кстати есть возможность параметром задать при установке zabbix-agent ( первого или второго ) чтоб он сразу инсталлировался с режимом автозапуска Windows Service для агента "Automatic (Delayed Start)" ? очень полезная штука.

            Comment

            • csr
              Member
              • Mar 2016
              • 71

              #7
              если уж делаете скриптом, то читайте значение из реестра, оно будет всегда:
              Code:
              HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servic es\Tcpip\Parameters\Domain
              HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servic es\Tcpip\Parameters\Hostname​

              Comment

              • teddy
                Senior Member
                • Dec 2017
                • 234

                #8
                Originally posted by csr
                если уж делаете скриптом, то читайте значение из реестра, оно будет всегда:
                Code:
                HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servic es\Tcpip\Parameters\Domain
                HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servic es\Tcpip\Parameters\Hostname​
                не совсем, точнее совсем не понимаю чем это лучше powershell
                не считаю того, что как выяснилось в данном случае проблема не в пош-е а в опции конфигурации "HostnameItem=system.run[...]" которая под некоторыми ОС не работает. и тут уже без разницы что запускать.
                ну а в 7-версии планируется новый ключ
                HostnameItem=system.hostname[FQDN]
                который надеюсь вообще отменить необходимость в костылях.

                Comment

                • csr
                  Member
                  • Mar 2016
                  • 71

                  #9
                  проблема, имхо, надуманная.

                  при установке прописать имя не проблема. если надо мониторить изменение имени после установки, то никто не мешает это делать любым штатным образом, не на уровне вызова из конфига

                  Comment


                  • teddy
                    teddy commented
                    Editing a comment
                    угумс. на паре сотен-тысяч хостов. совсем не проблема. и при наличии автоматических механизмов распространения конфигураций. да еще и при определенной динамике в этом количестве.
                    конечно, это тоже решение. но про надуманность - это вы погорячились.
                    в общем то надуманность и самого мониторинга в таком случае - кто мешает периодически заходить на хосты и смотреть сколько там места осталось или сколько процессов работает, так? но все же многие предпочитают системы.
                • csr
                  Member
                  • Mar 2016
                  • 71

                  #10
                  как же некоторые любят меряться своими малыми писюками :/

                  у нас конфиг состоит из нескольких фалов:
                  • имя хоста
                  • специфичные параметры для данного хоста
                  • параметры для сети
                  • основные параметры для этого клиента

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

                  уже сам заббикс проверяет изменение имени хоста. так что можно сделать все просто, без бубнов, костылей и прочего.

                  PS: изначальный ваш пост был про проблему. вам предложили решение. было высказано предположение, что какие-то переменные не инициализируются (я с подобным встречался в других местах). было предложено 100% решение, откуда всегда можно взять домен/хост, а вы уже выяснили, что проблема в другом. телепаты в отпуске.

                  на этом, думаю, стоит остановиться

                  Comment

                  Working...