Протоколы пассивных и активных проверок
Этот раздел содержит сведения о протоколе для пассивных и активных проверок, выполняемых Zabbix agent и Zabbix agent 2.
Zabbix использует протокол обмена данными на основе JSON для взаимодействия с агентами.
Протоколы Zabbix agent и Zabbix agent 2 были унифицированы начиная с Zabbix 7.0. Различие между запросами/ответами Zabbix agent и Zabbix agent 2 выражается значением тега "variant".
Пассивные проверки
Пассивная проверка — это простой запрос данных. Сервер или прокси Zabbix запрашивает некоторые данные (например, загрузку CPU), а агент Zabbix отправляет результат обратно на сервер.
Пассивные проверки выполняются асинхронно — не требуется получать ответ на один запрос до начала других проверок. Разрешение DNS также выполняется асинхронно.
Опросчик агента будет пытаться подключиться ко всем адресам, возвращенным DNS-запросом. Это гарантирует, что если один IP-адрес недоступен, опросчик попробует следующий доступный адрес, повышая вероятность успешного подключения. Это улучшение применяется как к серверу Zabbix, так и к прокси.
Максимальная параллельность асинхронных проверок составляет 1000 (определяется параметром MaxConcurrentChecksPerPoller).
Количество асинхронных опросчиков агента определяется параметром StartAgentPollers.
Запрос сервера
Для определения длины заголовка и данных см. детали протокола.
{
"request": "passive checks",
"data": [
{
"key": "agent.version",
"timeout": 3
}
]
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| request | string | yes | "passive checks" |
|
| data | array of object | yes | Элемент данных пассивной проверки. | |
| key | string | yes | Ключ элемента данных с раскрытыми макросами. | |
| timeout | number | yes | Таймаут связи. | |
Ответ агента
{
"version": "8.0.0",
"variant": 2,
"data": [
{
"value": "8.0.0"
}
]
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| version | string | yes | Номер версии агента. | |
| variant | number | yes | Вариант агента (1 - Zabbix agent, 2 - Zabbix agent 2). | |
| data | array of object | yes | Содержит результат проверки. | |
| value | string | no | Значение элемента данных, если проверка выполнена успешно. | |
| error | string | no | Сообщение об ошибке, если проверка выполнена неуспешно. | |
Например, для поддерживаемых элементов данных:
- Сервер открывает TCP-соединение
- Сервер отправляет <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"agent.ping","timeout":3}]}
- Агент читает запрос и отвечает <HEADER><DATALEN>{"version":"8.0.0","variant":2,"data":[{"value":1}]}
- Сервер обрабатывает данные, чтобы получить значение, в нашем случае —
1 - TCP-соединение закрывается
Для неподдерживаемых элементов данных:
- Сервер открывает TCP-соединение
- Сервер отправляет <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"vfs.fs.size[/nono]","timeout":3}]}
- Агент читает запрос и отвечает <HEADER><DATALEN>{"version":"8.0.0","variant":2,"data":[{"error":"Unsupported item key."}]}
- Сервер обрабатывает данные, изменяет состояние элемента данных на неподдерживаемое с указанным сообщением об ошибке
- TCP-соединение закрывается
Переключение на старый протокол
Чтобы обеспечить работу сервера или прокси Zabbix с агентами версий до 7.2, которые используют протокол в открытом виде, реализован переход на старый протокол.
Пассивные проверки выполняются с использованием JSON-протокола (7.0 и новее) после перезапуска или при изменении конфигурации интерфейса.
Если в ответ не получен допустимый JSON (агент отправил "ZBX_NOTSUPPORTED"), Zabbix кэширует интерфейс как использующий старый протокол и повторяет проверку, отправляя только ключ элемента данных.
Обратите внимание, что каждый час сервер/прокси Zabbix снова будет пытаться работать с новым протоколом со всеми интерфейсами, при необходимости возвращаясь к старому протоколу.
Активные проверки
Активные проверки требуют более сложной обработки. Сначала агент должен получить от сервера/прокси список элементов данных и/или удаленных команд для независимой обработки.
Серверы/прокси, с которых нужно получать активные проверки, перечислены в параметре 'ServerActive' файла конфигурации агента. Частота запроса этих проверок задается параметром 'RefreshActiveChecks' в том же файле конфигурации. Однако если обновление активных проверок завершается неудачей, повторная попытка выполняется через жестко заданные 60 секунд.
Начиная с Zabbix 6.4 агент (в активном режиме) больше не получает от сервера/прокси полную копию конфигурации раз в две минуты (по умолчанию). Вместо этого, чтобы снизить сетевой трафик и расход ресурсов, каждые 5 секунд (по умолчанию) выполняется инкрементальная синхронизация конфигурации, при которой сервер/прокси предоставляет полную копию конфигурации только если агент еще не получил ее либо если что-то изменилось в конфигурации узла сети, глобальных макросах или глобальных регулярных выражениях.
Агент затем периодически отправляет новые значения на сервер(ы). Если агент получил какие-либо удаленные команды для выполнения, результат выполнения также будет отправлен. Обратите внимание, что выполнение удаленных команд на активном агенте поддерживается начиная с Zabbix agent 7.0.
Если агент находится за межсетевым экраном, вы можете рассмотреть использование только активных проверок, поскольку в этом случае вам не потребуется изменять настройки межсетевого экрана, чтобы разрешить первоначальные входящие соединения.
Получение списка элементов данных
Запрос агента
Запрос active checks используется для получения активных проверок, которые должны обрабатываться агентом.
Этот запрос отправляется агентом при запуске, а затем с интервалами RefreshActiveChecks.
{
"request": "active checks",
"host": "Zabbix server",
"host_metadata": "mysql,nginx",
"interface": "zabbix.server.lan",
"ip": "159.168.1.1",
"port": 12050,
"version": "8.0.0",
"variant": 2,
"config_revision": 1,
"session": "e3dcbd9ace2c9694e1d7bbd030eeef6e"
}
| Field | Type | Mandatory | Value |
|---|---|---|---|
| request | string | yes | active checks |
| host | string | yes | Host name. |
| host_metadata | string | no | The configuration parameter HostMetadata or HostMetadataItem metric value. |
| interface | string | no | The configuration parameter HostInterface or HostInterfaceItem metric value. |
| ip | string | no | The configuration parameter ListenIP first IP if set. |
| port | number | no | The configuration parameter ListenPort value if set and not default agent listening port. |
| version | string | yes | The agent version number. |
| variant | number | yes | The agent variant (1 - Zabbix agent, 2 - Zabbix agent 2). |
| config_revision | number | no | Configuration identifier for incremental configuration sync. |
| session | string | no | Session identifier for incremental configuration sync. |
Ответ сервера
Ответ active checks отправляется сервером агенту после обработки запроса active checks.
{
"response": "success",
"config_revision": 2,
"data": [
{
"key": "system.uptime",
"itemid": 1234,
"delay": "10s",
"lastlogsize": 0,
"mtime": 0
},
{
"key": "agent.version",
"itemid": 5678,
"delay": "10m",
"lastlogsize": 0,
"mtime": 0,
"timeout": "30s"
}
],
"commands": [
{
"command": "df -h --output=source,size / | awk 'NR>1 {print $2}'",
"id": 1324,
"wait": 1
}
]
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| response | string | yes | success | failed |
|
| info | string | no | Error information in case of failure. | |
| data | array of objects | no | Active check items. Omitted if host configuration is unchanged. | |
| key | string | no | Item key with expanded macros. | |
| itemid | number | no | Item identifier. | |
| delay | string | no | Item update interval. Flexible/scheduling intervals are supported by both Zabbix agent and Zabbix agent 2 since Zabbix 7.0. |
|
| lastlogsize | number | no | Item lastlogsize. | |
| mtime | number | no | Item mtime. | |
| timeout | string | no | Item timeout. | |
| refresh_unsupported | number | no | Unsupported item refresh interval. | |
| regexp | array of objects | no | Global regular expressions. | |
| name | string | no | Global regular expression name. | |
| expression | string | no | Global regular expression. | |
| expression_type | number | no | Global regular expression type. | |
| exp_delimiter | string | no | Global regular expression delimiter. | |
| case_sensitive | number | no | Global regular expression case sensitivity setting. | |
| commands | array of objects | no | Remote commands to execute. Included if remote command execution has been triggered by an action operation or manual script execution. Note that remote command execution on an active agent is supported since Zabbix agent 7.0. Older active agents will ignore any remote commands included in the active checks server response. | |
| command | string | no | Remote command. | |
| id | number | no | Remote command identifier. | |
| wait | number | no | Remote command mode of execution ("0" (nowait) for commands from action operations; "1" (wait) for commands from manual script execution). | |
| timeout | number | no | Remote command execution timeout in server/proxy configuration. | |
| config_revision | number | no | Configuration identifier for incremental configuration sync. Omitted if host configuration is unchanged. Incremented if host configuration is changed. | |
Сервер должен ответить success.
Например:
- Агент открывает TCP-соединение
- Агент запрашивает список проверок
- Сервер отвечает списком элементов данных и удаленных команд для выполнения
- Агент разбирает ответ
- TCP-соединение закрывается
- Агент начинает периодический сбор данных и выполняет удаленные команды (поддерживается начиная с Zabbix agent 7.0)
Обратите внимание, что (конфиденциальные) данные конфигурации могут стать доступны сторонам, имеющим доступ к порту trapper сервера Zabbix, при использовании активной проверки. Это возможно, поскольку любой может выдать себя за активный агент и запросить данные конфигурации элемента данных; аутентификация не выполняется, если не используются параметры encryption.
Отправка собранных данных
Агент отправляет
Запрос данных агента содержит собранные значения элементов данных и значения выполненных удаленных команд (если таковые имеются).
{
"request": "agent data",
"data": [
{
"id": 1,
"itemid": 5678,
"value": "7.0.0",
"clock": 1712830783,
"ns": 76808644
},
{
"id": 2,
"itemid": 1234,
"value": "69672",
"clock": 1712830783,
"ns": 77053975
}
],
"commands": [
{
"id": 1324,
"value": "16G"
}
],
"session": "8495cd52070e6ca52b371f29c8574165",
"host": "Zabbix server",
"version": "8.0.0",
"variant": 2
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| request | string | yes | agent data |
|
| data | array of objects | yes | Значения элементов данных. | |
| id | number | yes | Идентификатор значения (инкрементный счетчик, используемый для проверки дублирующихся значений в случае проблем с сетью). | |
| itemid | number | yes | Идентификатор элемента данных. | |
| value | string | no | Значение элемента данных. | |
| lastlogsize | number | no | lastlogsize элемента данных. | |
| mtime | number | no | mtime элемента данных. | |
| state | number | no | Состояние элемента данных. | |
| source | string | no | Источник журнала событий значения. | |
| eventid | number | no | eventid журнала событий значения. | |
| severity | number | no | severity журнала событий значения. | |
| timestamp | number | no | timestamp журнала событий значения. | |
| clock | number | yes | Метка времени значения (секунды с начала эпохи). | |
| ns | number | yes | Метка времени значения в наносекундах. | |
| commands | array of objects | no | Результат выполнения удаленных команд. Обратите внимание, что выполнение удаленных команд на активном агенте поддерживается начиная с Zabbix agent 7.0. Более старые активные агенты будут игнорировать любые удаленные команды, включенные в ответ сервера на активные проверки. | |
| id | number | no | Идентификатор удаленной команды. | |
| value | string | no | Результат выполнения удаленной команды, если выполнение прошло успешно. | |
| error | string | no | Сообщение об ошибке выполнения удаленной команды, если выполнение завершилось неудачей. | |
| session | string | yes | Уникальный идентификатор сеанса, генерируемый каждый раз при запуске агента. | |
| host | string | yes | Имя узла сети. | |
| version | string | yes | Номер версии агента. | |
| variant | number | yes | Вариант агента (1 - Zabbix agent, 2 - Zabbix agent 2). | |
Каждому значению назначается виртуальный ID. ID значения — это простой возрастающий счетчик, уникальный в рамках одного сеанса передачи данных (идентифицируемого по токену сеанса). Этот ID используется для отбрасывания дублирующихся значений, которые могут передаваться в условиях плохого соединения.
Ответ сервера
Ответ на данные агента отправляется сервером обратно агенту после обработки запроса данных агента.
{
"response": "success",
"info": "processed: 2; failed: 0; total: 2; seconds spent: 0.003534"
}
| Field | Type | Mandatory | Value |
|---|---|---|---|
| response | string | yes | success | failed |
| info | string | yes | Результаты обработки элементов данных. |
Если отправка некоторых значений на сервере завершается неудачей (например, потому что узел сети или элемент данных был отключен или удален), агент не будет повторять отправку этих значений.
Например:
- Агент открывает TCP-соединение
- Агент отправляет список значений
- Сервер обрабатывает данные и отправляет статус обратно
- TCP-соединение закрывается
Сообщение об ошибке будет обрезано до 2048 символов на стороне сервера.
Сообщение heartbeat
Отправка агентом
Сообщение heartbeat отправляется активным агентом на сервер/прокси Zabbix каждые HeartbeatFrequency секунд (настраивается в файле конфигурации Zabbix agent/agent 2).
Оно используется для мониторинга доступности активных проверок.
{
"request": "active check heartbeat",
"host": "Zabbix server",
"heartbeat_freq": 60,
"version": "8.0.0",
"variant": 2
}
| Field | Type | Mandatory | Value |
|---|---|---|---|
| request | string | yes | active check heartbeat |
| host | string | yes | Имя узла сети. |
| heartbeat_freq | number | yes | Частота heartbeat агента (параметр конфигурации HeartbeatFrequency). |
| version | string | yes | Номер версии агента. |
| variant | number | yes | Вариант агента (1 - Zabbix agent, 2 - Zabbix agent 2). |
Ответ перенаправления
Когда узел сети был переназначен, сервер может указать агенту перенаправить его heartbeat (и последующие активные проверки) на другой экземпляр прокси или сервера.
{
"response": "failed",
"redirect": {
"revision": 2,
"address": "192.0.2.1:10055"
}
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| response | string | yes | success | failed |
|
| redirect | object | yes | Инструкции по перенаправлению. | |
| revision | number | yes | Идентификатор ревизии конфигурации. | |
| address | string | yes | Адрес целевого сервера/прокси. | |
Старый XML-протокол
Zabbix принимает до 16 МБ данных XML, закодированных в Base64, но одно декодированное значение не должно превышать 64 КБ, иначе оно будет обрезано до 64 КБ при декодировании.