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 Сообщение об ошибке, если проверка завершилась неуспешно.

Например, для поддерживаемых элементов данных:

  1. Сервер открывает TCP-соединение
  2. Сервер отправляет <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"agent.ping","timeout":3}]}
  3. Агент считывает запрос и отвечает <HEADER><DATALEN>{"version":"7.0.0","variant":2,"data":[{"value":1}]}
  4. Сервер обрабатывает данные, чтобы получить значение — в нашем случае «1»
  5. TCP-соединение закрывается

Для неподдерживаемых элементов данных:

  1. Сервер открывает TCP-соединение
  2. Сервер отправляет <HEADER><DATALEN>{"request":"passive checks","data":[{"key":"vfs.fs.size[/nono]","timeout":3}]}
  3. Агент считывает запрос и отвечает <HEADER><DATALEN>{"version":"7.0.0","variant":2,"data":[{"error":"Unsupported item key."}]}
  4. Сервер обрабатывает данные и изменяет состояние элемента данных на «не поддерживается», указывая заданное сообщение об ошибке
  5. 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.

Например:

  1. Агент открывает TCP-соединение
  2. Агент запрашивает список проверок
  3. Сервер отвечает списком элементов данных и удаленных команд для выполнения
  4. Агент анализирует ответ
  5. TCP-соединение закрывается
  6. Агент начинает периодический сбор данных и выполняет удаленные команды (поддерживается начиная с агента 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 да Результаты обработки элементов данных.

Если отправка некоторых значений завершается ошибкой на сервере (например, узел сети или элемент данных отключён либо удалён), агент не будет повторно отправлять эти значения.

Например:

  1. Агент открывает TCP-соединение
  2. Агент отправляет список значений
  3. Сервер обрабатывает данные и отправляет статус обратно
  4. 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 КБ.