调用链与日志关联的探索式查询

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文将就Observability中的日志聚合、分布式跟踪及具体应用中结合使用进行展开说明。

摘要:本文将就Observability中的日志聚合、分布式跟踪及具体应用中结合使用进行展开说明。

一、Observability

Observability是一个最近几年开始在监控社区流行的术语。本文将Observability视为一种理念,一种监控的超集,包括监控、日志聚合、分布式跟踪,可以实时更深入地观察系统。本文将就其中的日志聚合、分布式跟踪及具体应用中结合使用进行展开说明。

二、日志与调用链的探索式查询

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

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

调用链是从一次具体请求的全局角度看待问题,当细粒具体到一个节点时,应用系统自身打印的日志最能说明当前节点处理逻辑。

下面通过一张简图来说明调用链和日志聚合做的事情:

调用链的作用是将一次请求所经过的所有节点和关键操作进行记录并汇总展示出来,就像图中绿色箭头,能够提供一个全局的视角去看待一次请求。

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

但是我们在具体使用过程中往往是这样的:

从调用链进来以后发现了一个问题,然后切换到日志聚合去根据特定属性查询对应的日志信息,通过排查日志信息发现还需要再次去查询与之关联的调用链信息……如此往返多次。

日志与调用链的探索式查询对于这种经典场景提供了一种新的闭环处理问题模式:

从调用链入口进入,可以根据调用链关联到具体应用的与当前调用链相关的日志,根据日志也可以关联到具体一条调用链;从日志入口进入,可以根据日志关联到与当前日志相关的具体一条调用链,根据一条调用链又可以关联到与当前调用链相关联的日志。而且两种模式可以相互切换。

三、举个栗子

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

四、整体架构设计

4.1 数据抓取:

应用集群中的机器上部署的agent用于数据收集和上送,探针内嵌在容器(tomcat等)用于为应用画像和收集应用信息

4.2 数据传输:

agent将处理过后的日志通过mq上送到监控服务器

4.3 数据处理及存储:

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

4.4 数据展示:

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

五、具体实现

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

5.1 中间件劫持技术

通过在中间件启动时动态将我们自己的代码行为植入到中间件的各种行为中的技术。比如在tomcat启动时动态在tomcat处理请求的开始位置添加代码劫持,则能够实现在tomcat执行处理请求逻辑之前进行服务调用画像等功能。更多能力和实现方式可以参考:http://chuansong.me/n/603660351655

5.2 traceId

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

主要实现逻辑:

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

核心逻辑如下图:

六、调用链和日志聚合实现

调用链部分分为:模型设计、服务端信息收集(轻/重)、方法级信息收集(轻/重)、客户端信息收集(轻/重)、调用链协议设计(轻/重)、调用链上下文传递、调用信息记录及传递、调用数据统计处理几个关键过程。关键技术为中间件劫持增强框架、调用模型设计和调用链上下文传递。

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

七、效果展示

7.1 调用链入口

通过特定条件搜素出关心的具体一次调用过程,点击进入调用的详细过程界面。

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

7.2 日志入口

通过特定特征(图中为按照Hello关键字进行搜索)搜索出符合条件的日志。

通过点击具体日志即可进入对应的调用过程。

参考资料

更多详情:https://uavorg.github.io/documents/uavdoc_architecture/moniorframework/diao-yong-lian-shu-ju-sheng-cheng.html

下载UAVStack的源码(https://github.com/uavorg

下载AllInOne开发演示版(https://uavorg.github.io/main/

作者:李崇

来源:宜信技术学院

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
5月前
|
SQL 监控 关系型数据库
深入理解MySQL日志:通用查询、慢查询和错误日志详解
深入理解MySQL日志:通用查询、慢查询和错误日志详解
1305 0
|
2月前
|
存储 监控 Serverless
阿里泛日志设计与实践问题之Grafana Loki在日志查询方案中存在哪些设计限制,如何解决
阿里泛日志设计与实践问题之Grafana Loki在日志查询方案中存在哪些设计限制,如何解决
|
2月前
|
SQL 存储 JSON
更快更强,SLS 推出高性能 SPL 日志查询模式
从海量的日志数据中,按照各种灵活的条件进行即时查询搜索,是可观测场景下的基本需求。本文介绍了 SLS 新推出的高性能 SPL 日志查询模式,支持 Unix 风格级联管道式语法,以及各种丰富的 SQL 处理函数。同时通过计算下推、向量化计算等优化,使得 SPL 查询可以在数秒内处理亿级数据,并支持 SPL 过滤结果分布图、随机翻页等特性。
11583 99
|
4月前
|
SQL 监控 关系型数据库
|
5月前
|
存储 监控 数据可视化
无需重新学习,使用 Kibana 查询/可视化 SLS 数据
本文演示了使用 Kibana 连接 SLS ES 兼容接口进行查询和分析的方法。
66836 15
|
2月前
|
存储 消息中间件 人工智能
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
早期 MiniMax 基于 Grafana Loki 构建了日志系统,在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案,并基于阿里云数据库 SelectDB 版内核 Apache Doris 升级了日志系统,新系统已接入 MiniMax 内部所有业务线日志数据,数据规模为 PB 级, 整体可用性达到 99.9% 以上,10 亿级日志数据的检索速度可实现秒级响应。
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
|
27天前
|
SQL 存储 缓存
高基数 GroupBy 在 SLS SQL 中的查询加速
本文详细介绍了SLS中的高基数GroupBy查询加速技术。
|
2月前
|
SQL JavaScript 前端开发
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题
|
3月前
|
分布式计算 资源调度 DataWorks
MaxCompute操作报错合集之出现“查询运行日志失败”的报错,一般是什么导致的
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
3月前
|
SQL 关系型数据库 MySQL
Mysql 开启慢日志查询及查看慢日志 sql
Mysql 开启慢日志查询及查看慢日志 sql
34 0
下一篇
无影云桌面