深入浅出Zabbix 3.0 -- 第十五章 Zabbix 协议与API

第十五章 Zabbix 协议与API

本章将介绍和开发相关的Zabbix协议和API的内容,通过对Zabbix协议和API的深入了解,你可以利用Zabbix协议编写客户端程序并将其嵌入的产品或系统中,并将数据发送到Zabbix server,这在无法安装Zabbix agent等程序的场景(例如专用的嵌入式系统)中非常有用。你也可以利用Zabbix API开发自己的业务系统,或灵活的与现有系统整合集成。

近日完成《深入浅出 zabbix 4.0》视频教程的录制并正式发布,该教程基于 zabbix 4.2 ,对Zabbix进行全面讲解。欢迎大家围观。课程链接:https://edu.csdn.net/course/detail/24870

15.1 Zabbix 协议

Zabbix协议非常简单,通过Zabbix协议你可以开发自有的客户端,不用依赖任何Zabbix提供的工具就能把数据发送到Zabbix server中,这种方式极大的满足了专用系统的监控需求。

Zabbix 协议组成结构为:

<HEADER><DATA_LENGTH><DATA>

其中各部分含义如下:

  • <HEADER>:数据头部,长度为5个字节,内容为ZBXD\x01。实际上前面4个字节是头部,第五个字节用来指定协议的版本,当前,只有版本 1 是支持的(0x01 HEX)

  • <DATA_LENGTH>:数据长度,长度为8个字节,内容为16进制。例如1将格式化为01/00/00/00/00/00/00/00,一个8字节(或64-bit)16进制的数字。

  • <DATA>:数据内容,使用JSON格式。为了防止Server的内存溢出,限定一次传输的数据不能超过128MB。

  • 协议

Zabbix get协议非常简单和容易实现的,实际上,你只需要把key发送数据到Zabbix server的10050端口,Zabbix agent返回响应数据。在shell脚本中可以轻松的实现。

# telnet 127.0.0.1 10050

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is '^]'.

agent.version

ZBXD3.0.1Connection closed by foreign host.

在上面例子中通过telnet收集agent 版本,你会注意到返回的数据是以ZBXD开始,后面是实际的数据即3.0.1。通过协议直接从安装在server中的agent收集数据并在shell脚本中使用。

使用该协议时不需要登录到server,并且可以监测所有agent中使用UserParameter定义的key。

 

15.1.2 Zabbix sender协议

Zabbix sender发送的数据中可以包含来自不同主机或不同item key的数据,例如:

{

       "request":"sender data",

        "data":[

                {

                       "host":"Host name 1",

                       "key":"item_key",

                       "value":"33"},

                {

                       "host":"Host name 2",

                       "key":"item_key",

                        "value":"55"

                }

        ]

}

Zabbix sender发送的数据中还可以包含时间戳,例如:

{

        "request":"sender data",

        "data": [

                {

                       "host": "Host name 1",

                       "key": "item_key",

                       "value": "33",

                       "clock": 1381482894

                },

                {

                       "host": "Host name 2",

                       "key": "item_key",

                       "value": "55",

                }

        ],

        "clock":1381482905

}

在协议中clock是一个选项,在JSON对象中以及数据部分的结尾可以忽略。当你编写自己的Zabbix sender程序时,通过 clock参数可以指定item已被接收的时间戳。

Zabbix server返回的响应数据格式如下:

{                                                                                                                                                                               

       "response":"success",    

       "info":"Processed 1 Failed 1 Total 2 Seconds spent0.000253"

}

在响应数据中,response的状态可以是success或failure。有些items接收失败后,在info中只有简单的失败数量,没有更详细的失败items的信息,无法提供是哪个item失败以及失败的原因。。

 

15.1.3 Zabbix agent 协议

Zabbix agent有主动式(Active)和被动式(Passive)两种,开发客户端程序时多以主动式协议开发,因此在这里主要介绍Zabbix agent(主动式)协议。主动式agent协议稍微复杂一些,它涉及到多个步骤。当一个主动式agent启动后,首先会连接到server询问需要对哪些items进行监控。发送的查询数据如下:

<HEADER><DATALEN>{

"request":"active checks",

"host":"< Host name >"

}

如果主机发送的数据中有metadata时,发送的查询数据如下:

<HEADER><DATALEN>{

        "host":"Host name",

       "host_metadata": "apache|mysql|postfix",

        "request":"active checks"

}

如果主机没有配置默认的监听IP地址或端口时,发送的查询数据如下:

<HEADER><DATALEN>{

    "host":"Host name",

    "ip":"127.0.0.1",

    "port": 10055,

    "request":"active checks"

}

发送请求的主机允许被监控并且配置有active items时,agent将从server接收响应的数据如下:

<HEADER><DATALEN>{

   "response":"success",

    "data":[{

       "key":"log[\/var\/log\/localmessages,@errors]",

        "delay":1,

       "lastlogsize":12189,

        "mtime":0

    },

    {

       "key":"agent.version",

       "delay":"900"

    }]

"regexp":[

    {

       "name":"errors",

       "expression":"error",

       "expression_type":0,

       "exp_delimiter":",",

       "case_sensitive":1

    }]

}

Zabbix server响应中response必须是success,并在后面列出需要监控的items和delay。当需要监控的items为log和logrt时,server将在响应中包含lastlogsize,如果items为logrt时还需要在响应中包含mtime。如果在server中定义了全局正则表达式,将在regexp当中响应。如果使用了user macro,key将被解析并以最初的key发送key_orig,最初的key是user macro名称。

当agent收到响应数据后,将关闭TCP连接,开始收集items的监控数据。当数据收集完成后,这些收集的items数据将发送到server中,发送的数据如下:

<HEADER><DATALEN>{

    "request":"agentdata",

    "data":[

    {

       "host":"HOSTNAME",

       "key":"log[\/var\/log\/localmessages]",

"value":"Sep 16 1

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大白小白一起学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值