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

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

🎓 Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и "под микроскопом" изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

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

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

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

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

Создайте простой скрипт, который возвращает количество активных RDP сессий и сохраните его в файл «C:\Program Files\Zabbix Agent 2\Script\GetActiveRDPSessionCount.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 Files\Zabbix Agent 2\Script\GetActiveRDPSessionCount.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.
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.

🎓 Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и "под микроскопом" изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Предыдущая статья Следующая статья


Комментариев: 3 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)