1 服务器-proxy 数据交换协议

概述

服务器端 - proxy 数据交换基于JSON格式。

请求和响应消息必须以header and data length开头。

被动 proxy

Proxy 配置请求

proxy config请求由服务器发送,用于提供proxy配置数据。该请求每ProxyConfigFrequency秒(服务器配置参数)发送一次。

名称 值类型 描述
server→proxy:
request string 'proxy配置'
<table> object 一个或多个包含<table>数据的objects。
字段 array 字段名的array。
- string 字段名称。
数据 array 行的array。
- array 列的array。
- string,number 列值,其类型取决于数据库模式中的列类型。
proxy→server:
response string 请求成功信息('success'或'失败')。
version string Proxy的version版本(<major>.<minor>.<build>)。

示例:

服务器→proxy:

{
           "request": "proxy config",
           "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,
                       "Linux",
                       3,
                       -1,
                       2,
                       "",
                       "",
                       "Linux",
                       1,
                       1,
                       "",
                       "",
                       "",
                       ""
                   ],
                   [
                       10050,
                       "Zabbix Agent",
                       3,
                       -1,
                       2,
                       "",
                       "",
                       "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
                   ]
               ]
           },
           ...
       }

proxy→服务器:

{
         "response": "success",
         "version": "6.0.0"
       }
Proxy 请求

proxy data请求用于从proxy获取主机接口可用性、历史数据、发现数据和自动注册数据。该请求每ProxyDataFrequency秒(服务器配置参数)发送一次。

名称 值类型 描述
server→proxy:
request string 'proxy数据'
proxy→server:
session string 数据会话令牌。
interface availability array (可选) 接口可用性数据objects的array。
interfaceid number 接口标识符。
available number 接口可用性:

0, INTERFACE_AVAILABLE_UNKNOWN - 未知
1, INTERFACE_AVAILABLE_TRUE - 可用
2, INTERFACE_AVAILABLE_FALSE - 不可用
error string 接口错误消息或空string。
history data array (可选) 历史数据objects的array。
itemid number 监控项标识符。
clock number 监控项值时间戳(秒)。
ns number 监控项值时间戳(纳秒)。
value string (可选) 监控项值。
id number 值标识符(递增计数器,在单个数据会话内唯一)。
timestamp number (可选) 日志类型监控项的时间戳。
source string (可选) 事件日志监控项源值。
severity number (可选) 事件日志监控项严重性值。
eventid number (可选) 事件日志监控项事件ID值。
state string (可选) 监控项状态:
0, 监控项_STATE_NORMAL
1, 监控项_STATE_NOTSUPPORTED
lastlogsize number (可选) 日志类型监控项的最后日志大小。
mtime number (可选) 日志类型监控项的修改时间。
discovery data array (可选) 发现数据objects的array。
clock number 发现数据时间戳。
druleid number 发现规则标识符。
dcheckid number 发现检查标识符或发现规则数据的null。
type number 发现检查类型:

-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 agent
10, SVC_SNMPv1 - SNMPv1 agent
11, SVC_SNMPv2 - SNMPv2 agent
12, SVC_ICMPPING - ICMP ping
13, SVC_SNMPv3 - SNMPv3 agent
14, SVC_HTTPS - HTTPS服务检查
15, SVC_TELNET - Telnet可用性检查
ip string 主机IP地址。
dns string 主机DNS名称。
port number (可选) 服务端口号。
key_ string (可选) 类型为9 SVC_AGENT的发现检查的监控项键
value string (可选) 从服务接收的值,对于大多数服务可以为空。
status number (可选) 服务状态:

0, DOBJECT_STATUS_UP - 服务UP
1, DOBJECT_STATUS_DOWN - 服务DOWN
auto registration array (可选) 自动注册数据objects的array。
clock number 自动注册数据时间戳。
主机 string 主机名。
ip string (可选) 主机IP地址。
dns string (可选) 从IP地址解析的DNS名称。
port string (可选) 主机端口。
主机_metadata string (可选) agent发送的主机元数据(基于HostMetadata或HostMetadataItem agent配置参数)。
tasks array (可选) 任务的array。
type number 任务类型:

0, ZBX_TM_TASK_PROCESS_REMOTE_COMMAND_RESULT - 远程命令结果
status number 远程命令执行状态:

0, ZBX_TM_REMOTE_COMMAND_COMPLETED - 远程命令成功完成
1, ZBX_TM_REMOTE_COMMAND_FAILED - 远程命令失败
error string (可选) 错误消息。
parent_taskid number 父任务ID。
more number (可选) 1 - 还有更多历史数据需要发送。
clock number (可选) 数据传输时间戳(秒)。
ns number (可选) 数据传输时间戳(纳秒)。
version string Proxy version (<主版本>.<次版本>.<构建版本>)。
server→proxy:
response string 请求成功信息('success'或'失败')。
tasks array (可选) 任务的array。
type number 任务类型:

1, ZBX_TM_TASK_PROCESS_REMOTE_COMMAND - 远程命令
clock number 任务创建时间。
ttl number 任务过期时间(秒)。
commandtype number 远程命令类型:

0, ZBX_SCRIPT_TYPE_CUSTOM_SCRIPT - 使用自定义脚本
1, ZBX_SCRIPT_TYPE_IPMI - 使用IPMI
2, ZBX_SCRIPT_TYPE_SSH - 使用SSH
3, ZBX_SCRIPT_TYPE_TELNET - 使用Telnet
4, ZBX_SCRIPT_TYPE_GLOBAL_SCRIPT - 使用全局脚本(当前功能上等同于自定义脚本)
command string 要execute的远程命令。
execute_on number Execution target for custom scripts:

0, ZBX_SCRIPT_EXECUTE_ON_AGENT - execute script on agent
1, ZBX_SCRIPT_EXECUTE_ON_SERVER - execute script on server
2, ZBX_SCRIPT_EXECUTE_ON_PROXY - execute script on proxy
port number (optional) Port for Telnet and SSH commands.
authtype number (optional) Authentication type for SSH commands.
username string (optional) User name for Telnet and SSH commands.
password string (optional) Password for Telnet and SSH commands.
publickey string (optional) Public key for SSH commands.
privatekey string (optional) Private key for SSH commands.
parent_taskid number 父任务ID。
hostid number 目标主机 ID。

示例:

服务器→proxy:

{
         "request": "proxy data"
       }

proxy→服务器:

{
           "session": "12345678901234567890123456789012"
           "interface availability": [
               {
                   "interfaceid": 1,
                   "available": 1,
                   "error": ""
           },
               {
                   "interfaceid": 2,
                   "available": 2,
                   "error": "Get value from agent failed: cannot connect to [[127.0.0.1]:10049]: [111] Connection refused"
           },
               {
                   "interfaceid": 3,
                   "available": 1,
                   "error": ""
           },
               {
                   "interfaceid": 4,
                   "available": 1,
                   "error": ""
           }
           ],
           "history data":[
               {
                   "itemid":"12345",
                   "clock":1478609647,
                   "ns":332510044,
                   "value":"52956612",
                   "id": 1
               },
               {
                   "itemid":"12346",
                   "clock":1478609647,
                   "ns":330690279,
                   "state":1,
                   "value":"Cannot find information for this network interface in /proc/net/dev.",
                   "id": 2
               }
           ],
           "discovery 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
               }
           ],
           "auto registration":[
               {
                   "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"
               }
           ],
           "tasks":[
               {
                   "type": 0,
                   "status": 0,
                   "parent_taskid": 10
               },
               {
                   "type": 0,
                   "status": 1,
                   "error": "No permissions to execute task.",
                   "parent_taskid": 20
               }
           ],    
           "version":"5.4.0"
       }

服务器→proxy:

{
         "response": "success",
         "tasks":[
             {
                "type": 1,
                "clock": 1478608371,
                "ttl": 600,
                "commandtype": 2,
                "command": "restart_service1.sh",
                "execute_on": 2,
                "port": 80,
                "authtype": 0,
                "username": "userA",
                "password": "password1",
                "publickey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe",
                "privatekey": "lsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ5QCqGKukO1De7zhd",
                "parent_taskid": 10,
                "hostid": 10070
             },
             {
                "type": 1,
                "clock": 1478608381,
                "ttl": 600,
                "commandtype": 1,
                "command": "restart_service2.sh",
                "execute_on": 0,
                "authtype": 0,
                "username": "",
                "password": "",
                "publickey": "",
                "privatekey": "",
                "parent_taskid": 20,
                "hostid": 10084
             }
         ]
       }

Active 代理

Proxy 心跳请求

proxy heartbeat请求由proxy发送,用于报告proxy正在运行。该请求每HeartbeatFrequency秒(proxy配置参数)发送一次。

名称 值类型 描述
proxy→server:
request string 'proxy心跳信号'
host string Proxy名称.
version string Proxyversion (<主版本>.<次版本>.<构建号>).
server→proxy:
response string 请求成功信息('success'或'失败').

proxy→服务器:

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

服务器→proxy:

{
         "response": "success"
       }
Proxy 配置请求

proxy config请求由proxy发送,用于获取proxy配置数据。该请求每隔ConfigFrequency秒(proxy配置参数)发送一次。

名称 值类型 描述
proxy→server:
request string 'proxy配置'
host string Proxy名称。
version string Proxyversion(<主版本>.<次版本>.<构建号>)。
server→proxy:
request string 'proxy配置'
<table> object 一个或多个包含<table>数据的objects。
字段 array 字段名的array。
- string 字段名。
数据 array 行的array。
- array 列的array。
- string,number 列值,其类型取决于数据库模式中的列类型。
proxy→server:
response string 请求成功信息('success'或'失败')。

示例:

proxy→服务器:

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

服务器→proxy:

{
           "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,
                       "Linux",
                       3,
                       -1,
                       2,
                       "",
                       "",
                       "Linux",
                       1,
                       1,
                       "",
                       "",
                       "",
                       ""
                   ],
                   [
                       10050,
                       "Zabbix Agent",
                       3,
                       -1,
                       2,
                       "",
                       "",
                       "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
                   ]
               ]
           },
           ...
       }

proxy→服务器:

{
         "response": "success"
       }
Proxy 数据请求

proxy data请求由proxy发送,用于提供主机接口可用性、历史数据、发现和自动注册数据。 该请求每DataSenderFrequency秒(proxy配置参数)发送一次。 注意:主动式proxy仍会每秒轮询Zabbix server以获取远程命令任务(发送空的proxy data请求)。

名称 值类型 描述
proxy→server:
request string 'proxy数据'
host string Proxy名称。
session string 数据会话令牌。
interface availability array (可选) 接口可用性数据的arrayobjects。
interfaceid number 接口标识符。
available number 接口可用性:

0, INTERFACE_AVAILABLE_UNKNOWN - 未知
1, INTERFACE_AVAILABLE_TRUE - 可用
2, INTERFACE_AVAILABLE_FALSE - 不可用
error string 接口错误消息或空string。
history data array (可选) 历史数据的arrayobjects。
itemid number 监控项标识符。
clock number 监控项值时间戳(秒)。
ns number 监控项值时间戳(纳秒)。
value string (可选) 监控项值。
id number 值标识符(递增计数器,在单个数据会话内唯一)。
timestamp number (可选) 日志类型监控项的时间戳。
source string (可选) 事件日志监控项的源值。
severity number (可选) 事件日志监控项的严重性值。
eventid number (可选) 事件日志监控项的事件ID值。
state string (可选) 监控项状态:
0, 监控项_STATE_NORMAL
1, 监控项_STATE_NOTSUPPORTED
lastlogsize number (可选) 日志类型监控项的最后日志大小。
mtime number (可选) 日志类型监控项的修改时间。
discovery data array (可选) 发现数据的arrayobjects。
clock number 发现数据时间戳。
druleid number 发现规则标识符。
dcheckid number 发现检查标识符或发现规则数据的null值。
type number 发现检查类型:

-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 agent
10, SVC_SNMPv1 - SNMPv1 agent
11, SVC_SNMPv2 - SNMPv2 agent
12, SVC_ICMPPING - ICMP ping
13, SVC_SNMPv3 - SNMPv3 agent
14, SVC_HTTPS - HTTPS服务检查
15, SVC_TELNET - Telnet可用性检查
ip string 主机IP地址。
dns string 主机DNS名称。
port number (可选) 服务端口号。
key_ string (可选) 类型为9 SVC_AGENT的发现检查的监控项键
value string (可选) 从服务接收的值,大多数服务可能为空。
status number (可选) 服务状态:

0, DOBJECT_STATUS_UP - 服务正常
1, DOBJECT_STATUS_DOWN - 服务异常
autoregistration array (可选) 自动注册数据的arrayobjects。
clock number 自动注册数据时间戳。
主机 string 主机名。
ip string (可选) 主机IP地址。
dns string (可选) 从IP地址解析的DNS名称。
port string (可选) 主机端口。
主机_metadata string (可选) agent发送的主机元数据(基于HostMetadata或HostMetadataItem agent配置参数)。
tasks array (可选) 任务的array。
type number 任务类型:

0, ZBX_TM_TASK_PROCESS_REMOTE_COMMAND_RESULT - 远程命令结果
status number 远程命令执行状态:

0, ZBX_TM_REMOTE_COMMAND_COMPLETED - 远程命令成功完成
1, ZBX_TM_REMOTE_COMMAND_FAILED - 远程命令失败
error string (可选) 错误消息。
parent_taskid number 父任务ID。
more number (可选) 1 - 还有更多历史数据待发送。
clock number (可选) 数据传输时间戳(秒)。
ns number (可选) 数据传输时间戳(纳秒)。
version string Proxyversion(<主版本>.<次版本>.<构建号>)。
server→proxy:
response string 请求成功信息('success'或'失败')。
upload string 历史数据上传控制(历史数据、自动注册、主机可用性、网络发现)。

可能值:
enabled - 正常操作
disabled - 服务器不接受数据(可能由于内部缓存超过限制)
tasks array (可选) 任务的array。
type number 任务类型:

1, ZBX_TM_TASK_PROCESS_REMOTE_COMMAND - 远程命令
clock number 任务创建时间。
ttl number 任务过期时间(秒)。
commandtype number 远程命令类型:

0, ZBX_SCRIPT_TYPE_CUSTOM_SCRIPT - 使用自定义脚本
1, ZBX_SCRIPT_TYPE_IPMI - 使用IPMI
2, ZBX_SCRIPT_TYPE_SSH - 使用SSH
3, ZBX_SCRIPT_TYPE_TELNET - 使用Telnet
4, ZBX_SCRIPT_TYPE_GLOBAL_SCRIPT - 使用全局脚本(当前功能等同于自定义脚本)
command string 要execute的远程命令。
execute_on number Execution target for custom scripts:

0, ZBX_SCRIPT_EXECUTE_ON_AGENT - execute script on agent
1, ZBX_SCRIPT_EXECUTE_ON_SERVER - execute script on server
2, ZBX_SCRIPT_EXECUTE_ON_PROXY - execute script on proxy
port number (optional) Port for Telnet and SSH commands.
authtype number (optional) Authentication type for SSH commands.
username string (optional) User name for Telnet and SSH commands.
password string (optional) Password for Telnet and SSH commands.
publickey string (optional) Public key for SSH commands.
privatekey string (optional) Private key for SSH commands.
parent_taskid number 父任务ID。
hostid number 目标主机ID。

示例:

proxy→服务器:

{
           "request": "proxy data",
           "host": "Proxy #12", 
           "session": "12345678901234567890123456789012",
           "interface availability": [
               {
                   "interfaceid": 1,
                   "available": 1,
                   "error": ""
           },
               {
                   "interfaceid": 2,
                   "available": 2,
                   "error": "Get value from agent failed: cannot connect to [[127.0.0.1]:10049]: [111] Connection refused"
           },
               {
                   "interfaceid": 3,
                   "available": 1,
                   "error": ""
           },
               {
                   "interfaceid": 4,
                   "available": 1,
                   "error": ""
           }
           ],
           "history data":[
               {
                   "itemid":"12345",
                   "clock":1478609647,
                   "ns":332510044,
                   "value":"52956612",
                   "id": 1
               },
               {
                   "itemid":"12346",
                   "clock":1478609647,
                   "ns":330690279,
                   "state":1,
                   "value":"Cannot find information for this network interface in /proc/net/dev.",
                   "id": 2
               }
           ],
           "discovery 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
               }
           ],
           "auto registration":[
               {
                   "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"
               }
           ],
           "tasks":[
               {
                   "type": 2,
                   "clock":1478608371,
                   "ttl": 600,
                   "commandtype": 2,
                   "command": "restart_service1.sh",
                   "execute_on": 2,
                   "port": 80,
                   "authtype": 0,
                   "username": "userA",
                   "password": "password1",
                   "publickey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe",
                   "privatekey": "lsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ5QCqGKukO1De7zhd",
                   "parent_taskid": 10,
                   "hostid": 10070
               },
               {
                   "type": 2,
                   "clock":1478608381,
                   "ttl": 600,
                   "commandtype": 1,
                   "command": "restart_service2.sh",
                   "execute_on": 0,
                   "authtype": 0,
                   "username": "",
                   "password": "",
                   "publickey": "",
                   "privatekey": "",
                   "parent_taskid": 20,
                   "hostid": 10084
               }
           ],
           "tasks":[
               {
                   "type": 0,
                   "status": 0,
                   "parent_taskid": 10
               },
               {
                   "type": 0,
                   "status": 1,
                   "error": "No permissions to execute task.",
                   "parent_taskid": 20
               }
           ], 
           "version":"5.4.0"
       }

服务器→proxy:

{
         "response": "success",
         "upload": "enabled",
         "tasks":[
             {
                "type": 1,
                "clock": 1478608371,
                "ttl": 600,
                "commandtype": 2,
                "command": "restart_service1.sh",
                "execute_on": 2,
                "port": 80,
                "authtype": 0,
                "username": "userA",
                "password": "password1",
                "publickey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe",
                "privatekey": "lsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ5QCqGKukO1De7zhd",
                "parent_taskid": 10,
                "hostid": 10070
             },
             {
                "type": 1,
                "clock": 1478608381,
                "ttl": 600,
                "commandtype": 1,
                "command": "restart_service2.sh",
                "execute_on": 0,
                "authtype": 0,
                "username": "",
                "password": "",
                "publickey": "",
                "privatekey": "",
                "parent_taskid": 20,
                "hostid": 10084
             }
         ]
       }