Как в Zabbix можно получить данные сразу по нескольким объектам с помощью одного запроса?

Я хочу настроить мониторинг бортовых контроллеров в Zabbix с использованием API сервера, к которому они подключаются. В целом, процесс работает: данные поступают, шаблон настроен, триггеры и уведомления активируются. Однако в настоящее время каждый объект мониторинга опрашивается отдельно, тогда как функция API позволяет опрашивать несколько объектов одновременно. Возможно ли реализовать это в Zabbix, чтобы снизить нагрузку на сервер контроллеров?
  • 19 февраля 2025 г. 7:34
Ответы на вопрос 3
Да, в Zabbix можно использовать API для получения данных сразу по нескольким объектам с помощью одного запроса. Однако это может потребовать немного доработки, поскольку Zabbix сам по себе опрашивает данные по отдельности для каждого элемента данных (или "items") в соответствии с их настройками.

Вот несколько подходов, которые можно рассмотреть для реализации опроса нескольких объектов одновременно:

### 1. Использование UserParameter
Вы можете создать UserParameter на вашем Zabbix агенте, который будет использовать API для получения данных сразу по нескольким объектам и возвращать нужные значения. Это позволяет сделать один API-запрос и обработать данные на стороне агента. Например:

```bash
UserParameter=myapi.data[*],/usr/bin/curl -s 'http://api.example.com/data?objects=$1' | jq '.'
```

### 2. Создание сценариев (scripts) 
Вы можете написать сценарий (например, на Python или Bash), который будет делать запрос к API и обрабатывать ответ. Этот сценарий можно будет вызывать как UserParameter.

### 3. Использование внешних чекеров
Если сбор данных не требует использования Zabbix агента, то можно реализовать внешний чекер, который будет выполнять API запросы и отправлять данные в Zabbix непосредственно через Zabbix Sender.

### 4. Использование веб-хуков
Некоторые системы позволяют настроить веб-хуки для отправки уведомлений или данных по событиям. Если контроллеры поддерживают это, вы можете настроить веб-хук для отправки данных в Zabbix.

### 5. Пакетный запрос через Zabbix API
Если вы хотите собирать данные в Zabbix через современный подход, можно воспользоваться Zabbix API. Вы можете написать скрипт для пакетной обработки данных, который будет собирать данные из API контроллеров и отправлять их в Zabbix.

### 6. Настройка агрегации
В зависимости от вашей архитектуры, вы можете агрегировать данные на уровне API (например, создать промежуточный сервер), позволяя контроллеру подтверждать запрос и отправлять данные в подходящем формате.

### Заключение
Эффективное использование API может значительно снизить нагрузку на сервер контроллеров и на самой Zabbix-системе. Выбор подхода зависит от вашего конкретного окружения и требований к мониторингу.
Да, возможно. Если API отдаёт в JSON - даже не придётся ничего костылить, Заббикс внутри умеет парсить JSON. В противном случае делается скрипт, который забирает пачку данных и форматирует её для Заббикса (например, через отправку с помощью zabbix_sender).
В последних версиях заббикса появилась возможность сделать мастер-элемент и зависимые от него подэлементы 
https://www.zabbix.com/documentation/current/en/ma...
Один айтем получает полный JSON, зависимые от него берут только нужный кусочек данных
Похожие вопросы