PowerShell: JSON для Zabbix

В процессе решения задач, связанных с мониторингом чего бы то ни было с помощью Zabbix, я очень часто использую LLD (низкоуровневое обнаружение) для создания прототипов элементов данных и триггеров. Это бывает нужно, когда настраивается мониторинг объектов, состав которых не статичен. Выбор инструмента для генерирования нужного JSON зависит от платформы: при работе с Linux чаще всего используется Python или Bash, при работе с Windows — PowerShell.

Ниже приведен самый, на мой взгляд, простой и изящный вариант написания кода на PowerShell для формирования JSON для Zabbix. При создании прототипов (в данном примере) будет использоваться LLD-макрос {#DATAFOLDER}, в который будут переданы все имена папок (я предполагаю, что в D:\Services\Data_Inputs\ есть только папки), расположенных где-то. Используем командлет Get-ChildItem:

$jsonData = @()
$listDFolders = (Get-ChildItem -Path "D:\Services\Data_Inputs\").Name
if ($listDFolders)
{
    foreach ($elemFolder in $listDFolders)
    {
        $jsonData += @(@{"{#DATAFOLDER}" = $elemFolder})
    }
}
$resultData = @{"data" = $jsonData} | ConvertTo-Json
$resultData

Представленный вариант хорош тем, что, в случае отсутствия каких-либо папок в D:\Services\Data_Inputs\, т.е. при пустом выводе Get-ChildItem, будет сформирован «пустой» JSON. Это важно, т.к. Zabbix не будет возвращать ошибок LLD в данной ситуации.

Небольшая ремарка: для использования командлета ConvertTo-Json требуется PowerShell версии 3.x или выше. Но в 2020 году я не вижу смысла рассматривать ситуации, когда приходится иметь дело с более старыми версиями.

Отмечено ,

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

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

Яндекс.Метрика