В этой статье мы рассмотрим, как использовать PowerShell скрипты для получения данных мониторинга с агента Zabbix. Рассмотрим два простых PowerShell скрипта, данные из которых нам нужно получить в Zabbix: как получить количество активных RDP сессий пользователей на RDS сервере Windows и как получить количество дней с даты последней установки обновлений Windows на сервере.
Для получения данных в Zabbix из внешнего PowerShell скрипта на агенте чаще всего используются два инструмента:
Сначала рассмотрим пример запуска скрипта PowerShell через 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"
Перезапустите службу 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 сессии пользователей.
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 и добавьте:
ActiveRDSSessions
Перейдите в Monitoring -> Latest data и проверьте, что Zabbix теперь получает значение из PowerShell скрипта.
Теперь разрешим запуск PowerShell скриптов через system.run . Этот способ является менее безопасным, т.к. позволяет выполнить на агенте любую команду через Zabbix, но более удобным (позволяет настраивать PowerShell скрипты прямо из веб-интерфейса Zabbix).
Включите в конфигурационном файле агента параметр:
AllowKey=system.run[*]
Теперь создайте новый Item:
system.run[powershell.exe -command "(New-Timespan -Start ((New-Object -com 'Microsoft.Update.AutoUpdate').Results|Select -ExpandProperty LastInstallationSuccessDate) -End (Get-Date)).days"]
В этой статье мы рассмотрели, как получить данные в Zabbix из скриптов PowerShell в Windows.
Как менялся логотип Apple на протяжении многих лет. Логотип Apple — это не просто символ,…
Security Boot Fail при загрузке Acer — решение проблемы При загрузке ноутбука Acer с флешки,…
Ноутбук не включается — варианты решения Если при попытке включить ноутбук вы обнаруживаете, что он…
The AC power adapter wattage and type cannot be determined — причины и решение При…
Свистит или звенит блок питания компьютера — причины и решения Некоторые владельцы ПК могут обратить…
Мигает Caps Lock на ноутбуке HP — почему и что делать? При включении ноутбука HP…