Протокол обмена данными между сервером-прокси

Обзор

Обмен данными между сервером - прокси основывается на JSON формате.

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

Запрос прокси конфигурации

Запрос proxy config отправляется сервером для предоставления прокси его данных конфигурации. Этот запрос отправляется каждые ProxyConfigFrequency (параметр конфигурации сервера) секунд.

имя тип значения описание
сервер→прокси:
request строка 'proxy config'
<таблица> объект один или несколько объектов с данными из <таблицы>
fields массив массив имен полей
- строка имя поля
data массив массив строк
- массив массив колонок
- строка,число значение колонки с типом, который зависит от типа колонки в схеме базы данных
прокси→сервер:
response строка информация успешности запроса ('success' или 'failed')

Пример:

сервер→прокси:

{
           "globalmacro":{
               "fields":[
                   "globalmacroid",
                   "macro",
                   "value"
               ],
               "data":[
                   [
                       2,
                       "{$SNMP_COMMUNITY}",
                       "public"
                   ]
               ]
           },
           "hosts":{
               "fields":[
                   "hostid",
                   "host",
                   "status",
                   "ipmi_authtype",
                   "ipmi_privilege",
                   "ipmi_username",
                   "ipmi_password",
                   "name",
                   "tls_connect",
                   "tls_accept",
                   "tls_issuer",
                   "tls_subject",
                   "tls_psk_identity",
                   "tls_psk"
               ],
               "data":[
                   [
                       10001,
                       "Template OS Linux",
                       3,
                       -1,
                       2,
                       "",
                       "",
                       "Template OS Linux",
                       1,
                       1,
                       "",
                       "",
                       "",
                       ""
                   ],
                   [
                       10050,
                       "Template App Zabbix Agent",
                       3,
                       -1,
                       2,
                       "",
                       "",
                       "Template App Zabbix Agent",
                       1,
                       1,
                       "",
                       "",
                       "",
                       ""
                   ],
                   [
                       10105,
                       "Logger",
                       0,
                       -1,
                       2,
                       "",
                       "",
                       "Logger",
                       1,
                       1,
                       "",
                       "",
                       "",
                       ""
                   ]
               ]
           },
           "interface":{
               "fields":[
                   "interfaceid",
                   "hostid",
                   "main",
                   "type",
                   "useip",
                   "ip",
                   "dns",
                   "port",
                   "bulk"
               ],
               "data":[
                   [
                       2,
                       10105,
                       1,
                       1,
                       1,
                       "127.0.0.1",
                       "",
                       "10050",
                       1
                   ]
               ]
           },
           ...
       }

прокси→сервер:

{
         "response": "success"
       }
Запрос доступности узлов сети

Запрос host availability используется для получения данных о доступности узлов сети с прокси. Этот запрос отправляется каждые ProxyDataFrequency (параметр конфигурации сервер) секунды.

имя тип значения описание
сервер→прокси:
request строка 'host availability'
прокси→сервер:
data массив массив объектов с данными о доступности узлов сети
hostid число идентификатор узла сети
available число доступность Zabbix агента

0, HOST_AVAILABLE_UNKNOWN - неизвестно
1, HOST_AVAILABLE_TRUE - доступен
2, HOST_AVAILABLE_FALSE - недоступен
error строка сообщение об ошибке Zabbix агента или пустая строка
snmp_available число доступность SNMP агента

0, HOST_AVAILABLE_UNKNOWN - неизвестно
1, HOST_AVAILABLE_TRUE - доступен
2, HOST_AVAILABLE_FALSE - недоступен
snmp_error строка сообщение об ошибке SNMP агента или пустая строка
ipmi_available число доступность IPMI агента

0, HOST_AVAILABLE_UNKNOWN - неизвестно
1, HOST_AVAILABLE_TRUE - доступен
2, HOST_AVAILABLE_FALSE - недоступен
ipmi_error строка сообщение об ошибке IMPI агента или пустая строка
jmx_available число доступность JMX агента

0, HOST_AVAILABLE_UNKNOWN - неизвестно
1, HOST_AVAILABLE_TRUE - доступен
2, HOST_AVAILABLE_FALSE - недоступен
jmx_error строка сообщение об ошибке JMX агента или пустая строка
сервер→прокси:
response строка информация успешности запроса ('success' или 'failed')

Пример:

сервер→прокси:

{
         "request": "host availability"
       }

прокси→сервер:

{
         "data": [
           {
             "hostid": 10106,
             "available": 1,
             "error": "",
             "snmp_available": 0,
             "snmp_error": "",
             "ipmi_available": 0,
             "ipmi_error": "",
             "jmx_available": 0,
             "jmx_error": ""
           },
           {
             "hostid": 10107,
             "available": 1,
             "error": "",
             "snmp_available": 0,
             "snmp_error": "",
             "ipmi_available": 0,
             "ipmi_error": "",
             "jmx_available": 0,
             "jmx_error": ""
           }
         ]
       }

сервер→прокси:

{
         "response": "success"
       }
Запрос данных истории

Запрос history data используется данных истории по элементам данных с прокси. Этот запрос отправляется каждые ProxyDataFrequency (параметр конфигурации сервера) секунд.

имя тип значения описание
сервер→прокси:
request строка 'history data'
прокси→сервер:
data массив массив объектов данных истории
host число идентификатор прокси
key число ключ элемента данных
clock число штамп времени значения элемента данных (секунды)
ns число штамп времени значения элемента данных (наносекунды)
value строка (опционален) значение элемента данных
timestamp число (опционален) штамп времени элементов данных журнального типа
source строка (опционален) значение источника eventlog элемента данных
severity число (опционален) значение важности eventlog элемента данных
eventid число (опционален) значение eventid eventlog элемента данных
state строка (опционален) статус элемента данных
0, ITEM_STATE_NORMAL
1, ITEM_STATE_NOTSUPPORTED
lastlogsize число (опционален) последний известный размер журнала элемента данных журнального типа
mtime число (опционален) время модификации элемента данных журнального типа
clock число штамп времени передачи данных (секунды)
ns число штамп времени передачи данных (наносекунды)
сервер→прокси:
response строка информация успешности запроса ('success' или 'failed')

Пример:

сервер→прокси:

{
         "request": "history data"
       }

прокси→сервер:

{
           "data":[
               {
                   "host":"Logger1",
                   "key":"system.cpu.switches",
                   "clock":1478609647,
                   "ns":332510044,
                   "value":"52956612"
               },
               {
                   "host":"Logger2",
                   "key":"net.if.in[vboxnet0]",
                   "clock":1478609647,
                   "ns":330690279,
                   "state":1,
                   "value":"Cannot find information for this network interface in /proc/net/dev."
               }
           ],
           "clock":1478609648,
           "ns":157729208
       }

сервер→прокси:

{
         "response": "success"
       }
Запрос данных обнаружения

Запрос discovery data используется для получения данных о сетевых обнаружениях с прокси. Этот запрос отправляется каждые ProxyDataFrequency (параметр конфигурации сервера) секунд.

имя тип значения описание
сервер→прокси:
request строка 'discovery data'
прокси→сервер:
data массив массив объектов данных обнаружения
clock число штамп времени данных обнаружения
druleid число идентификатор правила обнаружения
dcheckid число идентификатор проверки обнаружения или null для данных правила обнаружения
type число тип проверки обнаружения:

-1 данные правила обнаружения
0, SVC_SSH - Проверка SSH сервиса
1, SVC_LDAP - Проверка LDAP сервиса
2, SVC_SMTP - Проверка SMTP сервиса
3, SVC_FTP - Проверка FTP сервиса
4, SVC_HTTP - Проверка HTTP сервиса
5, SVC_POP - Проверка POP сервиса
6, SVC_NNTP - Проверка NNTP сервиса
7, SVC_IMAP - Проверка IMAP сервиса
8, SVC_TCP - Проверка доступности TCP порта
9, SVC_AGENT - Zabbix агент
10, SVC_SNMPv1 - SNMPv1 агент
11, SVC_SNMPv2 - SNMPv2 агент
12, SVC_ICMPPING - ICMP пинг
13, SVC_SNMPv3 - SNMPv3 агент
14, SVC_HTTPS - Проверка HTTPS сервиса
15, SVC_TELNET - Проверка доступности Telnet
ip строка IP адрес хоста
dns строка DNS имя хоста
port число (опционален) номер порта сервиса
key_ строка (опционален) ключ элемента данных для проверки обнаружения с типом 9 SVC_AGENT
value строка (опционален) полученное значение от сервиса, может быть пустым для большинства сервисов
status число (опционален) состояние сервиса:

0, DOBJECT_STATUS_UP - Сервис ДОСТУПЕН
1, DOBJECT_STATUS_DOWN - Сервис НЕДОСТУПЕН
сервер→прокси:
response строка информация успешности запроса ('success' или 'failed')

Пример:

сервер→прокси:

{
         "request": "discovery data"
       }

прокси→сервер:

{
           "data":[
               {
                   "clock":1478608764,
                   "drule":2,
                   "dcheck":3,
                   "type":12,
                   "ip":"10.3.0.10",
                   "dns":"vdebian",
                   "status":1
               },
               {
                   "clock":1478608764,
                   "drule":2,
                   "dcheck":null,
                   "type":-1,
                   "ip":"10.3.0.10",
                   "dns":"vdebian",
                   "status":1
               }
           ],
           "clock":1478608768
       }

сервер→прокси:

{
         "response": "success"
       }
Запрос данных авторегистрации

Запрос auto registration используется для получения данных авторегистрации агентов с прокси. Этот запрос отправляется каждые ProxyDataFrequency (параметр конфигурации сервера) секунд.

имя тип значения описание
сервер→прокси:
request строка 'auto registration'
прокси→сервер:
data массив массив объектов данных авторегистрации
clock число штамп времени данных авторегистрации
host строка имя хоста
ip строка (опционален) IP адрес хоста
dns строка (опционален) разрешенное DNS имя с IP адреса
port строка (опционален) порт хоста
host_metadata строка (опционален) метаданные хоста отправленные агентом (на основе HostMetadata или HostMetadataItem параметров конфигурации агента)
сервре→прокси:
response строка информация успешности запроса ('success' или 'failed')

Пример:

сервер→прокси:

{
         "request": "auto registration"
       }

сервер→прокси:

{
           "data": [
               {
                   "clock": 1478608371,
                   "host": "Logger1",
                   "ip": "10.3.0.1",
                   "dns": "localhost",
                   "port": "10050"
               },
               {
                   "clock": 1478608381,
                   "host": "Logger2",
                   "ip": "10.3.0.2",
                   "dns": "localhost",
                   "port": "10050"
               }
           ],
           "clock": 1478608390
       }

сервер→прокси:

{
         "response": "success"
       }

Активный прокси

Запрос доступности прокси

Запрос proxy heartbeat отправляется прокси для сообщения что этот прокси работает. Этот запрос отправляется каждые HeartbeatFrequency (параметр конфигурации прокси) секунд.

имя тип значения описание
прокси→сервер:
request строка 'proxy heartbeat'
host строка имя прокси
сервер→прокси:
response строка информация успешности запроса ('success' или 'failed')

прокси→сервер:

{
          "request": "proxy heartbeat",
          "host": "Proxy #12"
       }

сервер→прокси:

{
         "response": "success"
       }
Proxy config request

Запрос proxy config отправляется прокси для получения данных конфигурации прокси. Этот запрос отправляется каждые ConfigFrequency (параметр конфигурации прокси) секунд.

имя тип значения описание
прокси→сервер:
request строка 'proxy config'
host строка имя прокси
сервер→прокси:
request строка 'proxy config'
<таблица> объект один или несколько объектов с данными из <таблицы>
fields массив массив имен полей
- строка имя поля
data массив массив строк
- массив массив колонок
- строка,число значение колонки с типом, который зависит от типа колонки в схеме базы данных
прокси→сервер:
response строка информация успешности запроса ('success' или 'failed')

Пример:

прокси→сервер:

{
         "request": "proxy config",
         "host": "Proxy #12",
       }

сервер→прокси:

{
           "globalmacro":{
               "fields":[
                   "globalmacroid",
                   "macro",
                   "value"
               ],
               "data":[
                   [
                       2,
                       "{$SNMP_COMMUNITY}",
                       "public"
                   ]
               ]
           },
           "hosts":{
               "fields":[
                   "hostid",
                   "host",
                   "status",
                   "ipmi_authtype",
                   "ipmi_privilege",
                   "ipmi_username",
                   "ipmi_password",
                   "name",
                   "tls_connect",
                   "tls_accept",
                   "tls_issuer",
                   "tls_subject",
                   "tls_psk_identity",
                   "tls_psk"
               ],
               "data":[
                   [
                       10001,
                       "Template OS Linux",
                       3,
                       -1,
                       2,
                       "",
                       "",
                       "Template OS Linux",
                       1,
                       1,
                       "",
                       "",
                       "",
                       ""
                   ],
                   [
                       10050,
                       "Template App Zabbix Agent",
                       3,
                       -1,
                       2,
                       "",
                       "",
                       "Template App Zabbix Agent",
                       1,
                       1,
                       "",
                       "",
                       "",
                       ""
                   ],
                   [
                       10105,
                       "Logger",
                       0,
                       -1,
                       2,
                       "",
                       "",
                       "Logger",
                       1,
                       1,
                       "",
                       "",
                       "",
                       ""
                   ]
               ]
           },
           "interface":{
               "fields":[
                   "interfaceid",
                   "hostid",
                   "main",
                   "type",
                   "useip",
                   "ip",
                   "dns",
                   "port",
                   "bulk"
               ],
               "data":[
                   [
                       2,
                       10105,
                       1,
                       1,
                       1,
                       "127.0.0.1",
                       "",
                       "10050",
                       1
                   ]
               ]
           },
           ...
       }

прокси→сервер:

{
         "response": "success"
       }
Запрос доступности узлов сети

Запрос host availability отправляется прокси для предоставления данных о доступности узлов сети. Этот запрос отправляется каждые DataSenderFrequency (параметр конфигурации прокси) секунд.

имя тип значения описание
прокси→сервер:
request строка 'host availability'
host строка имя прокси
data массив массив объектов с данными о доступности узлов сети
hostid число идентификатор узла сети
available число доступность Zabbix агента

0, HOST_AVAILABLE_UNKNOWN - неизвестно
1, HOST_AVAILABLE_TRUE - доступен
2, HOST_AVAILABLE_FALSE - недоступен
error строка сообщение об ошибке Zabbix агента или пустая строка
snmp_available число доступность SNMP агента

0, HOST_AVAILABLE_UNKNOWN - неизвестно
1, HOST_AVAILABLE_TRUE - доступен
2, HOST_AVAILABLE_FALSE - недоступен
snmp_error строка сообщение об ошибке SNMP агента или пустая строка
ipmi_available число доступность IPMI агента

0, HOST_AVAILABLE_UNKNOWN - неизвестно
1, HOST_AVAILABLE_TRUE - доступен
2, HOST_AVAILABLE_FALSE - недоступен
ipmi_error строка сообщение об ошибке IMPI агента или пустая строка
jmx_available число доступность JMX агента

0, HOST_AVAILABLE_UNKNOWN - неизвестно
1, HOST_AVAILABLE_TRUE - доступен
2, HOST_AVAILABLE_FALSE - недоступен
jmx_error строка сообщение об ошибке JMX агента или пустая строка
сервер→прокси:
response строка информация успешности запроса ('success' или 'failed')

Пример:

прокси→сервер:

{
         "request": "host availability",
         "host": "Proxy #12", 
         "data": [
           {
             "hostid": 10106,
             "available": 1,
             "error": "",
             "snmp_available": 0,
             "snmp_error": "",
             "ipmi_available": 0,
             "ipmi_error": "",
             "jmx_available": 0,
             "jmx_error": ""
           },
           {
             "hostid": 10107,
             "available": 1,
             "error": "",
             "snmp_available": 0,
             "snmp_error": "",
             "ipmi_available": 0,
             "ipmi_error": "",
             "jmx_available": 0,
             "jmx_error": ""
           }
         ]
       }

сервер→прокси:

{
         "response": "success"
       }
Запрос данных истории

Запрос history data отправляется прокси для предоставления данных истории по элементам данных. Этот запрос отправляется каждые DataSenderFrequency (параметр конфигурации прокси) секунд.

имя тип значения описание
прокси→сервер:
request строка 'history data'
host строка имя прокси
data массив массив объектов данных истории
host число идентификатор прокси
key число ключ элемента данных
clock число штамп времени значения элемента данных (секунды)
ns число штамп времени значения элемента данных (наносекунды)
value строка (опционален) значение элемента данных
timestamp число (опционален) штамп времени элементов данных журнального типа
source строка (опционален) значение источника eventlog элемента данных
severity число (опционален) значение важности eventlog элемента данных
eventid число (опционален) значение eventid eventlog элемента данных
state строка (опционален) статус элемента данных
0, ITEM_STATE_NORMAL
1, ITEM_STATE_NOTSUPPORTED
lastlogsize число (опционален) последний известный размер журнала элемента данных журнального типа
mtime число (опционален) время модификации элемента данных журнального типа
clock число штамп времени передачи данных (секунды)
ns число штамп времени передачи данных (наносекунды)
сервер→прокси:
response строка информация успешности запроса ('success' или 'failed')

Пример:

прокси→сервер:

{
           "request": "history data",
           "host": "Proxy #12", 
           "data":[
               {
                   "host":"Logger1",
                   "key":"system.cpu.switches",
                   "clock":1478609647,
                   "ns":332510044,
                   "value":"52956612"
               },
               {
                   "host":"Logger2",
                   "key":"net.if.in[vboxnet0]",
                   "clock":1478609647,
                   "ns":330690279,
                   "state":1,
                   "value":"Cannot find information for this network interface in /proc/net/dev."
               }
           ],
           "clock":1478609648,
           "ns":157729208
       }

сервер→прокси:

{
         "response": "success"
       }
Запрос данных обнаружения

Запрос discovery data отправляется прокси для предоставления данных о сетевых обнаружениях. Этот запрос отправляется каждые DataSenderFrequency (параметр конфигурации прокси) секунд.

имя тип значения описание
прокси→сервер:
request строка 'discovery data'
host строка имя прокси
data массив массив объектов данных обнаружения
clock число штамп времени данных обнаружения
druleid число идентификатор правила обнаружения
dcheckid число идентификатор проверки обнаружения или null для данных правила обнаружения
type число тип проверки обнаружения:

-1 данные правила обнаружения
0, SVC_SSH - Проверка SSH сервиса
1, SVC_LDAP - Проверка LDAP сервиса
2, SVC_SMTP - Проверка SMTP сервиса
3, SVC_FTP - Проверка FTP сервиса
4, SVC_HTTP - Проверка HTTP сервиса
5, SVC_POP - Проверка POP сервиса
6, SVC_NNTP - Проверка NNTP сервиса
7, SVC_IMAP - Проверка IMAP сервиса
8, SVC_TCP - Проверка доступности TCP порта
9, SVC_AGENT - Zabbix агент
10, SVC_SNMPv1 - SNMPv1 агент
11, SVC_SNMPv2 - SNMPv2 агент
12, SVC_ICMPPING - ICMP пинг
13, SVC_SNMPv3 - SNMPv3 агент
14, SVC_HTTPS - Проверка HTTPS сервиса
15, SVC_TELNET - Проверка доступности Telnet
ip строка IP адрес хоста
dns строка DNS имя хоста
port число (опционален) номер порта сервиса
key_ строка (опционален) ключ элемента данных для проверки обнаружения с типом 9 SVC_AGENT
value строка (опционален) полученное значение от сервиса, может быть пустым для большинства сервисов
status число (опционален) состояние сервиса:

0, DOBJECT_STATUS_UP - Сервис ДОСТУПЕН
1, DOBJECT_STATUS_DOWN - Сервис НЕДОСТУПЕН
сервер→прокси:
response строка информация успешности запроса ('success' или 'failed')

Пример:

прокси→сервер:

{
          "request": "discovery data",
          "host": "Proxy #12", 
          "data":[
               {
                   "clock":1478608764,
                   "drule":2,
                   "dcheck":3,
                   "type":12,
                   "ip":"10.3.0.10",
                   "dns":"vdebian",
                   "status":1
               },
               {
                   "clock":1478608764,
                   "drule":2,
                   "dcheck":null,
                   "type":-1,
                   "ip":"10.3.0.10",
                   "dns":"vdebian",
                   "status":1
               }
           ],
           "clock":1478608768
       }

сервер→прокси:

{
         "response": "success"
       }
Запрос данных авторегистрации

Запрос auto registration отправляется прокси для предоставления данных авторегистрации агентов с прокси. Этот запрос отправляется каждые DataSenderFrequency (параметр конфигурации прокси) секунд.

имя тип значения описание
прокси→сервер:
request строка 'auto registration'
host строка имя прокси
data массив массив объектов данных авторегистрации
clock число штамп времени данных авторегистрации
host строка имя хоста
ip строка (опционален) IP адрес хоста
dns строка (опционален) разрешенное DNS имя с IP адреса
port строка (опционален) порт хоста
host_metadata строка (опционален) метаданные хоста отправленные агентом (на основе HostMetadata или HostMetadataItem параметров конфигурации агента)
сервер→прокси:
response строка информация успешности запроса ('success' или 'failed')

прокси→сервер:

{
          "request": "auto registration",
          "host": "Proxy #12", 
          "data": [
               {
                   "clock": 1478608371,
                   "host": "Logger1",
                   "ip": "10.3.0.1",
                   "dns": "localhost",
                   "port": "10050"
               },
               {
                   "clock": 1478608381,
                   "host": "Logger2",
                   "ip": "10.3.0.2",
                   "dns": "localhost",
                   "port": "10050"
               }
           ],
           "clock": 1478608390
       }

сервер→прокси:

{
         "response": "success"
       }