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

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

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


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

调用链与日志聚合的关联

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

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

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

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

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》的分享,欢迎你们能够现场交流。

点击图片了解详情:

相关文章
相关标签/搜索