百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

怎么把CAT客户端的RootMessageId记录到每条日志中?

off999 2025-03-26 15:26 38 浏览 0 评论

欢迎关注头条号:Java小野猫

什么是RootMessageId?

为了理解RootMessageId先简单介绍一下CAT的数据结构设计。CAT客户端会将所有消息都封装为一个完整的消息树(MessageTree),消息树可能包括Transaction、Event、Heartbeat、Metric等类型的消息。具体如下:

  • Transaction:适合记录跨越系统边界的程序访问行为,比如远程调用,数据库调用,也适合执行时间较长的业务逻辑监控,Transaction用来记录一段代码的执行时间和次数
  • Event:用来记录一件事发生的次数,比如记录系统异常,它和transaction相比缺少了时间的统计,开销比transaction要小
  • Heartbeat:表示程序内定期产生的统计信息, 如CPU利用率, 内存利用率, 连接池状态, 系统负载等
  • Metric:用于记录业务指标、指标可能包含对一个指标记录次数、记录平均值、记录总和,业务指标最低统计粒度为1分钟

其中,Transaction类型的消息可作为消息树节点,而其他消息只可作为消息树的叶子节点,也就是Transaction是一个可嵌套的递归结构。比如:

消息树的每一节点都有一个属性messageId,用来唯一表示节点本身,其构成为:{domain}-{ip}-{timestamp}-{自增index}。另外还有两个属性,分别是parentMessageId, rootMessageId。parentMessageId表示父节点的messageId;rootMessageId则表示整个消息树的根节点的messageId。这两个属性在之后CAT的调用链分析与分布式调用链分析中发挥了关键作用。

为什么在日志中记录?

根据RootMessageId可以追踪某一个请求的整个分布式调用链,结合每一条日志快速定位耗费性能的症结,做针对性的性能优化。更加方便地做性能优化,特别是TP95、TP99等指标。

遇到偶尔发生的bug,是最让人头疼的,只有先从日志中找线索,但是在海量的日志中找到出现bug的那一个请求是很困难的。有了上游API提供的RootMessageId,就可以快速过滤出那次请求的所有日志, 更快速更方便地定位线上bug。

在日志的什么地方记录?

当然是每一句日志上都记录RootMessageId了。有的同学会说,这日志也记录的太多了。当发现线上问题无法定位时,你就会狠日志太少了。其实记录日志不怕多,就怕不全。现在硬盘很便宜了,搞个几T没有问题,另外还可以设置日志清理策略。

怎么记录到日志中?

前面说了那么多,终于到了今天的压轴大戏了。实现记录到日志有很多种方式,这里使用的是MDC(Mapped Diagnostic Contexts)。顾名思义,其目的是为了便于我们诊断线上问题而出现的方法工具类,目前我们经常使用的logback和log4j都是支持的。

只需要在每个请求的入口调用MDC.put方法,把rootMessageId赋值进去就可以了,是不是很简单?示例代码:

//在Filter里,从header里获取上下文信息,包括messageId、parentMessageId、rootMessageId
CatContext catContext = new CatContext();
catContext.addProperty(Cat.Context.ROOT, request.getHeader(CatConstants.CAT_HTTP_HEADER_ROOT_MESSAGE_ID));
catContext.addProperty(Cat.Context.PARENT, request.getHeader(CatConstants.CAT_HTTP_HEADER_PARENT_MESSAGE_ID));
catContext.addProperty(Cat.Context.CHILD, request.getHeader(CatConstants.CAT_HTTP_HEADER_CHILD_MESSAGE_ID));
if (catContext.getProperty(Cat.Context.ROOT) == null) {
 //如果调用链的顶端,没有上下文信息,需要生成上下文信息
 Cat.logRemoteCallClient(catContext);
} else {
 Cat.logRemoteCallServer(catContext);
}
MDC.put("traceId", catContext.getProperty(Cat.Context.ROOT));

如果你还不知道怎么集成CAT调用链,可以看看之前的《SpringBoot集成CAT调用链实例》

然后,在设置日志输出格式的配置文件里增加[%X{traceId}]。

Logback的xml配置示例:



 
 
 [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%X{traceId}] [%-5level] [%-40.36logger{40}:%-4.4line] - %msg%n
 
 

 
 
 

log4j的properties配置示例:

log4j.rootCategory=INFO,stdout,info,error
log4j.rootLooger=warn,stdout,info,error
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%-5p] [%thread] [%X{traceId}] method:%l - %m%n

读者福利

欢迎做Java的朋友们私信我【资料】免费获取免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)

其中覆盖了互联网的方方面面,期间碰到各种产品各种场景下的各种问题,很值得大家借鉴和学习,扩展自己的技术广度和知识面。

相关推荐

linux软件(linux软件图标)

Linux是一种自由和开放源代码的类UNIX操作系统。该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布。在加上用户空间的应用程序之后,成为Linux操作系统。Linux也是自由软件和开放...

hp laserjet p1108打印机驱动

惠普LaserJetProP1108打印机安装打印机驱动的方法,可以通过以下步骤操作来实现:1、运行驱动安装包,在“HPLaserJetProP1100打印机系列”下,点击“USB安装...

台式机最好的配置(台式机最强配置)

家用台式电脑cpu一般选择英特尔8-10代的i3就能满足正常的家用,内存方面选择16g,绝对够用,再选择一块512g的固态硬盘,保证电脑的速度2022年台式电脑建议你可以配16gb或32gb的内存。硬...

笔记本电脑home键在哪(笔记本的home键怎么用)

home键位置一般有三个:一、键就在键盘最右边一列的上方,也是右上角处。二、在数字键盘的“7”键上,如果想使用"home"键功能,需要先关闭数字键功能。一般笔记本开、关数字键功能是按F...

win7汉化包下载(win7系统汉化)

要下载犀牛7grasshopper汉化包,首先你需要从官方网站或可靠的第三方网站上找到可信赖的下载链接。然后,点击链接进行下载,并确保你的电脑设备有足够的存储空间来安装这个汉化包。安装完成后,打开犀牛...

ghost系统备份与恢复的详细步骤

还原系统步骤。1、电脑开机进入ghost,这里注意如果是通过U盘启动盘进入,注意先进入bios把第一启动项设置为当前的U盘;如果是通过自身电脑硬盘启动,建议先把ghost系统安装好。2、点击确定,然后...

photoshop官方下载电脑版(ps软件官方下载中文版电脑版)

鼠标右键点击压缩包,点击解压到文件夹按钮。打开文件夹,点击安装文件。弹出安装对话框,点击默认位置。更改安装路径,点击确认按钮。等待安装完成,双击打开ps快捷方式即可。目前在电脑上免费下载PS是不太可能...

2025最火电脑壁纸(2025最火电脑壁纸全屏)

要更改MacBookPro2022的壁纸,可以按照以下步骤操作:首先,点击桌面上的空白区域,然后选择“更改桌面背景”选项。接着,从预设的壁纸中选择一个或者点击“+”号添加自己的图片。如果需要更改壁...

安装系统安装包(系统安装包里的安装文件在哪)

oppocoloros13具体的下载方法如下,第一步,手机打开OPPO官方网站服务中心,登录手机账号。第二步,找到coloroS13升级包,点击安全下载,将coloroS13系统升级软件包...

u盘2t为什么才30元(为什么u盘128g那么便宜)

因为它是假的!之前我买了一个,说什么双十一搞活动,256G的U盘,花了30多元都是假的!楼主描述的这个情况百分之九十九是假的U盘!右击U盘,然后点“属性”,看到的可能是2T,但实际存储量却远没有2T,...

笔记本cpu90度正常吗(笔记本cpu 90多度)

如果运行大型游戏的话,还算正常。如果只是开个小游戏那就有点问题了。只要低于Intel原厂规范温度(105或100度),都不会影响产品寿命,CPU本身皆有保护机制,当核心超过设定的调节温度时,将会降...

win10家庭版系统官网(windows10家庭版官网)

微软官网下载的WIN10系统需要制作成U盘安装盘才能安装。也可以直接在微软官网制作U盘安装盘。微软官网只提供原版(也就是纯净版的)系统的下载,需要用户自行永久激活后才是正版的。如果不是永...

win7系统语言包(w7语言包在哪里)

1.单击桌面左下角的开始菜单,打开“控制面板”。2.在“控制面板”中找到“区域和语言”选项,点击该选项。3.弹出“区域和语言”属性对话框,切换到“管理选项”。4.点击“更改系统区域设置”...

照片恢复软件免费(照片恢复软件免费版)

苹果照片恢复软件是一款专业的免费的数码照片恢复软件,苹果照片恢复软件将成为你恢复丢失照片的最佳助手,它内核采用多种JPEG开发规范进行精确查找,支持多种品牌相机的拍摄格式。有极快的速度,可快速恢复被误...

autocad2012产品密钥(cad2012的产品密钥是什么)

CAD2012产品密钥和序列号序列号:400-45454545钥匙:651D1序列号:356-72378422钥匙:001D1序列号:400-45454545钥匙:001D1序列号:666-6969...

取消回复欢迎 发表评论: