2. Пассивные и активные проверки агента
Обзор
Этот раздел подробно описывает пассивные и активные проверки, которые выполняются Zabbix агентом.
Для взаимодействия с агентами Zabbix использует коммуникационный протокол на основе JSON.
Протоколы Zabbix агента и Zabbix агента 2 были унифицированы, начиная с версии Zabbix 7.0. Отличие между запросами/ответами Zabbix агента и Zabbix агента 2 выражается значением тега «variant».
Пассивные проверки
Пассивная проверка — это простой запрос данных. Zabbix сервер или прокси запрашивает некоторые данные (например, загрузку CPU), а Zabbix агент отправляет результат обратно на сервер.
Пассивные проверки выполняются асинхронно — не требуется получать ответ на один запрос до запуска других проверок. Разрешение DNS также выполняется асинхронно.
Опросчик агента попытается подключиться ко всем адресам, возвращённым при DNS-поиске. Это гарантирует, что если один IP-адрес недоступен, опросчик попробует следующий доступный адрес, повышая вероятность успешного подключения. Это улучшение применяется как к Zabbix серверу, так и к прокси.
Максимальная параллельность асинхронных проверок составляет 1000 (определяется параметром MaxConcurrentChecksPerPoller).
Количество асинхронных опросчиков агента определяется параметром StartAgentPollers.
Запрос сервера
Описание заголовка и длины данных см. в разделе подробности протокола.
{
"request": "passive checks",
"data": [
{
"key": "agent.version",
"timeout": 3
}
]
}
| Поле | Тип | Обязательное | Значение | |
|---|---|---|---|---|
| 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"
}
]
}
| Поле | Тип | Обязательное | Значение | |
|---|---|---|---|---|
| version | string | yes | Номер версии агента. | |
| variant | number | yes | Вариант агента (1 - Zabbix агент, 2 - Zabbix агент 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 агента 7.0.
Если агент находится за брандмауэром, вы можете рассмотреть возможность использования исключительно Активных проверок, т.к. в этом случае вам не понадобится менять настройки брандмауэра для разрешения начальных входящих соединений.
Получение списка элементов данных
Запрос агента
Запрос активных проверок используется для получения активных проверок, которые должны обрабатываться агентом. Этот запрос отправляется агентом при запуске, а затем с интервалами 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_metadata | string | no | Значение параметра конфигурации HostMetadata или метрики HostMetadataItem. |
| interface | string | no | Значение параметра конфигурации HostInterface или метрики HostInterfaceItem. |
| ip | string | no | Первый IP из параметра конфигурации ListenIP, если задан. |
| port | number | no | Значение параметра конфигурации ListenPort, если задано и не равно порту прослушивания агента по умолчанию. |
| version | string | yes | Номер версии агента. |
| variant | number | yes | Вариант агента (1 - Zabbix агент, 2 - Zabbix агент 2). |
| config_revision | number | no | Идентификатор конфигурации для инкрементальной синхронизации конфигурации. |
| session | string | no | Идентификатор сессии для инкрементальной синхронизации конфигурации. |
Ответ сервера
Ответ активных проверок отправляется сервером обратно агенту после обработки запроса активных проверок.
{
"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 | Информация об ошибке в случае сбоя. | |
| data | array of objects | no | Элементы данных активных проверок. Опускается, если конфигурация узла сети не изменилась. | |
| key | string | no | Ключ элемента данных с раскрытыми макросами. | |
| itemid | number | no | Идентификатор элемента данных. | |
| delay | string | no | Интервал обновления элемента данных. Гибкие интервалы/интервалы по расписанию поддерживаются как Zabbix агентом, так и Zabbix агентом 2, начиная с Zabbix 7.0. |
|
| lastlogsize | number | no | Значение lastlogsize элемента данных. | |
| mtime | number | no | Значение mtime элемента данных. | |
| timeout | string | no | Тайм-аут элемента данных. | |
| refresh_unsupported | number | no | Интервал обновления неподдерживаемого элемента данных. | |
| regexp | array of objects | no | Глобальные регулярные выражения. | |
| name | string | no | Имя глобального регулярного выражения. | |
| expression | string | no | Глобальное регулярное выражение. | |
| expression_type | number | no | Тип глобального регулярного выражения. | |
| exp_delimiter | string | no | Разделитель глобального регулярного выражения. | |
| case_sensitive | number | no | Настройка чувствительности к регистру для глобального регулярного выражения. | |
| commands | array of objects | no | Удалённые команды для выполнения. Включаются, если выполнение удалённой команды было инициировано операцией действия или ручным выполнением скрипта. Обратите внимание, что выполнение удалённых команд на активном агенте поддерживается начиная с Zabbix агент 7.0. Более старые активные агенты будут игнорировать любые удалённые команды, включённые в ответ сервера активных проверок. | |
| command | string | no | Удалённая команда. | |
| id | number | no | Идентификатор удалённой команды. | |
| wait | number | no | Режим выполнения удалённой команды ("0" (nowait) для команд из операций действия; "1" (wait) для команд из ручного выполнения скрипта). | |
| config_revision | number | no | Идентификатор конфигурации для инкрементальной синхронизации конфигурации. Опускается, если конфигурация узла сети не изменилась. Увеличивается, если конфигурация узла сети изменена. | |
Сервер должен ответить сообщением об успешном выполнении.
Например:
- Агент открывает TCP-соединение
- Агент запрашивает список проверок
- Сервер отвечает списком элементов данных и удалённых команд для выполнения
- Агент разбирает ответ
- TCP-соединение закрывается
- Агент начинает периодический сбор данных и выполняет удалённые команды (поддерживается начиная с Zabbix агент 7.0)
Обратите внимание, что при использовании активной проверки (чувствительные) данные конфигурации могут стать доступны сторонам, имеющим доступ к порту trapper сервера Zabbix. Это возможно, потому что любой может выдать себя за активный агент и запросить данные конфигурации элементов данных; аутентификация не выполняется, если не используются параметры шифрования.
Отправка собранных данных
Агент отправляет
Запрос данных агента содержит собранные значения элементов данных и значения для выполненных удалённых команд (если есть).
{
"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
}
| Поле | Тип | Обязательное | Значение |
|---|---|---|---|
| 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.0:10055"
}
}
| Поле | Тип | Обязательное | Значение | |
|---|---|---|---|---|
| response | string | yes | success | failed |
|
| redirect | object | yes | Инструкции по перенаправлению. | |
| revision | number | yes | Идентификатор редакции конфигурации. | |
| address | string | yes | Адрес целевого сервера/прокси. | |
Более старый XML протокол
Zabbix воспринимает до 16 МВ XML данных, закодированных в Base64, но одиночное декодированное значение не должно быть длиннее 64 КБ, в противном случае значение будет обрезано до 64 КБ в процессе декодирования.