2. Пассивные и активные проверки агента

Обзор

Этот раздел подробно описывает пассивные и активные проверки, которые выполняются Zabbix агентом и Zabbix агентом 2.

Для взаимодействия с агентами 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 строка да "passive checks"
data массив объектов да Элемент данных пассивной проверки.
key строка да Ключ элемента данных с раскрытыми макросами.
timeout число да Время ожидания коммуникации.

Ответ агента

{
  "version": "7.0.0",
  "variant": 2,
  "data": [
    {
      "value": "7.0.0"
    }
  ]
}
Поле Тип Обязательное Значение
version строка да Номер версии агента.
variant число да Вариант агента (1 — Zabbix агент, 2 — Zabbix агент 2).
data массив объектов да Содержит результат проверки.
value строка нет Значение элемента данных, если проверка была успешной.
error строка нет Сообщение об ошибке, если проверка была неуспешной.

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

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

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

  1. Сервер открывает TCP-соединение
  2. Сервер отправляет: <ЗАГОЛОВОК><ДЛИНАДАННЫХ>{"request":"passive checks","data":[{"key":"vfs.fs.size[/nono]","timeout":3}]}
  3. Агент читает запрос и отвечает: <ЗАГОЛОВОК><ДЛИНАДАННЫХ>{"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 агента 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 строка да active checks
host строка да Имя узла сети.
host_metadata строка нет Значение параметра конфигурации HostMetadata или метрики HostMetadataItem.
interface строка нет Значение параметра конфигурации HostInterface или метрики HostInterfaceItem.
ip строка нет Первый IP параметра конфигурации ListenIP, если задан.
port число нет Значение параметра конфигурации ListenPort, если задано и не является портом, прослушиваемым агентом по умолчанию.
version строка да Номер версии агента.
variant число да Вариант агента (1 — Zabbix агент, 2 — Zabbix агент 2).
config_revision число нет Идентификатор конфигурации для инкрементной синхронизации конфигурации.
session строка нет Идентификатор сессии для инкрементной синхронизации конфигурации.

Ответ сервера

Ответ активных проверок посылается сервером обратно агенту после обработки запроса на активные проверки.

{
  "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 строка да success | failed
info строка нет Сообщение об ошибке в случае сбоя.
data массив объектов нет Элементы данных для активных проверок. Опущено, если конфигурация узла сети не изменилась.
key строка нет Ключ элемента данных с раскрытыми макросами.
itemid число нет Идентификатор элемента данных.
delay строка нет Интервал обновления элемента данных.
Гибкие интервалы и интервалы по расписанию поддерживаются как Zabbix агентом, так и Zabbix агентом 2, начиная с версии Zabbix 7.0.
lastlogsize число нет Последний размер файла журнала (lastlogsize) элемента данных.
mtime число нет Отметка времени последнего обновления (mtime) элемента данных.
timeout строка нет Время ожидания элемента данных.
refresh_unsupported число нет Интервал обновления неподдерживаемого элемента данных.
regexp массив объектов нет Глобальные регулярные выражения.
name строка нет Имя глобального регулярного выражения.
expression строка нет Глобальное регулярное выражение.
expression_type число нет Тип глобального регулярного выражения.
exp_delimiter строка нет Разделитель глобального регулярного выражения.
case_sensitive число нет Признак чувствительности к регистру глобального регулярного выражения.
commands массив объектов нет Удалённые команды для выполнения. Присутствует, если выполнение удалённой команды было инициировано операцией действия или запуском скрипта вручную. Обратите внимание, что удалённое выполнение команд на активном агенте поддерживается, начиная с версии Zabbix агента 7.0. Более старые активные агенты будут игнорировать любые удалённые команды, включённые в ответ активных проверок сервера.
command строка нет Удалённая команда.
id число нет Идентификатор удалённой команды.
wait число нет Режим выполнения удалённой команды ("0" (nowait, без ожидания) для команд из операций действий; "1" (wait, с ожиданием) для команд из запуска скрипта вручную).
timeout число нет Тайм-аут выполнения удалённой команды в настройках сервера/прокси.
config_revision число нет Идентификатор конфигурации для инкрементной синхронизации конфигурации. Будет отсутствовать, если конфигурация узла сети не меняется. При изменении конфигурации узла сети возрастает.

Ответ сервера должен быть успешным.

Например:

  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 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 Уровень серьезности журнала событий значения.
timestamp number no Временная метка журнала событий значения.
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 Уникальный идентификатор сеанса, генерируемый каждый раз при запуске агента (32 шестнадцатеричных символа).
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"
}
Поле Тип Обязательно Значение
response string yes success | failed
info string yes Результаты обработки элементов данных.

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

Например:

  1. Агент открывает TCP-соединение
  2. Агент отправляет список значений
  3. Сервер обрабатывает данные и отправляет статус обратно
  4. TCP-соединение закрывается

Сообщение об ошибке будет обрезано до 2048 символов на стороне сервера.

Сообщение heartbeat

Агент отправляет

Сообщение heartbeat («Я жив») отправляется активным агентом Zabbix серверу/прокси каждые HeartbeatFrequency секунд (настраивается в файле конфигурации Zabbix агента/ агента 2).

Используется для контроля доступности активных проверок

{
  "request": "active check heartbeat",
  "host": "Zabbix server",
  "heartbeat_freq": 60,
  "version": "7.0.0",
  "variant": 2
}
Поле Тип Обязательный Значение
request строка да active check heartbeat
host строка да Имя узла сети.
heartbeat_freq число да Частота сигналов «Я жив» (параметр конфигурации HeartbeatFrequency).
version строка да Номер версии агента.
variant число да Вариант агента (1 — Zabbix агент, 2 — Zabbix агент 2).

Ответ перенаправления

Когда узел сети был переназначен, может дать команду агенту перенаправить его heartbeat (и последующие активные проверки) на другой экземпляр прокси или сервера.

  {
    "response": "failed",
    "redirect": {
      "revision": 2,
      "address": "192.0.2.1:10055"
    }
  }
Поле Тип Обязательный Значение
response строка да success | failed
redirect массив объектов да Команды пренаправления.
revision число да Идентификатор ревизии конфигурации.
address строка да Адрес целевого сервера/прокси.

Более старый XML протокол

Zabbix воспринимает до 16 МВ XML данных, закодированных в Base64, но одиночное декодированное значение не должно быть длиннее 64 КБ, в противном случае значение будет обрезано до 64 КБ в процессе декодирования.