Этот раздел предоставляет сведения о том как пассивные и активные проверки выполняются с помощью 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 отправляет результат обратно серверу.
Запрос сервера
Ответ агента
Например:
Активные проверки требуют более сложной обработки. Сначала агент должен запросить с сервера(ов) список элементов данных для независимой обработки.
Сервера от которых необходимо получать для получения списка активных проверок перечислены в 'ServerActive' в файле конфигурации агента. Частота запроса этих проверок указывается в параметре 'RefreshActiveChecks' в том же самом файле конфигурации. Однако, если обновление активных проверок не было успешным, следующая попытка будет предпринята через зашитые в код 60 секунд.
Затем агент периодически отправляет новые значения серверу(ам).
Запрос агента
Ответ сервера
{
"response":"success",
"data":[
{
"key":"log[\/home\/zabbix\/logs\/zabbix_agentd.log]",
"delay":"30",
"lastlogsize":"0"
},
{
"key":"agent.version",
"delay":"600"
}
]
}
Сервер должен ответить с информацией об успешности. По каждому вернувшемуся элементу, должны существовать ключ и задержка. Также для элементов с типом информации "Журнал (лог)" должен существовать lastlogsize.
Если отправка некоторых значений на сервер завершается ошибкой (например, из-за того что узел сети или элемент данных отключен или удален), агент не будет пытаться повторить отправку этих значений.
Например:
Агент оправляет
<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"
}
Например:
Zabbix сервер будет принимать до 16 МБ XML Base64-encoded данных за одно подключение, но одно зашифрованное значение не должно быть больше чем 64 КБ, в противном случае оно будет усечено до 64 КБ в процессе дешифровки.