调用链与日志的关联式跟踪查询

2,769 阅读7分钟

调用链与日志的关联式跟踪查询

长假过完,相信无缘支付宝中国锦鲤的你一定已经回来工作了。虽然轻轻松松与全球免单大礼包失之交臂,但不要丧气,小编悄悄为你准备了一份秘籍,助你在2018年最后不到三个月的时间里成功逆袭,斩获年终奖的大锦鲤! 本月小编将带大家一起了解UAVStack的调用链技术,讲述调用链技术的源起、实现、应用以及关键技术。好好研习本月的每篇推送,说不定年终奖的锦鲤就是你哦~~~赶快进入正文吧


近年来,Observability一词开始在监控社区流行。笔者将Observability视为一种理念,一种监控的超集,涵盖监控、日志聚合和分布式跟踪,能够更加深入地实时观察系统。本文将就日志聚合、分布式跟踪及二者的关联运用展开说明。

调用链与日志聚合的关联

微服务、云和容器化架构的出现,改变了我们构建系统的方式。应用程序是分布式的,而且瞬息万变;底层基础设施和网络服务愈加健壮。日常系统运维的大部分工作将集中于应用程序层或不同应用程序之间的复杂交互调用。

对于复杂的跨系统调用,一次请求可能需要后台几台或上百台节点的支持。此时,单纯依靠人力已经很难追踪到一次请求的完整调用流程,而最能反映每次请求处理过程的应该是分布式追踪调用链(下文简称“调用链”)。

调用链着眼于一次请求的完整调用流程,当细粒到具体节点时,应用系统自身打印的日志最能说明当前节点的处理逻辑。

下图呈现了调用链和日志聚合的关联方式:

1

调用链的作用是记录并汇总展示一次请求所经过的所有节点和关键操作,如图中绿色箭头,从全局的层面展示一次请求的完整调用流程。

日志聚合的作用是汇总整理所有节点和系统产生的日志,并为用户提供友好有效的查询能力。

传统的处理方式往往需要在调用链和日志聚合之间反复切换,即在调用链上发现问题后,需要切换到日志聚合,根据特定属性查询对应的日志信息,排查日志信息后再次返回调用链,查询与日志信息关联的调用链信息……如此往返多次。

对于这种经典场景,日志与调用链的关联式跟踪查询提供了一种全新的闭环处理模式:

2
由上图可以看出,从调用链入口进入,可以根据调用链关联到与当前调用链相关的日志,根据日志又可以关联到与当前日志相关的调用链;从日志入口进入,可以根据日志关联到与当前日志相关的调用链,根据调用链又可以关联到与当前调用链相关的日志。两种模式可以相互切换。

举个栗子

3
通过日志聚合搜索,用户小明发现A系统的一段日志存在异常。此时,小明可以通过此条日志关联找出对应的调用过程a。通过观察调用链a,小明发现,异常是由调用链a上的节点a[2]超时导致。现在小明可以从调用链关联到与节点a[2]相关的日志内容,从而确定问题(详见下文“效果展示”)。

整体架构设计

4

1.数据抓取:

在应用集群中的机器上部署代理程序(Agent),用于数据收集和上送;将探针内嵌在容器(Tomcat等)中,用于应用画像和应用信息收集。

2.数据传输:

Agent通过MQ将处理过的日志上送到监控服务器。

3.数据处理与存储:

监控服务器对采集的数据进行处理,并将其存入ES,方便用户通过特定特征快速定位。

4.数据展示:

将数据进行可视化展示,并提供方便的可视化自定义查询服务。

具体实现

在介绍调用链和日志聚合的具体实现之前需要先明确几个概念:

1. 中间件劫持技术:

在中间件启动时动态地将自己的代码行为植入中间件的各种行为中的技术。例如,在Tomcat启动时,在Tomcat处理请求的开始位置动态地添加代码劫持,从而在Tomcat执行处理请求逻辑之前实现服务调用画像等功能。更多能力及实现方式请参考JAVA服务治理实践之无侵入的应用服务监控

2. traceId:

通过中间件劫持技术在服务调用的最前端产生能够唯一确定一条调用链的ID。

主要实现逻辑:

  1. 在应用容器启动时,使用中间件劫持技术在服务调用入口和应用日志写文件入口位置添加劫持点。
  2. 在发生服务调用时,生成调用链元数据和上下文。
  3. 当应用写日志时,通过写文件入口劫持点获取当前调用的调用链上下文,将traceId与应用日志一同写入应用日志文件。
  4. 日志归集将生成的日志文件聚合整理上送到监控服务器。
  5. 监控服务器对收集到的日志信息进行处理并存入ES。
  6. 通过Web页面展示存储在ES中的数据。

核心逻辑如下图:

5

调用链和日志聚合实现

调用链部分:模型设计、服务端信息收集(轻/重)、方法级信息收集(轻/重)、客户端信息收集(轻/重)、调用链协议设计(轻/重)、调用链上下文传递、调用信息记录及传递、调用数据统计处理几个关键过程。

关键技术:中间件劫持增强框架、调用模型设计和调用链上下文传递。

详情参见:架构文档

应用日志部分:日志归集,日志内容处理传输,服务端日志处理及存储等几个关键步骤。

关键技术:服务画像技术、日志归集。

详情参见:架构文档

欢迎下载UAVStack的源码AllInOne开发演示版体验。

效果展示

调用链入口

6
根据搜索条件,获取某次调用的过程,点击搜索结果进入该调用的详细过程界面。
7
点击右侧的关联按钮,快速定位到与之相关联日志。
8
日志入口
9
根据搜索条件(图中为按照Hello关键字进行搜索),搜索出符合条件的日志。
10
点击特定日志即可进入对应的调用过程界面。
11


以上就是对调用链概念、功能及实现策略的介绍,下期文章我们将继续介绍调用链的模型设计与模型时序图,欢迎继续关注~

官方网站

开源地址

UAVStack已在Github上开放源码,并提供了安装部署、架构说明和用户指南等双语文档,欢迎访问-给星-拉取~~~

扫一扫下方二维码,关注一个不会让你失望的公众号

大家好,我是李崇,宜信架构师,宜信集团级监控项目monitor、apm及ServiceGovern领域负责人。我。同时也是开源项目UAVStack核心开发人员,本周六(10月20日)我会做客掘金技术沙龙为大家做一场《多技术栈下的APM系统-UAVStack》的分享,欢迎大家可以现场交流。

点击图片了解详情: