Этот раздел описывает детали пассивных и активных проверок, которые выполняются Zabbix агентом.
Zabbix использует протокол на основе JSON для взаимодействия с Zabbix агентом.
Имеется несколько определений используемых в параметрах протокола, используемом в Zabbix:
<HEADER> - "ZBXD\x01" (5 байт) <DATALEN> - размер данных (8 байт). число 1 отформатируется в 01/00/00/00/00/00/00/00 (восемь байт в HEX, 64-битное число)
Чтобы не израсходовать память полностью (в теории) Zabbix сервер ограничен на прием данных только 128МБ за одно соединение при использовании Zabbix протокола.
Пассивной проверкой является простой запрос данных. Zabbix сервер или прокси запрашивает какие-либо данные (к примеру, Загрузку CPU) и Zabbix агент отправляет обратно результат серверу.
Запрос сервера
<ключ элемента данных>\n
Ответ агента
<HEADER><DATALEN><DATA>[\0<ERROR>]
Часть в квадратных скобках выше опциональна и отправляется только по неподдерживаемым элементам данных.
Например:
Для неподдерживаемых элементов данных:
Активные проверки требуют более сложной обработки. Агент должен сначала получить с сервера список элементов данных для независимой обработки.
Сервера, которые отдают активные проверки, перечислены в параметре “ServerActive” файла конфигурации агента. Частота запросов проверок настраивается параметром 'RefreshActiveChecks' в том же файле конфигурации. Однако, если обновление активных проверок завершится с ошибкой, запрос повторится через, жестко задано в коде, 60 секунд.
Затем агент периодически отправляет новые значения на сервер(а).
Запрос агента
<HEADER><DATALEN>{ "request":"active checks", "host":"<имя хоста>" }
Ответ сервера
<HEADER><DATALEN>{ "response":"success", "data":[ { "key":"log[/home/zabbix/logs/zabbix_agentd.log]", "delay":30, "lastlogsize":0, "mtime":0 }, { "key":"agent.version", "delay":600, "lastlogsize":0, "mtime":0 }, { "key":"vfs.fs.size[/nono]", "delay":600, "lastlogsize":0, "mtime":0 } ] }
Сервер должен ответить положительно. У каждого полученного элемента данных обязательно должны быть указаны параметры key, delay, lastlogsize и mtime, независимо от того элемент данных является журнальным или нет.
Например:
Отправка агента
<HEADER><DATALEN>{ "request":"agent data", "data":[ { "host":"<hostname>", "key":"agent.version", "value":"2.4.0", "clock":1400675595, "ns":76808644 }, { "host":"<hostname>", "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 }, { "host":"<hostname>", "key":"vfs.fs.size[/nono]", "state":1, "value":"Cannot obtain filesystem information: [2] No such file or directory", "clock":1400675595, "ns":78154128 } ], "clock": 1400675595, "ns": 78211329 }
Ответ сервера
<HEADER><DATALEN>{ "response":"success", "info":"processed: 3; failed: 0; total: 3; seconds spent: 0.003534" }
Например:
Обратите внимание на то, как в примере выше указывается неподдерживаемое состояние для vfs.fs.size[/nono] при помощи значения “state” равного 1 и сообщения об ошибке в свойстве “value”.