温小斌
摘 要: 传统监控软件不满足物联网系统的运维需求,为了弥补其不足之处,设计并实现了一个面向物联网的自动化监控系统。除了常规的服务器性能指标以外,还能监控设备连接数、MQTT服务响应时间、CoAP服务响应时间等物联网系统特有的指标。监控系统做到了对物联网系统的零入侵,并且具备良好的扩展性。
关键词: 物联网; 自动化监控; MQTT; CoAP
中图分类号:TP319 文献标志码:A 文章编号:1006-8228(2019)06-34-04
Abstract: Traditional monitoring software does not meet the operation and maintenance requirements of IoT systems. To overcome the shortcomings, an automated monitoring system for IoT is designed and implemented. In addition to the conventional server performance metrics, it can also monitor metrics specific for IoT systems, such as number of device connection, MQTT service response time, and CoAP service response time. The monitoring system achieves zero intrusion into the IoT system and has good scalability.
Key words: IoT; automated monitoring; MQTT; CoAP
0 引言
監控是IT系统自动化运维的重要环节,可以第一时间把系统故障通知到运维工程师,所记录的历史日志,也有助于工程师定位到问题点。
与传统IT系统的监控相比,物联网系统的自动化监控,有许多不一样的技术指标。除了服务器负载、CPU使用率、内存使用率、HTTP服务可用性等传统的监控指标以外,物联网系统还需要监控设备连接数、MQTT[1]服务响应时间、CoAP[2]服务响应时间、TCP/UDP Socket响应时间等其他指标。另外,接入到物联网系统的设备数量,增长速度很快,提前做好系统扩容规划,是物联网系统自动化监控的重要目标。传统的IT运维监控软件,例如Nagios[3]和Zabbix[4],并不满足物联网系统的上述监控需求。
鉴于上述背景,设计并实现了一个面向物联网的监控系统,它弥补了传统监控软件的不足之处,做到了对物联网系统的全方位监控,具有高度自动化、可配置性高、扩展性强、对物联网系统零入侵等特点。
1 系统设计
1.1 设计目标
⑴ 高度自动化。各种指标的监控、报警、历史数据分析,全部采用程序实现,无需人工参与。
⑵ 可配置性高。报警阈值、报警方式、报警接收者等参数,均可配置,随时可以调整。
⑶ 扩展性强。后续可以方便的增加新的监控指标,以及扩展新的功能。
⑷ 对物联网系统零入侵。监控系统作为一个独立的系统存在,不会对物联网系统产生任何功能和性能方面的影响,无需对物联网系统做任何修改。
1.2 系统架构
整个监控系统使用分布式架构,主要由监控模块和监控中心两大部分组成,如图1所示。
其中监控模块分三类:资源监控模块、进程监控模块、响应时间监控模块,它们负责采集各项监控指标数据。监控中心则负责这些数据的接收、存储、计算和展示,由HTTP API网关、配置模块、报警模块、报表生成模块、Dashboard展示模块等几部分组成。
2 监控模块
2.1 资源监控
该模块用于监控服务器各种资源的使用情况。实现方式是:编写Python脚本,在物联网系统的每台宿主服务器上运行,每分钟执行一次,解析Linux下相应命令的结果,并把结果通过HTTP API接口发往监控中心,如果监控中心发现某资源的使用超过设定的阈值,则自动进行报警。
物联网系统中,需要监控的服务器资源以及相对应的Linux命令,如表1所示。
2.2 进程监控
进程监控模块用于监控服务器上各个进程是否处于运行状态,以便检测程序崩溃的现象。实现方式:编写Python脚本,在物联网系统的每台宿主服务器上运行,每分钟执行一次,解析Linux下ps命令的结果,并将结果通过HTTP API接口发往监控中心,如果监控中心发现进程不在运行状态,则自动执行报警。
物联网系统中,需要监控的进程主要分为如下几类。
⑴ 数据库进程:包括关系型数据库MySQL,时间序列数据库InfluxDB,缓存数据库Redis等。
⑵ 网络Server进程:包括MQTT Server、CoAP Server、WebSocket Server、TCP/UDP Socket Server、HTTP Server(Nginx和Tomcat)等。
⑶ 中间件进程:包括ZooKeeper、Kafka等。
⑷ 业务程序进程:如MQTT消息处理程序、Kafka消息处理程序等。
2.3 响应时间监控
该模块用于监控各种网络服务的响应时间。实现方式是:编写Java程序,模拟设备往远程物联网服务器发送数据包,并接收回复的数据包,计算出服务器的响应时间,通过HTTP API接口把结果发往监控中心。为了避免偶然性的网络传输延迟,每分钟模拟发送一次设备数据包,监控中心如果连续两次都判定超出阈值,则自动进行报警。
物联网系统中,需要监控的网络服务响应时间,包括:MQTT服务、CoAP服务、WebSocket服务、TCP/UDP Socket服务、HTTP服务等。以最常見的MQTT服务为例,响应时间监控的过程如图2所示,其他网络服务的监控过程是类似的。
值得注意的是,与其他两个监控模块不同,响应时间监控模块,不是运行在物联网系统的宿主服务器上,而是需要模拟设备远程访问物联网系统。
3 监控中心
3.1 功能模块
监控中心由如下几个功能模块组成。
⑴ HTTP API网关:用于接收各个监控模块提交的监控数据。
⑵ 配置模块:对监控系统的参数进行配置,包括各监控指标的报警阈值、报警方式、报警接收者等。
⑶ 报警模块:一旦监控指标超过设定的阈值,则通过邮件、短信、电话等方式告知运维工程师和系统管理员。
⑷ 报表生成模块:每天晚上零点定时执行任务,生成当天的运维监控报表,报表数据记录到PDF文件中,通过邮件把PDF文件发送给运维工程师和系统管理员,并把PDF文件保存到MongoDB的GridFS文件系统,以便日后随时查看历史报表。
⑸ Dashboard展示模块:使用表格、折线图、柱状图、火焰图等方式,直观展示物联网系统的实时监控数据、历史监控数据。结合历史数据趋势图,监控中心可以给出是否需要进行扩容的建议。
3.2 分层模式
监控中心使用分层模式进行设计,从上到下依次为展示层、接口层、业务服务层、数据访问层、数据存储层,如图3所示。层次结构清晰,代码易于维护。展示层、接口层和业务服务层均可独立部署,方便后续扩展和二次开发。
监控中心使用Java编程语言开发,API层基于Spring Boot框架实现,业务服务层基于Dubbo框架实现。为了获得更好的系统性能,监控中心同时使用三种数据库,分别存储不同的数据:MySQL存储关系型业务数据,数据访问层基于MyBatis框架实现;MongoDB存储日志数据、历史数据和文档数据,数据访问层基于Spring Data MongoDB实现;Redis用于存放Cache数据,数据访问层基于Spring Data Redis实现。
4 结束语
本文设计了一个专门针对物联网的监控系统,实现了物联网系统的全方位自动化监控。得益于其对物联网系统零入侵的特点,该监控系统已经应用到多个正式商用的物联网项目,取得了不错的效果。同时,该系统具备良好的可扩展性,下一步,计划研究数据库性能监控、物联网系统日志监控等新的功能点,并将这些新功能添加到监控系统中。
参考文献(References):
[1] 姚丹,谢雪松,杨建军.基于MQTT协议的物联网通信系统的研究与实现[J].信息通信,2016.3:33-35
[2] 徐凯.IoT开发实战:CoAP卷[M].机械工业出版社,2017.
[3] 魏根芽.基于Linux的Nagios服务器监控系统的研究与实现[J].计算机与现代化,2010.6:170-172
[4] 赵哲,谭海波,赵赫,王卫东,李晓风.基于Zabbix的网络监控系统[J].计算机技术与发展,2018.1:144-149