可视化全链路日志追踪

ELK方案

目的

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

业务追踪的主流实现方式:

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 定义出一系列节点(逻辑节点)的组合关系(业务规则)。

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

链路的抽象定义和具体实现

链路染色

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

链路染色包括两个步骤:

(1) 确定串联标识,当逻辑链路开启时,确定唯一标识,能够明确后续待执行的链路和节点。

    1》链路唯一标识 = 业务标识 + 场景标识 + 执行标识(三个标识共同决定“某个

业务场景下的某次执行”)

    2》节点唯一标识 = 链路唯一标识 + 节点唯一名称(两个标识共同决定“某个业务场景下的某次执行中的某个逻辑节点”)

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

链路上报

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

链路上报

链路存储

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

(1) 链路日志:链路单次执行中,从开始节点和结束节点的日志中提取的链路基本信息,包含链路类型、链路元信息、链路开始 / 结束时间等。

(2) 节点日志:链路单次执行中,已执行节点的基本信息,包含节点名称、节点状态、节点开始 / 结束时间等。

(3) 业务日志:链路单次执行中,已执行节点中的业务日志信息,包含日志级别、日志时间、日志数据等

链路存储

案例

内容平台

业务追踪建设,所需考虑的问题:

(1) 业务场景多

(2) 逻辑节点多

(3) 出发执行多

架构落地

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

架构图

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

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

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

TraceLogger 工具包的功能包括:

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

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

    ○ 上报判断:

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

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

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

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

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

日志上报

功能实现图


链路查询

总结

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容