Ad Widget

Collapse

Передача данных от powershell в агент. Как диагностировать?

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • SonyX
    Junior Member
    • Nov 2019
    • 7

    #1

    Передача данных от powershell в агент. Как диагностировать?

    Доброго времени суток. Пытаюсь передать простые данные из powershell на заббикс.
    1. В агенте прописана строчка UserParameter=string.string[*],powershell.exe -nologo "C:\Scripts\mail_queue.ps1" $1
    2. На сервере создан ключ string.string, числовой
    Click image for larger version

Name:	zab1.PNG
Views:	407
Size:	12.9 KB
ID:	389552



    3. В самом powershell скрипте, если допустим просто пишу простейшую команду Write-Output '1300' то всё работает. Если в powershell пишу любую команду, которая так же возвращает числовой результат, например [string](Get-Queue -Filter "MessageCount -gt 100" |select MessageCount).MessageCount | Write-Output то не работает. То есть должно было вернуться такое же число примерно. Тогда, проверяю тип данных в обоих результатх. Я вообще не понимаю почему вся эта связка работает только при типе string когда надо передать число. Но по другому вообще не работает. Как понять в чем загвозка ?

    Click image for larger version

Name:	zab2.PNG
Views:	358
Size:	6.1 KB
ID:	389553
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Сразу оговорюсь, что я не специалист по PowerShell. Но я немножко представляю себе, что происходит со стороны Zabbix-а.

    Когда используется расширение функционала Zabbix-агента через UserParameter, то агент Zabbix просто вызывает внешнюю команду (как дочерний процесс) и возвращает то, что эта команда записала в свой стандартный вывод (stdout). Всё, больше он ничего не делает: ему всё равно, что за программа вызывается, на каком языке она написана и что за данные и в каком формате она возвращает.

    На этом этапе диагностировать проблемы нагляднее всего с помощью утилиты zabbix_get: она эмулирует обращение к агенту Zabbix точно таким же образом, как это делает Zabbix-сервер, когда опрашивает агента в пассивном режиме, после чего показывает результат. Я обычно запускаю эту утилиту прямо на той машине, где крутится сервер Zabbix (чтобы не вносить никаких изменений в настройки агента: запрос к нему придёт с того же известного ему IP-адреса). Для начала опрашиваю какой-либо заведомо рабочий элемент данных (например, agent.version), чтобы убедиться, что есть коммуникация с агентом. Затем опрашиваю тот элемент данных, который, собственно, и надо проверить. Наглядно видно, что возвращается (и возвращается ли вообще).

    Если тут возникают проблемы (например, возвращается совсем не то, что ожидалось), то разбираться надо со своим скриптом (от какого пользователя он запускается, хватает ли ему переменных среды, прав доступа и т.п.). Зачастую прямо здесь видны собственные ошибки: скажем, ожидается числовое значение, но оно возвращается обрамлённым какими-либо посторонними символами (пробелами, табуляциями, переводами строк и т.п.). Иногда проблема бывает менее очевидной, типичный случай: значение возвращается, но не сразу, а через несколько секунд (поскольку скрипту нужно время на работу). А с учётом настроек по умолчанию, это может не укладываться в отведённый тайм-аут (3 или 4 секунды в зависимости от версии Zabbix).

    Наконец, если и тут непонятно, что происходит, то можно включить на агенте режим отладки (в конфиг-файле: DebugLevel=4) и смотреть по логу агента - может натолкнуть на какие-то мысли.

    Comment

    • SonyX
      Junior Member
      • Nov 2019
      • 7

      #3
      Очень хороший ответ. Спасибо. Знаю теперь как диагностировать и в какую сторону копать.

      Comment

      Working...