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

Обзор

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

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

Есть несколько определений используемых в деталях протокола, который используется Zabbix'ом:

<HEADER> - "ZBXD\x01" (5 байт)
       <DATALEN> - длина данных (8 байт). 1 будет сформировано как 01/00/00/00/00/00/00/00 (восемь байт в HEX, то есть число в 64-битном формате)

Чтобы не исчерпать память (потенциально) Zabbix сервер ограничен принимать только 128МБ за одно подключение (без ограничений до Zabbix 2.0.3) при использовании протокола Zabbix.

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

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

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

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

Ответ агента

<HEADER><DATALEN><DATA>

Например:

  1. Сервер открывает TCP соединение
  2. Сервер отправляет agent.ping\n
  3. Агент получает запрос и отвечает <HEADER><DATALEN>1
  4. Серверные процессы обрабатывают данные полученного значения, в нашем случае '1'.
  5. TCP соединение закрывается

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

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

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

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

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

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

<HEADER><DATALEN>{
          "request":"active checks",
          "host":"<hostname>"
       }

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

{
           "response":"success",
           "data":[
           {
               "key":"log[\/home\/zabbix\/logs\/zabbix_agentd.log]",
               "delay":"30",
               "lastlogsize":"0"
           },
           {
               "key":"agent.version",
               "delay":"600"
           }
           ]
       }

Сервер должен ответить с информацией об успешности. По каждому вернувшемуся элементу, должны существовать ключ и задержка. Также для элементов с типом информации "Журнал (лог)" должен существовать lastlogsize.

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

Например:

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

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

<HEADER><DATALEN>{
          "request":"agent data",
          "data":[
              {
                  "host":"<hostname>",
                  "key":"log[\/home\/zabbix\/logs\/zabbix_agentd.log]",
                  "value":" 13039:20090907:184546.759 zabbix_agentd started. ZABBIX 1.6.6 (revision {7836}).",
                  "lastlogsize":80,
                  "clock":1252926015
              },
              {
                  "host":"<hostname>",
                  "key":"agent.version",
                  "value":"1.6.6",
                  "clock":1252926015
              }
          ],
          "clock":1252926016
       }

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

<HEADER><DATALEN>{
           "response":"success",
           "info":"Processed 2 Failed 0 Total 2 Seconds spent 0.002070"
       }

Например:

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

Старый XML протокол

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