宜信智能监控平台建设实践|分享实录 (4)

服务间上下文的传递:通过客户端劫持(client hook)对原协议(如HTTP,RPC,MQ)进行适配,并在协议头注入调用链上下文的元数据。传输到下一个服务接口的时候,会由下一个服务解析协议头里的调用链上下文元数据,重新构建调用链上下文,然后再继续往下传递。

3.4.3 调用链:关键技术

宜信智能监控平台建设实践|分享实录

调用链的实现主要使用了4个关键技术。

服务内上下文的传递。主要基于原threadlocal实现了支持父子线程之间值传递的threadlocal。

服务间上下文的传递。通过客户端劫持(client hook),对原协议进行适配,并在协议内注入调用链上下文元数据。

报文体内容提取。重调用链提取请求/响应数据报文体内容时,为把对应用的影响降到最低,使用了servlet wrapper机制在用户读取报文体时进行数据转存(利用string池的属性最小占用内存)。

调用链数据的收集和处理。通过agent对调用链数据进行抓取,HM端进行数据解析入库并提供查询接口,使用极简数据格式最小化占用带宽。

3.4.4 调用链展示:可视化,可关联日志,快速定位问题

宜信智能监控平台建设实践|分享实录

这是调用链的实际展示界面。在调用链列表上,

可以一键获取最近1分钟、最近12小时前100及最近1小时最慢的调用链。

可以根据应用服务的特征,按照时间区间或业务关键词自定义搜索相关的调用链。

在调用链的任何环节,都可以查看整个端到端的完整的调用链。

通过端到端完整的调用链的展示,可以快速发现调用缓慢的瓶颈或出错的节点。

可从调用链的任意节点跳转到日志界面,查看该调用链环节对应的日志。

可以从日志界面跳转到该日志对应的调用链,查看该日志位于完整调用链路的哪一环,从而帮助我们快速排查和定位问题。

3.4.5 调用链展示:查看请求/响应报文

开启了重调用链的情况下,我们可以查看请求/响应报文的详细数据。

宜信智能监控平台建设实践|分享实录

上图中可以看到,开启了重调用链的情况下,我们可以获取到请求头信息、请求内容、响应头信息、响应内容等详细数据。

3.5 日志监控/管理 3.5.1 日志捕获架构

宜信智能监控平台建设实践|分享实录

上图所示是UAV日志功能的架构图。UAV日志功能采用了日志管理系统流行的EKK架构,包括日志的采集、上送Kafka、ES存储/查询、RAID历史备份/下载以及基于异常/关键字和时间的统计和告警功能。

应用服务器上的Agent采集、读取日志,并把读取到的数据发送到Kafka集群上。

对于需热查询的日志,由logging-store程序从Kafka读取日志并保存到ElasticSearch集群中;

对于需冷备份的日志,由logging-raid程序从Kafka读取日志,先存到本地磁盘,每天凌晨会将本地日志按天压缩,备份到RAID集群中。

日志的统计和告警功能:由logging-statistics程序从Kafka读取异常、关键字、Nginx日志,并以分钟为单位统计数量,保存到Redis中,供后续统计展示和告警。

具体日志展示界面在介绍调用链关联到日志部分已出现过了,这里就不赘述了。

3.6 性能告警 3.6.1 性能告警:多指标联合表达式,流式/同比/环比,双收敛,反馈动作

宜信智能监控平台建设实践|分享实录

UAV获取到全维度的服务端指标集、客户端指标集、日志指标集和自定义指标之后,可以设置多指标联合告警条件,这些条件包括流式/同比/环比的条件(“同比”比如今天10点和昨天10点的对比;“环比”比如最近5分钟和上一个5分钟的对比),可以混合使用构成联合表达式。

为避免告警轰炸,UAV提供了2种告警收敛策略:时间冷却收敛和梯度收敛。梯度收敛策略上,我们配置了“1”“5”“10”,即第1次、第5次、第10次满足告警条件时才会发送告警提醒,其他时间则进行压制处理,不发送告警提醒。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzydz.html