普元数据服务监控解密

12天前

如何有效的管理数据、高效的提供数据服务的其中一个关键就是提供对数据服务的统一监控。

转载本文需注明出处:微信公众号EAWorld,违者必究。

引言:

在传统的信息系统架构模式下,各个组织或各个部门根据各自的业务需求,在不同时期不同技术环境下建设出各自的信息系统。随着信息化建设的不断推进,业务活动呈现高频化、碎片化、场景化的特点。随之而来的是对系统的处理能力、容量、业务持续性、需求响应速度、运维响应速度的更高要求。

如何有效的管理数据、高效的提供数据服务的其中一个关键就是提供对数据服务的统一监控。

目录:

一、数据服务监控
二、数据采集
三、数据格式化
四、数据存储
五、数据展示

一、数据服务监控

为提供统一、标准、安全、高效的数据服务,我们需要做好一点那就是统一数据运行监控,那么统一数据服务运行监控需要做哪些事情呢?



首先获取数据服务的运行数据,需要我们对数据进行采集。有了数据我们就可以去对数据做初步的分析,通过分析对数据进行格式化,格式化后的数据又需要去做持久化保存,方便未来不定期的查询。单纯的数字可能并不能直观的反应数据问题,那就需要借助前端工具对数据做可视化的展示。

数据服务监控通过实时服务分析引擎(SSM)提供日志解析及监控能力,对事前预警、事中告警、事后统计分析等功能提供后台支撑。我们先来看一种可行的部署架构中,SSM的具体部署方式。

二、数据采集

实时服务分析引擎的部署



相信大家对此是非常熟悉的这也是一种很常见的微服务部署架构,Nginx通过负载均衡对业务请求进行分流,网关Gateway再将请求通过Eureka等注册中心转发到后台服务中。服务网关是成熟且健壮的业务系统中不可或缺的重要组件,它是所有服务的总入口,它是监控、认证的切入点。我们可以在网关处添加对数据服务的采集功能。

网关拦截器手动埋点



数据采集:做数据采集的前提一定是对监控需求的仔细揣摩,如果你是粗粒度的应用监控、系统监控,那么数据服务总入口就是数据采集的切入点,如果你是细粒度的应用监控,例如应对时下流行的分布式微服务架构你希望做到对调用链路的详细监控,那么每个微服务的入口就是数据采集的着手处。网络上有很多对于微服务架构的监控组件,例如Skywalking、Cat、Zipkin、Pinpoint等,这里就不一一赘述,我们今天的重点不是去研究每一次服务调用的具体详情,我们只从服务总体的健康状态出发。所以我们只需要极少的代价在数据服务总入口也就是网关进行数据埋点,收集数据详情即可。

异步落日志


    
异步落日志的具体流程如下:

网关监控数据持续产生,放入缓存队列(请求流转的过程中要避免IO操作,尽可能的减少对请求本身的影响)
缓存队列大小达到预先设定的大小,将缓存队列复制到临时缓存(一个临时对象),并清空缓存队列,然后执行写文件操作
当文件大小达到预先设定的大小时,将当前文件重命名,代表文件写操作完成。(重命名的原因是因为实时服务分析引擎会对产生的日志文件进行读,避免对同一个文件同时出现读写操作)

日志落地相关配置



当监控数据进行初步落地以后我们就可以通过实时服务解析引擎对日志进行提取分析,这个过程我愿意称之为数据格式化过程。

日志关键信息



三、数据格式化

提取数据的第一步是对网关落下来的文件日志进行收集然后处理。

日志文件读取流程



日志文件目录下可能会有多种类型的文件,我们需要通过名称正则匹配筛选需要的文件。

数据格式化:从数据服务总入口收集到的原始数据做初步数据分析,从原始数据中提取关键信息(譬如请求报文、响应报文、请求时间等)进行格式化,并选择合适的方式将数据持久化到数据库中。

统计分析任务流程



统计分析任务由多个线程共同完成:

TimeStatics线程任务用来分析时间段内的以不同的消费方和服务提供方为维度的调用统计指标,比如:在两分钟内A系统调用B系统时服务响应的成功次数、异常次数、平均响应时间、最长响应时间等数据指标。
Exception线程任务用来将数据服务异常调用记录同正常调用区分开来,异常响应对于运维监控来说更为重要。
All线程任务会将每一笔的数据服务记录到案
Top线程任务用来统计数据服务调用访问时长TopN的调用详情。

数据分析线程解析



四、数据存储

数据存储:数据落地以后需要对落地的数据进行解析分析,将对应的数据拆分成合理的指标单元进行持久化操作。



针对关系型数据库,以mybatis为底层框架实现数据的持久化操作,同时支持将海量监控数据存储在ES中,充分利用ES聚合检索分类分析的能力。

物理表一览



针对不同的调用请求,我们进行分类统计,以请求方、服务提供方、网关实例节点为维度获取如下关键信息进行汇总

服务超时异常个数
系统异常个数
业务异常个数
非法调用个数(未配置服务调用关系)
非法IP调用个数(请求方IP不在白名单内)
成功调用次数
总调用时长
最长调用时长TopN的统计记录

关于告警

没有告警的监控就像一潭死水,没有灵魂。我们不能将注意力全部Focus到监控系统上,所以及时的自动告警就是监控中必须的事情。我们提供统一接口接入邮件、钉钉,借助常用办公系统实现对数据服务的实时告警。
   
告警维度主要有以下几个:

响应时间告警:针对一段时间内超过指定次数、指定响应时长的告警。
系统状态告警:应用系统状态告警,当应用无法正常运行时告警。
业务异常告警:针对一段时间内的成功响应占比低于指定阈值进行告警。

五、数据展示

数据展示:对指标单元数据整合分析,借助Echarts组件,提供针对不同需求的可视化图





关于作者:阿良,普元开发工程师,参与普元EOS8 Studio、EOS8微服务管理平台开发,负责关于服务监控、日志监控等组件开发;参与太平洋保险供数平台建设,负责服务管理注册监控。


关于EAWorld:微服务,DevOps,数据治理,移动架构原创技术分享。长按二维码关注!

COMMENTS

需要 后方可回复
如果没有账号可以 一个帐号。