Заметка 10 — Получение статистики Redis с помощью Powershell

[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-файла.

$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
     }

Для того, что бы вызвать скрипт из заббикса, в конфигурационном файле агента нужно создать пользовательскую переменную, для этого нужно добавить строку:

UserParameter=RedisInfo,powershell -NoProfile -executionpolicy bypass -File "C:\zabbix_agent\scripts\RedisInfo.ps1"

После чего можно сделать отдельный шаблон и создать группу элементов данных и сам элемент данных, который будет «дергать» наш скрипт RedisInfo.ps1 и получать json.

zabbix_redis item

Создаем еще один элемент данных для получения определенного значения из json-файла.

zabbix_redis_item
zabbix_redis_item

Добавить комментарий

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