Zabbix агент: получить данные из PowerShell скрипта

В этой статье мы рассмотрим, как использовать PowerShell скрипты для получения данных мониторинга с агента Zabbix. Рассмотрим два простых PowerShell скрипта, данные из которых нам нужно получить в Zabbix: как получить количество активных RDP сессий пользователей на RDS сервере Windows и как получить количество дней с даты последней установки обновлений Windows на сервере.

Для получения данных в Zabbix из внешнего PowerShell скрипта на агенте чаще всего используются два инструмента:

  • Опция UserParameter в конфигурационном файле агента позволяет запустить на хосте определенный скрипт PowerShell. При использовании этой опции нужно настроить UserParameter и поместить файл скрипта PS1 непосредственно на хосте Windows
  • Можно запускать скрипты PowerShell через system.run . В этом случае вы настраиваете скрипт непосредственно в веб интерфейсе Zabbix и можете запускать произвольные команды.

Сначала рассмотрим пример запуска скрипта PowerShell через UserParameter. Предполагаем, что вы уже установили и настроили Zabbix агент на сервере.

Ранее мы показывали как использовать UserParameter для запуска в Zabbix скрипта проверки срока окончания делегирования доменов .

Создайте простой скрипт, который возвращает количество активных RDP сессий и сохраните его в файл «C:Program FilesZabbix Agent 2ScriptGetActiveRDPSessionCount.ps1»

$RDSsessions= qwinsta |ForEach-Object {$_ -replace "s{2,18}",","} | ConvertFrom-Csv
$RDSActiveSessions=@($RDSsessions| where State -eq 'Active').count
Write-Host $RDSActiveSessions

Теперь отредактируйте конфигурационный файл агента Zabbix ( zabbix_agent2.conf ) и настройте параметр:

UserParameter=ActiveRDSSessions,powershell -NoProfile -ExecutionPolicy bypass -File "C:Program FilesZabbix Agent 2ScriptGetActiveRDPSessionCount.ps1"

Разрешит запуск PowerShell скрипта через UserParameter в агенте zabbix

Параметр -ExecutionPolicy bypass позволяет запустить PowerShell скрипт, не изменяя настройки политики запуска PowerShell скриптов в Windows .

Перезапустите службу Zabbix-агента:

Get-Service ‘Zabbix Agent 2’| Restart-Service -force

Проверьте, что агент zabbix может получить данные из нового параметра. Для тестирования агента используется встроенная утилита zabbix-get:

zabbix_get -s 127.0.0.1 -p 10050 -k ActiveRDSSessions

В данном примере Zabbix выполнил скрипт PowerShell и вернул, что на хосте активны 2 RDP сессии пользователей.

zabbix_get - проверить доступность параметра powershell в данных агента

PowerShell скрипты (даже самые просты) обычно выполняются довольно медленно. Поэтому нужно увеличить в конфигурации агента таймаут со стандартных 3 секунд до 20 (параметре Timeout=20 ), иначе при получении данных из PowerShell, Zabbix будет возвращать ошибку:

ZBX_NOTSUPPORTED: Timeout while executing a shell script.

При запуске команды может появится еще одна ошибка:

zabbix_get [4292]: Get value error: ZBX_TCP_READ() failed: [0x00002746] An existing connection was forcibly closed by the remote host._x000D_zabbix_get [4292]: Check access restrictions in Zabbix agent configuration

В этом случае нужно в конфигурации агента zabbix_agent2.conf разрешить принимать локальные подключения. Добавьте адрес 127.0.0.1.

Server=192.168.20.15,127.0.0.1

Теперь можно добавить в ваш шаблон новый параметр. Перейдите на вкладку Items и добавьте:

  • Имя: Количество RDS сессии
  • Type: Zabbix Agent (active)
  • Key: ActiveRDSSessions
  • Type of information: Numeric (unsigned)
  • Update Interval: 1m
  • History: 90d
  • Trenfd: 365d

Добавить элемент мониторига в Zabbix для PowerShell скрипта

Перейдите в Monitoring -> Latest data и проверьте, что Zabbix теперь получает значение из PowerShell скрипта.

Теперь разрешим запуск PowerShell скриптов через system.run . Этот способ является менее безопасным, т.к. позволяет выполнить на агенте любую команду через Zabbix, но более удобным (позволяет настраивать PowerShell скрипты прямо из веб-интерфейса Zabbix).

Включите в конфигурационном файле агента параметр:

AllowKey=system.run[*]

Теперь создайте новый Item:

  • Имя: Дней с последней установки Windows
  • Type: Zabbix Agent
  • Key: system.run[powershell.exe -command "(New-Timespan -Start ((New-Object -com 'Microsoft.Update.AutoUpdate').Results|Select -ExpandProperty LastInstallationSuccessDate) -End (Get-Date)).days"]
  • Type of information: Numeric (unsigned)
  • Update Interval: 1d
  • History: 180d
  • Trenfd: 365d
Данная команда возвращает количество дней, прошедших с последней даты установки обновления безопасности в Windows.

В этой статье мы рассмотрели, как получить данные в Zabbix из скриптов PowerShell в Windows.

EnglishRussianUkrainian