可视化全链路日志追踪

目的

为面对各种日常客诉和突发问题,便于业务追踪。

业务追踪的主流实现方式:
1、基于日志的ELK方案
2、基于单次请求调用的会话跟踪方案(单机服务 不适用与当下业务系统)

传统的ELK方案

​ ELK 技术栈已经成为日志收集和分析的通用解决方案。伴随着业务逻辑的执行,业务日志会被打印,统一收集并存储至ES。此方案需要开发者在编写代码时尽可能全地打印日志,再通过关键字段从ES 中搜集筛选出与业务逻辑相关的日志数据.

缺点
(1) 日志搜集繁琐。日志数据通常为缺乏结构性的文本段。
(2) 日志筛选困难。没有办法进行精准定位
(3) 日志分析耗时。

分布式会话跟踪方案

​ 是通过一个分布式全局唯一的 id(即 traceId),将分布在各个服务节点上的同一次请求串联起来,还原调用关系、追踪系统问题、分析调用数据、统计系统指标。

​ 分布式会话跟踪的主要作用是分析分布式系统的调用行为,并不能很好地应用于业务逻辑的追踪。

缺点
(1) 无法同时追踪多条调用链路
(2) 无法准确描述业务逻辑的全景
(3) 无法聚焦于当前业务系统的逻辑执行

总结

​ 传统的 ELK 方案是一种滞后的业务追踪,需要事后从大量离散的日志中搜集和筛选出需要的日志,并人工进行日志的串联分析,其过程必然耗时耗力。而分布式会话跟踪方案则是在调用执行的同时,实时地完成了链路的动态串联,但由于是会话级别且仅关注于调用关系等问题,导致其无法很好地应用于业务追踪。


可视化全链路日志追踪

​ 可视化全链路日志追踪考虑在前置阶段,即业务执行的同时实现业务日志的高效组织和动态串联,从而可以实现高效的业务追踪。首先需要准确完整地描述出业务逻辑,形成业务逻辑的全景图,而业务追踪其实就是通过执行时的日志数据,在全景图中还原出业务执行的现场。

​ 新方案对业务逻辑进行了抽象,定义出业务逻辑链路。

​ 逻辑节点:业务系统的众多逻辑可以按照业务功能进行拆分,形成一个个相互独立的业务逻辑单元。

​ 逻辑链路:业务系统对外支撑着众多的业务场景,每个业务场景对应一个完整的业务流程,可以抽象为由逻辑节点组合而成的逻辑链路。一次业务追踪就是逻辑链路的某一次执行情况的还原,逻辑链路完整准确地描述了业务逻辑全景,同时作为载体可以实现业务日志的高效组织。

​ 由于逻辑节点之间、逻辑节点内部往往通过 MQ 或者 RPC 等进行交互,新方案可以采用分布式会话跟踪提供的分布式参数透传能力 [5] 实现业务日志的动态串联:

● 通过在执行线程和网络通信中持续地透传参数,实现在业务逻辑执行的同时,不中断地传递链路和节点的标识,实现离散日志的染色。

● 基于标识,染色的离散日志会被动态串联至正在执行的节点,逐渐汇聚出完整的逻辑链路,最终实现业务执行现场的高效组织和可视化展示。

链路定义

​ 使用特定语言,静态描述完整的逻辑链路,链路通常由多个逻辑节点,按照一定的业务规则组合而成,业务规则即各个逻辑节点之间存在的执行关系,包括串行、并行、条件分支。

​ DSL(Domain Specific Language)是为了解决某一类任务而专门设计的计算机语言,可以通过 JSON 或 XML 定义出一系列节点(逻辑节点)的组合关系(业务规则)。

​ 通用方案是采用静态组织(链路定义)+动态串联(链路染色)+日志收集(链路上报)+现场存储(链路存储)

[   
    {   "nodeName": "A",
		"nodeType": "rpc"
	},
	{   
	    "nodeName": "Fork",
		"nodeType": "fork",
		"forkNodes": [
			[{
			    "nodeName": "B",
				"nodeType": "rpc"
			}],
			[{
			     "nodeName": "C",
				 "nodeType": "local"
			}]
         ]
    },
    {
        "nodeName": "Join",
        "nodeType": "join",
        "joinOnList": ["B", "C"]
    },
    {
        "nodeName": "D",
        "nodeType": "decision",
        "decisionCases": {
            "true": [{
                "nodeName": "E",
                "nodeType": "rpc"
            }]
        },
        "defaultCase": [{
            "nodeName": "F",
            "nodeType": "rpc"
        }]
    }
]

在这里插入图片描述

链路染色

​ 在链路执行过程中,通过透传串联标识,明确具体是哪条链路在执行,执行到了哪个节点。

链路染色包括两个步骤:

(1) 确定串联标识,当逻辑链路开启时,确定唯一标识,能够明确后续待执行的链路和节点。
     1》链路唯一标识 = 业务标识 + 场景标识 + 执行标识(三个标识共同决定“某个
业务场景下的某次执行”)
     2》节点唯一标识 = 链路唯一标识 + 节点唯一名称(两个标识共同决定“某个业务场景下的某次执行中的某个逻辑节点”)

(2) 传递串联标识,当逻辑链路执行时,在分布式的完整链路中透传串联标识,动态串联链路中已执行的节点,实现链路的染色。

链路上报

​ 在链路执行过程中,将日志以链路的组织形式进行上报,实现业务现场的准确保存。上报的日志数据包括:节点日志和业务日志。其中节点日志的作用是绘制链路中的已执行节点,记录了节点的开始、结束、输入、输出;业务日志的作用是展示链路节点具体业务逻辑的执行情况,记录了任何对业务逻辑起到解释作用的数据,包括与上下游交互的入参出参、复杂逻辑的中间变量、逻辑执行抛出的异常。

在这里插入图片描述

链路存储

​ 将链路执行中上报的日志落地存储,并用于后续的“现场还原”。上报日志可以拆分为链路日志、节点日志和业务日志三类:

(1) 链路日志:链路单次执行中,从开始节点和结束节点的日志中提取的链路基本信息,包含链路类型、链路元信息、链路开始 / 结束时间等。 
(2) 节点日志:链路单次执行中,已执行节点的基本信息,包含节点名称、节点状态、节点开始 / 结束时间等。
(3) 业务日志:链路单次执行中,已执行节点中的业务日志信息,包含日志级别、日志时间、日志数据等

在这里插入图片描述

案例

在这里插入图片描述

内容平台。

业务追踪建设,所需考虑的问题:
(1) 业务场景多
(2) 逻辑节点多
(3) 出发执行多

​ 点评内容平台是一个复杂的业务系统,对外支撑着众多的业务场景,通过对于业务场景的梳理和抽象,可以定义出实时接入、人工运营、任务导入、分发重算等多个业务逻辑链路。由于点评内容平台涉及众多的内部服务和下游依赖服务,每天支撑着大量的内容处理业务,伴随着业务的执行将生成大量的日志数据,与此同时链路上报还需要对众多的服务进行改造。

架构图

在这里插入图片描述

​ 因此在通用的全链路日志追踪方案的基础上,点评内容平台进行了如下的具体实践。

(1) 支持大数据量日志的上报和存储。

(2) 实现众多后端服务的低成本改造。

TraceLogger 工具包的功能包括:

● 模仿 slf4j-api:工具包的实现在 slf4j 框架之上,并模仿 slf4j-api 对外提供相同的 API,因此使用方无学习成本。

● 屏蔽内部细节,内部封装一系列的链路日志上报逻辑,屏蔽染色等细节,降低使用方的开发成本。

​ ○ 上报判断:

​ ○ 判断链路标识:无标识时,进行兜底的日志上报,防止日志丢失。

​ ○ 判断上报方式:有标识时,支持日志和 RPC 中转两种上报方式。

​ ○ 日志组装:实现参数占位、异常堆栈输出等功能,并将相关数据组装为Trace 对象,便于进行统一的收集和处理。

​ ○ 异常上报:通过 ErrorAPI 主动上报异常,兼容原日志上报中 ErrorAppender。节点日志上报:支持 API、AOP 两种上报方式,灵活且成本低。

​ ○ 日志上报:适配 Log4j2 日志框架实现最终的日志上报

在这里插入图片描述

功能实现图

在这里插入图片描述

总结

​ 随着分布式业务系统的日益复杂,可观测性对于业务系统的稳定运行也愈发重要 。内容平台落地了全链路的可观测建设,在日志(Logging)、指标(Metrics)和追踪(Tracing)的三个具体方向上都进行了一定的探索和建设。支持实时、多维度地展示业务系统的关键业务和技术指标,同时支持相应的告警和异常归因能力,实现了对业务系统整体运行状况的有效把控。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值