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

举报
Zabbix中国 发表于 2021/04/28 08:42:21 2021/04/28
【摘要】 MQTT协议简介 MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的物联网通信协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。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-编辑配置文件

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

可选参数

  1. Plugins.MQTTSubscribe.Username = <mqtt用户名> 

  2. Plugins.MQTTSubscribe.Password = <mqtt密码>

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

  4. 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 broker URL>,<MQTT topic>]

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

图片

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

图片

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

图片
图片
图片
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。