专家专栏 | 使用agent2自定义插件采集通过MQTT协议发送的数据

网友投稿 698 2022-05-29

MQTT协议简介

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的物联网通信协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。MQTT被广泛用于汽车,制造业,电信,石油和天然气等行业以及通过卫星链路与代理通信的传感器、与医疗服务提供者的拨号连接,以及一系列家庭自动化和小型设备场景。它也是移动应用的理想选择,因为它体积小,功耗低,数据包最小,并且可以有效地将信息分配给一个或多个接收器。

MQTT有两个组件:

MQTT代理:MQTT代理是通信的中心点。代理负责在客户端之间分派所有消息。

MQTT协议简介

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的物联网通信协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。MQTT被广泛用于汽车,制造业,电信,石油和天然气等行业以及通过卫星链路与代理通信的传感器、与医疗服务提供者的拨号连接,以及一系列家庭自动化和小型设备场景。它也是移动应用的理想选择,因为它体积小,功耗低,数据包最小,并且可以有效地将信息分配给一个或多个接收器。

MQTT有两个组件:

MQTT代理:MQTT代理是通信的中心点。代理负责在客户端之间分派所有消息。

MQTT客户端:MQTT客户端是连接到broker的任何设备。发送消息的客户端是发布者。接收消息的客户端是订阅者。要接收消息,客户端必须订阅该消息的主题。

部署mqtt协议的服务

实现了mqtt协议的服务器有很多种,这里我使用了mosquitto服务在centos上部署

mkdir data && cd data wget http://mosquitto.org/files/source/mosquitto-1.6.8.tar.gz tar -zxvf mosquitto-1.6.8.tar.gz cd mosquitto-1.6.8 make && make install ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1 ldconfig

我们可以编辑配置文件mosquitto.conf,修改监听地址,并设置认证用户密码,并在启动的时候使用-c 参数指定配置文件

部署完成后启动borker服务,我这里使用默认配置

mosquitto -v

订阅sensor主题

mosquitto_sub -v -t sensor

向sensor主题发布内容

mosquitto_pub -t sensor -m 12

发布完之后便会在订阅者客户段接收到

使用zabbxi agent2收集发布者发布的消息

zabbix agent2在这里扮演的是一个订阅者的角色,zabbix agent2使用GO语言开发,这样我们可以通过go语言编写一些自定义插件来实现我们的监控需求,插件相对于自定义脚本优点之一是插件是长连接的,而自定义脚本每次处理用户指标时都会fork一个新进程,关于agent与agent2的区别可以查看官方文档

点击查看官方文档

本文通过zabbix自定义插件实现mqtt协议的消息采集,关于agent2自定义插件介绍可查看官方文档

点击查看官方文档

或者查看Zabbix认证专家米宏翻译的文章(特别好)

官方博文 | 为Zabbix Agent 2 开发插件

01-下载zabbix agent2源码并将自定义插件编译

mqtt插件由维塔利·朱拉夫列夫(Vitaly Zhuravlev)编写,地址https://github.com/v-zhuravlev/zbx_plugin_mqtt,就是下面这位大神,其实刮了胡子还是挺帅的,当然仅次于我。

yum install golang git clone https://git.zabbix.com/scm/zbx/zabbix.git --depth 1 zabbix-agent2 cd zabbix-agent2 git submodule add https://github.com/v-zhuravlev/zbx_plugin_mqtt.git src/go/plugins/mqtt

02-导入mqtt插件

vi src/go/plugins/plugins.go

package plugins import ( _ "zabbix.com/plugins/log" _ "zabbix.com/plugins/systemrun" _ "zabbix.com/plugins/zabbix/async" _ "zabbix.com/plugins/zabbix/stats" _ "zabbix.com/plugins/zabbix/sync" _ "zabbix.com/plugins/mqtt" )

03-编译安装zabbix agent2

./bootstrap.sh pushd . cd src/go/ go mod vendor popd ./configure --enable-agent2 --enable-static make install

04-编辑配置文件

这里我调整了日志级别,方便前台调试

可选参数

专家专栏 | 使用agent2自定义插件采集通过MQTT协议发送的数据

Plugins.MQTTSubscribe.Username =

Plugins.MQTTSubscribe.Password =

Plugins.MQTTSubscribe.ClientID = zabbix-agent2-mqtt-client  //如果未设置将自动生成ClientID

Plugins.MQTTSubscribe.Timeout = 5   //定义此插件的连接超时时间,如果不定义将使用zabbix agent2的超时时间

05- 启动zabbix_agent2

cd /root/zabbix_agent/src/go/bin ./zabbix_agent2 -c ../conf/zabbix_agent2.conf

MQTT插件实现了一个Watcher接口,Watcher接口使用的push模型,当有新数据产生,会主动push给服务器

08- Zabbix创建监控项

键值示例如下

mqtt.subscribe[,]

注意监控项类型必须是主动式

我们可以通过mqtt client来发送一些数据

可以在zabbix agent2前台看到数据实时推送给了zabbix server,当没有新数据产生的时候,agent2也会每隔两分钟(默认)连接server的10051端口来请求有关监控项的信息

MQTT TCP/IP 专家

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:华为云Stack ManageOne云服务接入Console开发FAQ
下一篇:Nginx指南和配置详解
相关文章