В процессе решения задач, связанных с мониторингом чего бы то ни было с помощью 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 году я не вижу смысла рассматривать ситуации, когда приходится иметь дело с более старыми версиями.