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

Обзор

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

Для взаимодействия с Zabbix агентом Zabbix использует протокол на основе JSON.

Смотрите также: Подробная информация о протоколе Zabbix агента 2.

Пассивные проверки

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

Запрос сервера

За определением длины заголовка и данных, пожалуйста, обратитесь к подробностям протокола.

<ключ элемента данных>

Ответ агента

<ДАННЫЕ>[\0<ОШИБКА>]

Часть в квадратных скобках выше опциональна и отправляется только по неподдерживаемым элементам данных.

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

  1. Сервер открывает TCP-соединение
  2. Сервер отправляет: <ЗАГОЛОВОК><ДЛИНАДАННЫХ>agent.ping
  3. Агент читает запрос и отвечает: <ЗАГОЛОВОК><ДЛИНАДАННЫХ>1
  4. Сервер обрабатывает данные, чтобы извлечь значение, в нашем случае «1»
  5. TCP-соединение закрывается

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

  1. Сервер открывает TCP-соединение
  2. Сервер отправляет: <ЗАГОЛОВОК><ДЛИНАДАННЫХ>vfs.fs.size[/nono]
  3. Агент читает запрос и отвечает: <ЗАГОЛОВОК><ДЛИНАДАННЫХ>ZBX_NOTSUPPORTED\0Cannot obtain filesystem information: [2] No such file or directory
  4. Сервер обрабатывает данные, меняет состояние элемента данных на неподдерживаемое с приведённым сообщением об ошибке
  5. TCP-соединение закрывается

Активные проверки

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

Серверы для получения активных проверок перечислены в параметре 'ServerActive' файла конфигурации агента. Частота запросов данных проверок настраивается параметром 'RefreshActiveChecks' в этом же файле конфигурации. Однако, если обновление активных проверок завершится с ошибкой, запрос повторится через 60 секунд (жёстко задано в коде).

Затем агент периодически отправляет новые значения на сервер(ы).

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

Получение списка элементов данных

Запрос агента

Запрос на активные проверки используется для получения списка активных проверок, обрабатываемых агентом. Этот запрос отсылается агентом после старта и затем с интервалом RefreshActiveChecks .

{
         "request": "active checks",
         "host": "Zabbix server",
         "host_metadata": "mysql,nginx",
         "hostinterface": "zabbix.server.lan",
         "ip": "159.168.1.1",
         "port": 12050
       }
Поле Тип Обязательный Значение
request строка да active checks
host строка да Имя узла сети.
host_metadata строка нет Значение метрики параметра конфигурации HostMetadata или HostMetadataItem.
hostinterface строка нет Значение метрики параметра конфигурации HostInterface или HostInterfaceItem.
ip строка нет Первый IP параметра конфигурации ListenIP, если задан.
port число нет Значение параметра конфигурации ListenPort, если задано и не является портом, прослушиваемым агентом по умолчанию.

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

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

{
         "response": "success",
         "data": [
           {
             "key": "log[/home/zabbix/logs/zabbix_agentd.log]",
             "key_orig": "log[/home/zabbix/logs/zabbix_agentd.log]",
             "itemid": 1234,
             "delay": "30s",
             "lastlogsize": 0,
             "mtime": 0
           },
           {
             "key": "agent.version",
             "key_orig": "agent.version",
             "itemid": 5678,
             "delay": "10m",
             "lastlogsize": 0,
             "mtime": 0
           }
         ]
       }
Поле Тип Обязательный Значение
response строка да success | failed
info строка нет Сообщение об ошибке в случае сбоя.
data массив объектов нет Элементы данных для активных проверок.
key строка нет Ключ элемента данных с раскрытыми макросами.
key_orig строка нет Ключ элемента данных с нераскрытыми макросами.
itemid число нет Идентификатор элемента данных.
delay строка нет Интервал обновления элемента данных.
lastlogsize число нет Последний размер файла журнала (lastlogsize) элемента данных.
mtime число нет Отметка времени последнего обновления (mtime) элемента данных.
refresh_unsupported число нет Интервал обновления неподдерживаемого элемента данных.
regexp массив объектов нет Глобальные регулярные выражения.
name строка нет Имя глобального регулярного выражения.
expression строка нет Глобальное регулярное выражение.
expression_type число нет Тип глобального регулярного выражения.
exp_delimiter строка нет Разделитель глобального регулярного выражения.
case_sensitive число нет Признак чувствительности к регистру глобального регулярного выражения.

Сервер обязан ответить успешно.

Например:

  1. Агент открывает TCP-соединение
  2. Агент запрашивает список проверок
  3. Сервер отвечает списком элементов данных (ключ элемента данных, интервал обновления)
  4. Агент анализирует ответ
  5. TCP-соединение закрывается
  6. Агент начинает периодический сбор данных

Обратите внимание, что при использовании активных проверок (чувствительные) данные конфигурации могут стать доступными лицам, имеющим доступ к порту траппера Zabbix сервера. Это возможно, так как любой может представиться активным агентом и запросить данные конфигурации элементов данных; аутентификация не производится, если только вы не используете опции шифрования.

Отправка собранных данных

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

Запрос агента с данными содержит собранные значения элементов данных.

{
         "request": "agent data",
         "data": [
           {
             "host": "Zabbix server",
             "key": "agent.version",
             "value": "2.4.0",
             "clock": 1400675595,
             "ns": 76808644
           },
           {
             "host": "Zabbix server",
             "key": "log[/home/zabbix/logs/zabbix_agentd.log]",
             "lastlogsize": 112,
             "value": " 19845:20140621:141708.521 Starting Zabbix Agent [<hostname>]. Zabbix 2.4.0 (revision 50000).",
             "clock": 1400675595,
             "ns": 77053975
           }
         ],
         "session": "1234456akdsjhfoui"
       }
Поле Тип Обязательный Значение
request строка да agent data
session строка да Уникальный идентификатор сессии, генерируемый каждый раз при старте агента.
data массив объектов да Значения элементов данных.
id число да Идентификатор значения (возрастающий счётчик, используемый для проверки дубликатов значений в случае сетевых проблем).
host строка да Имя узла сети.
key строка да Ключ элемента данных.
value строка нет Значение элемента данных.
lastlogsize число нет Последний размер журнала (lastlogsize) элемента данных.
mtime число нет Отметка времени последнего обновления (mtime) элемента данных.
state число нет Состояние элемента данных.
source строка нет Источник (source) значения журнала событий.
eventid число нет Идентификатор (eventid) значения журнала событий.
severity число нет Важность (severity) значения журнала событий.
timestamp число нет Отметка времени (timestamp) значения журнала событий.
clock число да Отметка времени значения (секунд с начала эпохи).
ns число да Наносекунды отметки времени значения.

Каждому значению назначается виртуальный ID. Значение ID - простой возрастающий счётчик, уникальный в пределах одной сессии данных (идентифицируемой токеном сессии). Этот ID используется, чтобы отбрасывать дубликаты значений, которые могли быть отосланы в средах с плохой связью.

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

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

{
         "response": "success",
         "info": "processed: 2; failed: 0; total: 2; seconds spent: 0.003534"
       }
Поле Тип Обязательный Значение
response строка да success | failed
info строка да Результаты обработки элементов данных.

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

Например:

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

Обратите внимание на то, как в примере выше указывается неподдерживаемое состояние для vfs.fs.size[/nono] при помощи значения "state", равного 1, и сообщения об ошибке в свойстве "value".

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

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

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