2. Пассивные и активные проверки агента
Обзор
В этом разделе приведена подробная информация о пассивных и активных проверках, выполняемых агентом Zabbix и агентом Zabbix 2.
Zabbix использует протокол обмена данными на основе JSON для взаимодействия с агентами.
Протоколы агента Zabbix и агента Zabbix 2 унифицированы начиная с Zabbix 7.0. Различие между запросами и ответами агента Zabbix и агента Zabbix 2 выражается значением тега "variant".
Пассивные проверки
Пассивная проверка представляет собой простой запрос данных. Сервер или прокси Zabbix запрашивает определенные данные (например, загрузку ЦП), а агент 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": "7.0.0",
"variant": 2,
"data": [
{
"value": "7.0.0"
}
]
}
| Field | Type | Mandatory | Value | |
|---|---|---|---|---|
| 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":"7.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":"7.0.0","variant":2,"data":[{"error":"Unsupported item key."}]}
- Сервер обрабатывает данные и изменяет состояние элемента данных на «не поддерживается», указывая заданное сообщение об ошибке
- TCP-соединение закрывается
Переключение на старый протокол
Чтобы сервер или прокси Zabbix могли работать с агентами версий до 7.0, использующими текстовый протокол, реализовано переключение на старый протокол.
Пассивные проверки выполняются с использованием протокола JSON (версия 7.0 и более поздние) после перезапуска или изменения конфигурации интерфейса. Если в ответе не получен корректный JSON (агент отправил «ZBX_NOTSUPPORTED»), Zabbix сохранит для интерфейса старый протокол в кэше и повторит проверку, отправив только ключ элемента данных.
Обратите внимание, что каждый час сервер/прокси Zabbix снова пытается работать с новым протоколом со всеми интерфейсами, при необходимости переключаясь на старый протокол.
Активные проверки
Активные проверки требуют более сложной обработки. Агент сначала должен получить с сервера/прокси список элементов данных и/или удалённых команд для независимой обработки.
Сервера/прокси для получения активных проверок перечислены в параметре «ServerActive» файла конфигурации агента. Частота запросов данных проверок настраивается параметром «RefreshActiveChecks» в этом же файле конфигурации. Однако, если обновление активных проверок завершится с ошибкой, запрос повторится через (жёстко заданные в коде) 60 секунд.
Начиная с версии Zabbix 6.4, агент (в активном режиме) больше не получает от сервера/прокси полную копию конфигурации раз в две минуты (по умолчанию). Вместо этого, чтобы уменьшить сетевой трафик и использование ресурсов, каждые 5 секунд (по умолчанию) выполняется инкрементная синхронизация конфигурации, после чего сервер/прокси предоставляет полную копию конфигурации, только если агент ещё не получил её либо что-то изменилось в конфигурации узла сети, глобальных макросах или глобальных регулярных выражениях.
Затем агент периодически отправляет новые значения на сервер(ы). Если агент получил какие-либо удалённые команды для выполнения, результат выполнения также будет отправлен. Обратите внимание, что выполнение удалённых команд на активном агенте поддерживается начиная с Zabbix agent 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": "7.0.0",
"variant": 2,
"config_revision": 1,
"session": "e3dcbd9ace2c9694e1d7bbd030eeef6e"
}
| Поле | Тип | Обязательное | Значение |
|---|---|---|---|
| request | string | да | active checks |
| host | string | да | Имя узла сети. |
| host_metadata | string | нет | Значение параметра конфигурации HostMetadata или метрики HostMetadataItem. |
| interface | string | нет | Значение параметра конфигурации HostInterface или метрики HostInterfaceItem. |
| ip | string | нет | Первый IP-адрес параметра конфигурации ListenIP, если он задан. |
| port | number | нет | Значение параметра конфигурации ListenPort, если оно задано и отличается от порта прослушивания агента по умолчанию. |
| version | string | да | Номер версии агента. |
| variant | number | да | Вариант агента (1 - агент Zabbix, 2 - агент Zabbix 2). |
| config_revision | number | нет | Идентификатор конфигурации для инкрементальной синхронизации конфигурации. |
| session | string | нет | Идентификатор сеанса для инкрементальной синхронизации конфигурации. |
Ответ сервера
Ответ на запрос активных проверок отправляется сервером агенту после обработки запроса активных проверок.
{
"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
}
]
}
| Поле | Тип | Обязательное | Значение | |
|---|---|---|---|---|
| response | string | да | success | failed |
|
| info | string | нет | Информация об ошибке в случае сбоя. | |
| data | array of objects | нет | Элементы данных активных проверок. Не включается, если конфигурация узла сети не изменилась. | |
| key | string | нет | Ключ элемента данных с раскрытыми макросами. | |
| itemid | number | нет | Идентификатор элемента данных. | |
| delay | string | нет | Интервал обновления элемента данных. Гибкие интервалы и интервалы планирования поддерживаются агентом Zabbix и агентом Zabbix 2 начиная с Zabbix 7.0. |
|
| lastlogsize | number | нет | Значение lastlogsize элемента данных. | |
| mtime | number | нет | Значение mtime элемента данных. | |
| timeout | string | нет | Тайм-аут элемента данных. | |
| refresh_unsupported | number | нет | Интервал обновления неподдерживаемых элементов данных. | |
| regexp | array of objects | нет | Глобальные регулярные выражения. | |
| name | string | нет | Имя глобального регулярного выражения. | |
| expression | string | нет | Глобальное регулярное выражение. | |
| expression_type | number | нет | Тип глобального регулярного выражения. | |
| exp_delimiter | string | нет | Разделитель глобального регулярного выражения. | |
| case_sensitive | number | нет | Настройка учета регистра глобального регулярного выражения. | |
| commands | array of objects | нет | Удаленные команды для выполнения. Включаются, если выполнение удаленной команды было инициировано операцией действия или выполнением ручного скрипта. Обратите внимание, что выполнение удаленных команд на активном агенте поддерживается начиная с агента Zabbix 7.0. Более старые активные агенты будут игнорировать удаленные команды, включенные в ответ сервера на запрос активных проверок. | |
| command | string | нет | Удаленная команда. | |
| id | number | нет | Идентификатор удаленной команды. | |
| wait | number | нет | Режим выполнения удаленной команды ("0" (не ожидать) для команд из операций действия; "1" (ожидать) для команд, выполняемых из ручного скрипта). | |
| timeout | number | нет | Тайм-аут выполнения удаленной команды в конфигурации сервера/прокси. | |
| config_revision | number | нет | Идентификатор конфигурации для инкрементальной синхронизации конфигурации. Не включается, если конфигурация узла сети не изменилась. Увеличивается, если конфигурация узла сети изменена. | |
Сервер должен ответить с результатом success.
Например:
- Агент открывает TCP-соединение
- Агент запрашивает список проверок
- Сервер отвечает списком элементов данных и удаленных команд для выполнения
- Агент анализирует ответ
- TCP-соединение закрывается
- Агент начинает периодический сбор данных и выполняет удаленные команды (поддерживается начиная с агента Zabbix 7.0)
Обратите внимание, что данные конфигурации (в том числе конфиденциальные) могут стать доступны сторонам, имеющим доступ к порту траппера сервера 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": "7.0.0",
"variant": 2
}
| Поле | Тип | Обязательное | Значение | |
|---|---|---|---|---|
| request | string | да | agent data |
|
| data | array of objects | да | Значения элементов данных. | |
| id | number | да | Идентификатор значения (инкрементный счётчик, используемый для проверки дублирующихся значений в случае проблем с сетью). | |
| itemid | number | да | Идентификатор элемента данных. | |
| value | string | нет | Значение элемента данных. | |
| lastlogsize | number | нет | Последний размер журнала элемента данных. | |
| mtime | number | нет | Время изменения элемента данных. | |
| state | number | нет | Состояние элемента данных. | |
| source | string | нет | Источник события журнала значений. | |
| eventid | number | нет | Идентификатор события журнала значений. | |
| severity | number | нет | Важность события журнала значений. | |
| timestamp | number | нет | Временная метка события журнала значений. | |
| clock | number | да | Временная метка значения (количество секунд с начала эпохи Unix). | |
| ns | number | да | Наносекунды временной метки значения. | |
| commands | array of objects | нет | Результат выполнения удалённых команд. Обратите внимание, что выполнение удалённых команд на активном агенте поддерживается начиная с Zabbix agent 7.0. Более старые активные агенты будут игнорировать все удалённые команды, включённые в ответ сервера на активные проверки. | |
| id | number | нет | Идентификатор удалённой команды. | |
| value | string | нет | Результат выполнения удалённой команды, если выполнение прошло успешно. | |
| error | string | нет | Сообщение об ошибке выполнения удалённой команды, если выполнение завершилось неудачно. | |
| session | string | да | Уникальный идентификатор сеанса, создаваемый при каждом запуске агента (32 шестнадцатеричных символа). | |
| host | string | да | Имя узла сети. | |
| version | string | да | Номер версии агента. | |
| variant | number | да | Вариант агента (1 - Zabbix agent, 2 - Zabbix agent 2). | |
Каждому значению назначается виртуальный идентификатор. Идентификатор значения представляет собой простой возрастающий счётчик, уникальный в рамках одного сеанса данных (определяемого токеном сеанса). Этот идентификатор используется для отбрасывания дублирующихся значений, которые могут отправляться в условиях нестабильного соединения.
Ответ сервера
Ответ на запрос данных агента отправляется сервером обратно агенту после обработки запроса данных агента.
{
"response": "success",
"info": "processed: 2; failed: 0; total: 2; seconds spent: 0.003534"
}
| Поле | Тип | Обязательное | Значение |
|---|---|---|---|
| response | string | да | success | failed |
| info | string | да | Результаты обработки элементов данных. |
Если отправка некоторых значений завершается ошибкой на сервере (например, узел сети или элемент данных отключён либо удалён), агент не будет повторно отправлять эти значения.
Например:
- Агент открывает TCP-соединение
- Агент отправляет список значений
- Сервер обрабатывает данные и отправляет статус обратно
- TCP-соединение закрывается
Сообщение об ошибке на стороне сервера будет обрезано до 2048 символов.
Сообщение проверки доступности
Агент отправляет
Сообщение проверки доступности отправляется активным агентом на сервер Zabbix/прокси каждые HeartbeatFrequency секунд (настраивается в конфигурационном файле агента Zabbix/агента 2).
Оно используется для мониторинга доступности активных проверок.
{
"request": "active check heartbeat",
"host": "Zabbix server",
"heartbeat_freq": 60,
"version": "7.0.0",
"variant": 2
}
| Поле | Тип | Обязательное | Значение |
|---|---|---|---|
| request | string | да | active check heartbeat |
| host | string | да | Имя узла сети. |
| heartbeat_freq | number | да | Частота отправки сообщений проверки доступности агентом (параметр конфигурации HeartbeatFrequency). |
| version | string | да | Номер версии агента. |
| variant | number | да | Вариант агента (1 - агент Zabbix, 2 - агент Zabbix 2). |
Ответ с перенаправлением
Если узел сети был переназначен, сервер может указать агенту перенаправить сообщения проверки доступности (и последующие активные проверки) на другой экземпляр прокси или сервера.
{
"response": "failed",
"redirect": {
"revision": 2,
"address": "192.0.2.1:10055"
}
}
| Поле | Тип | Обязательное | Значение | |
|---|---|---|---|---|
| response | string | да | success | failed |
|
| redirect | object | да | Инструкции по перенаправлению. | |
| revision | number | да | Идентификатор редакции конфигурации. | |
| address | string | да | Адрес целевого сервера/прокси. | |
Старый протокол XML
Zabbix принимает до 16 МБ данных в формате XML, закодированных в Base64, но одно декодированное значение не должно превышать 64 КБ. В противном случае при декодировании оно будет усечено до 64 КБ.