Ad Widget

Collapse

lld + powershell + vmwaqre

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • tikondrus8
    Junior Member
    • Apr 2023
    • 4

    #1

    lld + powershell + vmwaqre


    задача: расширить мониторинг вмвари собственными сенсорами

    реализация: в host prototype стандартного шаблона мониторинга vmware инфраструктуры добавил темплейт.
    в темплейте:
    discovery rule - скрипт, который коннектится к vmware vcenter, получает необходимые данные и сохраняет их в json формате на заббикс сервере
    item prototype - скрипт парсит сохраненный ранее json

    powershell скрипт сам по себе работает прекрасно. причем его можно запускать через sudo от юзера zabbix или root. все работает.

    в случае lld выглядит как скрипт запускается, но не подгружает powercli модули, из-за чего ничего не работает.
    key для discovery выглядит как get_params.ps1[{$VMWARE.VCSERVER},"{$VMWARE.VCUSERNAME}","{$VMWAR E.VCPASSWORD}","{HOST.NAME}"]

    в дебаг целях добавил в скрипт сохранение передаваемых переменных , а также $Env:PSModulePath и $connect = Connect-VIServer -Server $VCSERVER -user $VCUSERNAME -password $VCPASSWORD в файл.
    вижу, что переменные передаются нормально, даже со спецсимволами. а вот $connect всегда пустой.
    в случае запуска скрипта вручную $Env:PSModulePath = /var/lib/zabbix/.local/share/powershell/Modules:/usr/local/share/powershell/Modules:/opt/microsoft/powershell/7/Modules
    а в случае lld $Env:PSModulePath = /tmp/pwsh-zabbix-98288ff9-5712-4a14-9a11-23693b9cd91a/.local/share/powershell/Modules:/usr/local/share/powershell/Modules:/opt/microsoft/powershell/7/Modules

    по этим симптомам нашел статью https://communities.vmware.com/t5/VM...d/td-p/2891483 которая, как казалось, решит все проблемы
    но ни Import-Module VMware.PowerCLI
    ни Import-Module -FullyQualifiedName '/usr/local/share/powershell/Modules/VMware.PowerCLI'
    ни даже Install-Module –Name VMware.PowerCLI –Scope CurrentUser –AllowClobber -Confirm:$false
    пробьлему не решило.
    скрипт упорно не хочет подгружать powercli.

    в sysloge из ошибок светится такое
    [QUOTE]Apr 04 19:00:04 zabbix powershell[2156325]: (7.3.3:E:80) [Command_Health:ExecutePipeline.Exception.Warning] Error Message = The type initializer for 'VMware.VimAutomation.Sdk.Interop.V1.Co>
    Fully Qualified Error ID = System.TypeInitializationException,VMware.VimAutom ation.ViCore.Cmdlets.Commands.ConnectVIServer


    Context:
    Severity = Warning
    Host Name = ConsoleHost
    Host Version = 7.3.3
    Host ID = 9f58d6c9-5030-4b66-b483-6a7c5e0aa6e3
    Host Application = /opt/microsoft/powershell/7/pwsh.dll /usr/lib/zabbix/externalscripts/get_params.ps1 *** *** ***
    Engine Version = 7.3.3
    Runspace ID = d1d19b45-cb8a-41e6-be15-202fdaad134e
    Pipeline ID = 6
    Command Name = Connect-VIServer
    Command Type = Cmdlet
    Script Name = /usr/lib/zabbix/externalscripts/get_params.ps1
    Command Path =
    Sequence Number = 38
    User = zabbix\zabbix
    Connected User =
    Shell ID = Microsoft.PowerShell zz0.ixng97ggctczz/QUOTE]


    т.е. Connect-VIServer не происходит по причине Exception. подскажите, как это побороть?

    zabbix 6.2.9
    powershell 7.3.3 (the same issue on 7.2.10 lts)
    powercli 13.0.0.20829139
  • teddy
    Senior Member
    • Dec 2017
    • 234

    #2
    скрипт упорно не хочет подгружать powercli.
    cможет просто не хватает прав для загрузки или обращения? от какого пользователя запускаете скрипт Вы, и от какого Zabbix?

    Comment

    • tikondrus8
      Junior Member
      • Apr 2023
      • 4

      #3
      вы невнимательно прочитали мой пост.
      причем его можно запускать через sudo от юзера zabbix или root. все работает.
      повторюсь, запускаю от рута или zabbix. скрипт работает.

      в случае LLD есть два варианта. Это либо опция allowroot в конфиге сервера либо user=zabbix (по умолчанию). как видно из куска лога выше, используется дефолтный zabbix юзер
      Sequence Number = 38
      User = zabbix\zabbix
      Connected User =​
      сегодня еще заметил следуюющее. из скрипта пишу в лог переменные окружения. и при ручном запуске скрипта
      Code:
      sudo -u zabbix -- sh -c "./get_params.sh_back xxx xxx xxx "
      ​
      получаю
      HOME /var/lib/zabbix
      PSHOME /opt/microsoft/powershell/7
      PROFILE /var/lib/zabbix/.config/powershell/Microsoft.PowerShell_profile.ps1​
      а в случае LLD
      HOME
      PSHOME /opt/microsoft/powershell/7
      PROFILE /tmp/pwsh-zabbix-98288ff9-5712-4a14-9a11-23693b9cd91a/.config/powershell/Microsoft.PowerShell_profile.ps1​
      т.е. при запуске скрипта самим заббиксом переменная HOME пустая. возможно причина в этом. пытался в скрипте сделать export HOME=/var/lib/zabbix или $env:HOME = “/var/lib/zabbix” + $env:HOME но переменная не задается.
      WriteError: Cannot overwrite variable HOME because it is read-only or constant.
      Last edited by tikondrus8; 05-04-2023, 22:22.

      Comment

      • Hamardaban
        Senior Member
        Zabbix Certified SpecialistZabbix Certified Professional
        • May 2019
        • 2713

        #4
        1) Пропишите в скрипте ps полные пути ко всем модулям.
        2) С какими параметрами вызываете ps?

        Comment

        • tikondrus8
          Junior Member
          • Apr 2023
          • 4

          #5
          1. что значит прописать в скрипте полные пути ко всем модулям?
          есть переменная, которая их содержит $Env:PSModulePath
          также можно сохранять модули в необходимый путь и оттуда их импортировать, что я и делал выше

          Import-Module -FullyQualifiedName '/usr/local/share/powershell/Modules/VMware.PowerCLI'
          2) параметры указывал выше.
          get_params.ps1[{$VMWARE.VCSERVER},"{$VMWARE.VCUSERNAME}","{$VMWAR E.VCPASSWORD}","{HOST.NAME}"]

          Comment


          • Hamardaban
            Hamardaban commented
            Editing a comment
            я спрашивал как вызываете сам get_params.ps1.
            а впрочем неважно.
        • tikondrus8
          Junior Member
          • Apr 2023
          • 4

          #6
          в общем, это точно из-за пустой HOME. вот еще ссылка по теме.
          решил так.
          в дискавери руле скрипт не ps1 а sh. а в нем
          Code:
          export HOME=/var/lib/zabbix
          sudo -u zabbix  -- sh -c "/usr/lib/zabbix/externalscripts/get_params.ps1 $1 $2 $3 $4 $5 $6"​

          Comment

          Working...