Как грамотно распарсить JSON в Zabbix?
Ссылка скопирована
По вводным: в Zabbix получаю json вида:
Spoiler
{ "ipv6nat": { "type": "info", "container": "ipv6nat", "state": "running", "started_at": "2025-09-09T02:25:48.597063398Z", "image": "robbertkl/ipv6nat" }, "watchdog": { "type": "info", "container": "watchdog", "state": "running", "started_at": "2025-09-09T02:25:49.034715898Z", "image": "ghcr.io/watchdog:2.08" }, "acme": { "type": "info", "container": "acme", "state": "running", "started_at": "2025-09-09T02:25:49.410248064Z", "image": "ghcr.io/acme:1.93" }, "nginx": { "type": "info", "container": "nginx", "state": "running", "started_at": "2025-09-09T02:25:49.325908002Z", "image": "ghcr.io/nginx:1.03" }, "rspamd": { "type": "info", "container": "rspamd", "state": "running", "started_at": "2025-09-09T02:43:16.428571722Z", "image": "ghcr.io/rspamd:2.2" }, "ofelia": { "type": "info", "container": "ofelia", "state": "running", "started_at": "2025-09-09T02:25:49.047098625Z", "image": "mcuadros/ofelia:latest" }, "dovecot": { "type": "info", "container": "dovecot", "state": "running", "started_at": "2025-09-09T02:25:49.397769582Z", "image": "ghcr.io/dovecot:2.34" }, "php-fpm": { "type": "info", "container": "php-fpm", "state": "running", "started_at": "2025-09-09T02:25:49.207584334Z", "image": "ghcr.io/phpfpm:1.93" }, "postfix": { "type": "info", "container": "postfix", "state": "running", "started_at": "2025-09-09T02:25:49.203080147Z", "image": "ghcr.io/postfix:1.80" }, "clamd": { "type": "info", "container": "clamd", "state": "running", "started_at": "2025-09-09T02:25:49.014354072Z", "image": "ghcr.io/clamd:1.70" }, "redis": { "type": "info", "container": "redis", "state": "running", "started_at": "2025-09-09T02:25:49.228263805Z", "image": "redis:7.4.2-alpine" }, "mysql": { "type": "info", "container": "mysql", "state": "running", "started_at": "2025-09-09T02:25:48.915980879Z", "image": "mariadb:10.11" }, "memcached": { "type": "info", "container": "memcached", "state": "running", "started_at": "2025-09-09T02:25:49.279423323Z", "image": "memcached:alpine" }, "unbound": { "type": "info", "container": "unbound", "state": "running", "started_at": "2025-09-09T02:25:49.07675022Z", "image": "ghcr.io/unbound:1.24" }, "olefy": { "type": "info", "container": "olefy", "state": "running", "started_at": "2025-09-09T02:25:49.269785294Z", "image": "ghcr.io/olefy:1.15" }, "netfilter": { "type": "info", "container": "netfilter", "state": "running", "started_at": "2025-09-09T02:25:48.593228646Z", "image": "ghcr.io/netfilter:1.61" }, "sogo": { "type": "info", "container": "sogo", "state": "running", "started_at": "2025-09-09T02:25:49.011224165Z", "image": "ghcr.io/sogo:1.133" }, "dockerapi": { "type": "info", "container": "dockerapi", "state": "running", "started_at": "2025-09-09T02:25:49.082004656Z", "image": "ghcr.io/dockerapi:2.11" } }
Нужно решить такую задачу?
Заказать помощь
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Лучший ответ
1
Другие ответы (0)
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопроскомментарий
Вам также может быть интересно
Pyrogram
Как правильно зарегистрировать юзер бота в Telegram?
1 ответ
печатные-платы
Как заставить запускаться программу M3.exe от компании Hanxing AOI в инспекционной машине на Windows 7 Pro?
1 ответ
VPN
Как правильно настроить vless для Android TV?
1 ответ
Visual Studio Code
Как лучше убрать тень у панели слева в VS Code?
1 ответ

В Zabbix JSON обычно парсят через preprocessing item: JSONPath, JavaScript preprocessing или dependent items. Правильный подход зависит от того, что приходит в master item. Сначала сохраните сырой JSON как master item, а уже из него делайте dependent items для отдельных полей. Так вы не будете дергать API много раз.
Пример: master item получает JSON:
{"status":"ok","metrics":{"cpu":42,"memory":71},"items":[{"name":"web","value":1}]}{"status":"ok","metrics":{"cpu":42,"memory":71},"items":[{"name":"web","value":1}]}
Для поля CPU в preprocessing используйте JSONPath:
$.metrics.cpu
Для первого элемента массива:
$.items[0].value
Если структура сложная или нужно найти объект по имени, иногда проще JavaScript preprocessing:
const data = JSON.parse(value); const item = data.items.find(x => x.name === 'web'); return item ? item.value : 0;
Если Zabbix пишет, что JSONPath ничего не нашел, проверьте реальный JSON: иногда API возвращает строку с JSON внутри строки, другой root-объект или HTML-ошибку вместо JSON. В таком случае сначала добавьте шаг проверки/JavaScript, который выбросит понятную ошибку.
Для discovery нужен отдельный LLD item, который возвращает массив объектов с макросами. Например,
{#NAME}и{#ID}. Потом item prototypes используют эти макросы. Не пытайтесь создать сотни отдельных items вручную, если JSON содержит список однотипных сущностей.