一种基于埋点技术的智能监控系统设计与实现

2021-09-10 19:13王会蔡颖唐志一
江苏广播电视报·新教育 2021年2期
关键词:微服务机器学习

王会 蔡颖 唐志一

摘要:随着信息技术的快速发展,网络信息系统需要为越来越多的用户提供服务,为提高整体性能以及快速迭代升级,当前流行的微服务系统架构通常将一个大的系统划分为多个业务模块,业务模块分别部署在不同机器上,各个业务模块之间通过接口形式进行交互。伴随着业务的扩展,对外提供服务的业务模块越来越多,运维和监控这些业务模块,追踪数据流向,变得越来越困难。如何对这些业务模块的核心指标数据以及数据的生产流转实现精准有效的监控,是研究智能监控系统的一个重要方面,本文介绍了一种基于埋点技术实现的智能监控系统,从各业务模块中采集数据,经分析、汇集、检索、反馈学习后,实现智能预警及数据追踪溯源。

关键词:埋点;微服务;机器学习;智能预警

1引言

随着网络信息化水平的推进,业务扩展带来的业务复杂度的急剧增加,现有网络信息系统的部署方式和监控方式都遇到了巨大的挑战,如何在业务系统出现故障时及时有效地发出预警,以及对数据进行精准分析,找到数据资源流向以及对历史数据进行追踪溯源尤为困难。传统的监控系统通过打印日志形式来记录运行数据,但存在日志数据记录不全、监控项扩展困难、日志存储效率低下、日志分析不足、异常误报等问题。对于大规模、交互错综复杂、深度耦合的网络信息系统,上述问题尤其严重。

此外,传统的监控系统主要通过配置项进行监控,系统部署运行时,管理员配置告警阈值,系统运行触发阈值后将告警信息通知到运维人员,然后进行系统排查解除告警的方式进行监控。其中,配置阈值的监控方式,需要为业务核心指标设置一个合理的阈值,阈值的选取有很大的主观因素,通常情况下是靠经验得来,另外,根据对业务系统的容错程度,也会动态调整阈值,无法做到精细化配置;随着业务的扩展,要监控的指标项越来越多,需要设置的阈值也越来越多,给管理阈值带来了巨大挑战,阈值设置不合理在实际的生产环境中导致越来越多的告警误报。

本文介绍了一种基于埋点技术的日志分析服务架构,结合机器学习,从大型网络信息系统业务模块中采集日志数据,实现日志数据的全方位大规模采集,依托机器学习,从日志数据中不断反馈学习各类数据特征与规律,将学习成果用于分析最新采集到的数据中,检测出异常数据,从而达到智能预警的效果。通过日志数据,实时计算业务模块调用关系,分析数据流向,及时将达到告警状态的业务信息暴露出来,达到异常实时告警。

2系统架构设计

2.1需求

系统旨在对大型分布式系统中各业务模块健康状态以及数据流转进行监控,统计业务模块操作记录及访问情况,记录业务数据流向及当前状态,并对数据流向与数据状态进行学习,提供系统异常告警能力;对业务核心接口访问频次进行监控;并支持对业务模块接口服务状态进行告警。

2.2总体设计

系统体系架构共分为五层,分别是数据埋点层、数据采集层、数据分析转换层、反馈学习层、数据应用层,分层结构如图0 1所示。

(1)数据埋点层

采用约定的日志架构及统一的日志打印规范,采集汇集设备运行、用户操作、服务运行、业务应用等业务数据以及SQL执行、调用耗时、异常堆栈等运营数据,旨在收集全方位、多角度的网络信息系统全生命周期的日志数据。

(2)数据采集层

系统运营中因埋点产生的日志信息,采集后通过分布式消息中间件,将采集到的埋点日志数据进行集中存储。

对采集到的日志数据按数据类型分类,并建立索引,依托分布式流计算能力,实现实时检索和快速统计分析日志数据的能力,提升日志数据价值。

(3)数据分析转换层

基于日志分析转换服务,按照配置设定的规则,监控并过滤日志,对过滤后的日志数据进行汇总,形成实时日志分类。然后构建统一的日志分析服务,实现对日志数据的统一存储及检索,日志分析服务支持实时全文索引,支持日志的统计展现。基于此可实现调用链分析、最热数据服务分析、耗时数据服务分析等。

(4)反馈学习层

基于机器学习算法,利用集中存储的全方位日志数据,不断进行反馈学习,并将学习成果及时更新存储到算法库和规则库中,以便更好的依据历史数据,预测业务未来变化趋势,同时将变化趋势存储起来,达到数据越用越智能,由此减少告警的误报率。

(5)数据应用层

基于采集到的全方位多层次的日志数据,结合机器学习规则库和算法库成果,实现对日志数据的挖掘应用,从而提升日志数据的应用价值,依托分布式流计算能力,实现实时告警、智能告警,同时从日志数据中分析数据流向,进行数据追踪溯源。

3系统主要模块实现

基于上述设计方案,本系统采用前后端分离的模式进行开发。后端在IntelliJ IDEA集成开发工具进行编码开发。使用Maven构建工程和管理依赖,Java开发语言,广泛使用Restful风格的接口格式,使用Spring开源容器进行平台核心业务处理。前端使用VS CODE集成开发工具进行编码开发,使用前端框架Vue进行前端界面开发。

系统部署在虚拟机上,使用Jetty 作为 Web 服务器中间件,服务兼容Chrome(谷歌)、Firefox(火狐)等主流浏览器。

(1)数据埋点模块

采用约定的日志架构及统一的日志打印规范,采集汇集设备运行、用户操作、服务运行、业务应用等业务数据以及SQL执行、调用耗时、异常堆棧等运营数据,旨在收集全方位、多角度的网络信息系统全生命周期的日志数据。

埋点的三种方式:

1.SDK埋点。SDK埋点(也称为前端埋点)方式,通常指在APP或Web界面中植入埋点代码。通过SDK埋点,对用户在使用过程中的行为事件数据进行采集,能够采集到用户大部分的行为数据,比如设备的基本信息,用户执行的基本操作等。

应用场景:一般在产品运营初级阶段,需要快速掌握用户使用情况,并迭代升级产品以提升用户体验。

2.代码埋点。代码埋点主要在程序中写代码实现,通过触发某个动作后程序自动发送数据,业务按需将请求信息、返回信息、异常信息及调用信息组织后埋点,通过此埋点可以分析出数据流转及调用链信息。

应用场景:产品功能错综复杂,业务推进需要深度挖掘与多位分析。此外,对数据保密性要求高且无法通过SDK埋点方式获取等场景,也需要代码埋点进行补充。

3.可视化埋点

可视化埋点把核心代码和配置、资源分开,通过部署在产品上的基础代码对产品的所有交互元素进行解析,并在可視化页面进行设定,界面启动时服务端更新配置和资源,用户产生操作后,根据配置上报相关内容。应用场景:对数据访问量、点击量等统计信息敏感的交互场景。选择哪种埋点方式往往是根据产品形态、发展阶段以及预期效果而定。可以前期采用SDK埋点和代码埋点相结合,后期采用可视化埋点方式进行推进,也可以按需灵活组合。三种埋点方式比对如下表:

基于系统复杂度及应用场景,本文介绍的智能监控系统采用代码埋点的方式进行实现。

代码埋点日志格式统一使用轻量级的JSON格式,数据结构如下:

(2)数据采集模块

系统运营中因埋点产生的日志信息,采集后通过分布式消息中间件,将采集到的埋点日志数据进行集中存储。

使用Flume统一对埋点数据进行采集上报。利用Flume高可用、高可靠特点对分布式的海量日志进行采集聚合和传输。

使用Kafka接收Flume收集的日志,利用Kafka高吞吐量的特点,保证数据不丢失,同时满足日志离线分析及实时日志处理与聚合。采集过程分如下步骤:

1.采集日志。使用Flume读取埋点产生的数据。支持按行增量读取及按时间戳增量读取的方式,保证服务重启或中断恢复后,数据读取不漏读不重复读。

2.传输数据。使用Kafka接收Flume收集的日志,基于Kafka特点,当收集数据的速度超过将写入数据的速度时,也就是当收集信息遇到瓶颈,甚至超过了系统写入数据的能力时,适当调系统参数,保证能够在两者之间提供平稳的过渡,当写入能力大于读取能力时,缓冲的数据要及时写入存储器。

3.写入存储器。将Kakfa埋点数据存储到集中存储器中,例如HDFS,HBase。

(3)数据分析转换模块

基于日志分析转换服务,按照配置设定的规则,监控并过滤日志,对过滤后的日志数据进行汇总,形成实时日志分类。然后构建统一的日志分析服务,实现对日志数据的统一存储及检索,日志分析服务支持实时全文索引,支持日志的统计展现。基于此可实现调用链分析、最热业务服务分析、耗时业务服务分析等。

1.调用链分析。对埋点日志进行实时及聚合分析,按调用链唯一标识符进行分组后聚合,分析各模块之间数据流向、调用次数、调用成功标识、调用耗时等数据,形成完整模块调用关系及调用情况统计数据。

2.最热业务服务分析。对埋点日志进行实时分析,按操作名称分组后聚合,分析一个统计周期内各模块被调用的次数,取最大的前N条记录。

3.耗时业务服务分析。对埋点日志进行实时分析,按操作名称分组后聚合,分析一个统计周期内各业务服务被调用的平均耗时,取最大的前N条记录,生成耗时服务清单。

(4)反馈学习模块

基于机器学习算法,利用集中存储的全方位日志数据,不断进行反馈学习,并将学习成果及时更新存储到算法库和规则库中,以便更好的依据历史数据,预测业务未来变化趋势,同时将变化趋势存储起来,达到数据越用越智能,由此减少告警的误报率。该模块实际运行时,需要至少一个运行周期(例如一天或一周)后,才能进行反馈学习,具体步骤如下:

1.获取历史数据。反馈学习模块从收集到的日志数据中,对历史指标数据进行离线分析,经分析后作为输入参数加以学习。

2.智能学习。反馈学习模块根据历史数据,对未来一个运行周期内(例如一天或一周)的指标数据情况(取分布值或期望值)进行预测,并通过机器学习算法对检测算法模型所需的参数进行更新。

3.更新数据。反馈学习模块将经学习得到的对未来的预测结果,存储到未来预测数据库中,并更新检测算法模型参数,将数据存储到模型参数数据库中,以此实现告警的智能配置,达到智能监控的目的。

(5)数据运用模块

基于采集到的全方位多层次的日志数据,结合机器学习规则库和算法库成果,实现对日志数据的挖掘应用,从而提升日志数据的应用价值,依托分布式流计算能力,实现实时告警、智能告警,同时从日志数据中分析数据流向,进行数据追踪溯源。

1.负载告警。对埋点日志进行实时分析,在一个统计周期内,按操作名称分组后进行聚合统计,分析各业务模块被调用的次数,当调用次数超过配置的阈值时给出告警信息。

2.耗时告警。对埋点日志进行实时分析,在一个统计周期内,按操作名称分组后进行聚合统计,分析各业务模块被调用的平均耗时,当调用耗时超过配置的阈值时给出告警信息。

3.失败率告警。对埋点日志进行实时分析,在一个统计周期内,按操作名称分组后进行聚合统计,分析各业务模块被调用的失败次数与总次数的比例,当调用失败率超过配置的阈值时给出告警信息。

4结论

不同于传统的通过打印日志形式来记录运行数据的监控系统,本文介绍了一种基于埋点技术实现的智能监控系统,解决传统监控系统存在的日志数据记录不全、监控项扩展困难、日志存储效率低下、日志分析不足、异常误报等问题。本文深入探讨了基于埋点的定制化日志服务架构,实现日志数据的全方位采集、高效率存储及快速检索。使用Flume统一对日志数据进行采集上报。利用Flume高可用、高可靠特点对分布式的海量日志进行采集聚合和传输。使用Kafka接收Flume收集的日志,利用Kafka高吞吐量的特点,保证数据不丢失,同时满足日志离线分析及实时日志处理与聚合。依托机器学习,从日志数据中不断反馈学习各类数据特征与规律,将学习成果用于分析最新采集到的数据中,检测出异常数据,从而达到智能预警的效果。此外,通过对日志数据进行实时计算、离线分析等,可进一步实现对日志数据的挖掘应用,从而提升日志数据的应用价值。

参考文献:

[1]宋智宇.商业银行智能监控系统的设计与实现[M].电子工业出版社,2010.

[2]陆晓燕,魏晖.网络运维智能化,开启运维新价值[J].通信世界,2015(21):43.

[3]张晶,黄小锋.一种基于微服务的应用框架[J].计算机系统应用,2016,25(9):265-270.

[4]蒋勇.基于微服务架构的基础设施设计[J].软件,2016,37(5):93-97.

[5]金刚,郑志荣.面向云计算环境的安全服务平台[J].指挥信息系统与技术,2016,7(6):81-86

[6]丁乙,李荣宽,汪敏,等.面向军用微服务的服务网格架构研究与设计[J].指挥信息系统与技术,2020,11(1):18-23.

[7]陈奡,谢俊杰,赵梅,等.基于机器学习的军事装备知识分类方法[J].指挥信息系统与技术,2020,11(4):34-39.

作者简介:王会(1988.10-),男,汉族,安徽宿州人,中国电子科技集团公司第二十八研究所,软件开发工程师,研究方向:基于微服务架构的敏捷开发。

(中国电子科技集团第二十八研究所 江苏南京 210001)

猜你喜欢
微服务机器学习
基于供给侧改革理论的图书馆社交网络微服务研究
微信公众平台在医院图书馆的应用现状调查
基于词典与机器学习的中文微博情感分析
基于微信企业号的校园移动服务
基于网络搜索数据的平遥旅游客流量预测分析
从单一模式系统架构往微服务架构迁移转化技术研究
前缀字母为特征在维吾尔语文本情感分类中的研究
基于支持向量机的金融数据分析研究
机器学习理论在高中自主学习中的应用
基于微信公众平台的高校图书馆微服务现状及对策