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

栏目: Java · 发布时间: 6年前

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

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

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

调用链与日志聚合的关联

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

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

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

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

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

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

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

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

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

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

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

举个栗子

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

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

整体架构设计

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

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中的数据。

核心逻辑如下图:

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

调用链和日志聚合实现

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

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

详情参见:架构文档

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

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

详情参见:架构文档

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

效果展示

调用链入口:

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

根据搜索条件,获取某次调用的过程,点击搜索结果进入该调用的详细过程界面。

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

点击右侧的关联按钮,快速定位到与之相关联日志。

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

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

根据搜索条件(图中为按照Hello关键字进行搜索),搜索出符合条件的日志。

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

点击特定日志即可进入对应的调用过程界面。

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

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

官方网站

开源地址

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

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

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

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

点击图片了解详情:

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

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


以上所述就是小编给大家介绍的《调用链与日志的关联式跟踪查询》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

奔跑吧 Linux内核

奔跑吧 Linux内核

张天飞 / 人民邮电出版社 / 2017-9-1 / CNY 158.00

本书内容基于Linux4.x内核,主要选取了Linux内核中比较基本和常用的内存管理、进程管理、并发与同步,以及中断管理这4个内核模块进行讲述。全书共分为6章,依次介绍了ARM体系结构、Linux内存管理、进程调度管理、并发与同步、中断管理、内核调试技巧等内容。本书的每节内容都是一个Linux内核的话题或者技术点,读者可以根据每小节前的问题进行思考,进而围绕问题进行内核源代码的分析。 本书内......一起来看看 《奔跑吧 Linux内核》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具