1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
[CmdletBinding()] param ( [Parameter (Mandatory=$true, Position=1)] [ValidateLength(1,25)] [string] $search_string #строка для поиска ) #$search_string = "connected_clients" #полный список параметров можно получить выполнив redis-cli.exe info try { $t=Invoke-Command -ComputerName t2-fe01 -ScriptBlock { Invoke-Expression -Command:'c:\windows\system32\cmd.exe /c C:\"Program Files"\Redis\redis-cli.exe info' } -Verbose -ErrorAction stop #Write-Host $t | Select-String -Pattern "used_memory" $t_split = $t -split " " foreach ($str in $t_split) { if ($str -like "$search_string*") { #$str $str -match "\d+" | %{$matches[0]} } } } catch { $_.Exception.Message } |
В первом примере у нас есть обязательный входной параметр на основе которого мы получаем значение, этот метод можно использовать для небольшого сбора метрик в zabbix, но в этом случае на каждую метрику будет вызываться скрипт, что не совсем корректно.
Следующий скрипт решает эту проблему, мы будем генерировать JSON со всеми метриками один раз, а потом делать зависимые переменные в Zabbix и настраивать элементы данных на основе полученного JSON-файла.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$info = @{} try { $t=Invoke-Command -ComputerName t2-fe01 -ScriptBlock { Invoke-Expression -Command:'c:\windows\system32\cmd.exe /c C:\"Program Files"\Redis\redis-cli.exe info' } -Verbose -ErrorAction stop #Write-Host $t | Select-String -Pattern "used_memory" $t_split = $t -split " " foreach ($str in $t_split) { $temp = $str -split ":" $info.add($temp[0],$temp[1]) } ConvertTo-Json $info } catch { $_.Exception.Message } |
Для того, что бы вызвать скрипт из заббикса, в конфигурационном файле агента нужно создать пользовательскую переменную, для этого нужно добавить строку:
1 |
UserParameter=RedisInfo,powershell -NoProfile -executionpolicy bypass -File "C:\zabbix_agent\scripts\RedisInfo.ps1" |
После чего можно сделать отдельный шаблон и создать группу элементов данных и сам элемент данных, который будет «дергать» наш скрипт RedisInfo.ps1 и получать json.
Создаем еще один элемент данных для получения определенного значения из json-файла.