Logback 集成 Skywalking Trace ID 并结合skywalking agent源码进行分析

2023-10-29

Logback集成skwalking的traceId

本文主要讲述在工程的logback文件中集成skywalking的traceId,以便在日志中打印对应的traceId



前言

skywalking是一个非常优秀的国产APM系统,主要开发人来自华为吴晟团队,2019年入住Apache,成为顶级项目,支持java、.net、NodeJS等探针,数据存储支持H2、ElasticSearch,采用字节码增强技术代码无侵入,粒度相对较粗,性能优越,且支持云原生,目前增长势头强劲,社区活跃,无语言障碍。


一、如何集成TraceID

首先在maven引入apm-toolkit-logback-1.x 插件,该插件目前由skywalking提供。之后再logback中添加tid到pattern中。最后将agent插件中路径activations/apm-toolkit-logback-1.x-activation-8.7.0.jar移动到plugins中,然后再次启动

二、使用步骤

1.引入库

由于本人是基于8.7.0进行开发的故版本号选择8.7的版本

 <dependency>
        <groupId>org.apache.skywalking</groupId>
        <artifactId>apm-toolkit-logback-1.x</artifactId>
        <version>8.7.0</version>
 </dependency>

2.修改logback文件

(示例):

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>/apps/logs/app.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>/apps/logs/app-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
            <MaxHistory>10</MaxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>200MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
                <!-- 日志格式中添加 %tid 即可输出 trace id -->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %tid %logger{50} - %msg%n</pattern>
<!--                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %tid %t %logger{50}: %msg%n</pattern>-->
            </layout>
        </encoder>
    </appender>

3.移动agent插件

:将agent路径activations/apm-toolkit-logback-1.x-activation-8.7.0.jar移动到plugins中。

4.观察结果

:结果如下

2022-01-17 13:50:50.250 [http-nio-9013-exec-1] INFO  TID:1baac609bcd549f9bde79acba8c1d34a.33.16423986502360001 o.a.c.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
2022-01-17 13:50:50.250 [http-nio-9013-exec-1] INFO  TID:1baac609bcd549f9bde79acba8c1d34a.33.16423986502360001 org.springframework.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
2022-01-17 13:50:50.263 [http-nio-9013-exec-1] INFO  TID:1baac609bcd549f9bde79acba8c1d34a.33.16423986502360001 org.springframework.web.servlet.DispatcherServlet - Complete

可以看出打印日志中包含了TID

总结

通过先引入skywalking的jar包,然后在 Logback 配置文件中的 pattern 中添加 %tid,就可以在日志行中输出调用链ID。
建议:后续可以通过修改logstash 配置解析文件就可以在es中存储包含traceid的日志记录,之后可通过skywalking连接日志存储ES获取数据,可完成对日志进行查询和链路的关联。

Logback 集成 Skywalking Trace ID 并结合skywalking agent源码进行分析(二)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Logback 集成 Skywalking Trace ID 并结合skywalking agent源码进行分析 的相关文章

  • 如何在 Spring Data 中选择不同的结果

    我在使用简单的 Spring Data 查询或 Query 或 QueryDSL 在 Spring Data 中构建查询时遇到问题 如何选择三列 研究 国家 登录 不同的行 并且查询结果将是用户对象类型的列表 Table User Id S
  • 如何将 javax.persistence.Column 定义为 Unsigned TINYINT?

    我正在基于 MySQL 数据库中的现有表创建 Java 持久性实体 Bean 使用 NetBeans IDE 8 0 1 我在这个表中遇到了一个字段 其类型为 无符号 TINYINT 3 我发现可以执行以下操作将列的类型定义为 unsign
  • 如何将画廊意图中的“打开”更改为“完成”?

    我使用以下意图打开画廊来选择多个图像和视频 Intent intent new Intent intent setType image video intent putExtra Intent EXTRA ALLOW MULTIPLE tr
  • Java Runtime.getRuntime().freeMemory() 问题

    我搜索并看到了一些线程 但没有一个能够解决我遇到的具体问题 我正在尝试使用以下方式监视我的内存使用情况Runtime getRuntime freeMemory Runtime getRuntime maxMemory and Runtim
  • Java:无法从同一包中的不同类访问静态变量

    这很奇怪 因为我有一个可以访问 Frame dimension getWidth 的 Character 类 及其伙伴 getHeight 但是当我想在 Map 类中使用它时 Eclipse 强调了它并且无法给我反馈 运行该程序最终会出现
  • 使用 GWT 读取非常大的本地 XML 文件

    我正在使用 GWT 构建我的第一个 Java 应用程序 它必须从一个非常大的 XML 文件中读取数据 当我尝试发送对文件中信息的请求时遇到问题 并且我不太确定它是否与文件的大小或我的语义有关 在我的程序中 我有以下内容 static fin
  • Spring Data JPA 选择不同

    我有一个情况 我需要建立一个select distinct a address from Person a 其中地址是 Person 内的地址实体 类型的查询 我正在使用规范动态构建我的 where 子句并使用findAll Specifi
  • 通往楼梯顶部的可能路径

    这是一个非常经典的问题 我听说谷歌在他们的面试中使用过这个问题 问题 制定一个递归方法 打印从楼梯底部到楼梯顶部的所有可能的独特路径 有 n 个楼梯 您一次只能走 1 步或 2 步 示例输出 如果它是一个有 3 级楼梯的楼梯 1 1 1 2
  • 是否可以使用 Flying Saucer (XHTML-Renderer) 将 css 解析为类路径资源?

    我正在尝试将资源打包到 jar 中 但我无法让 Flying Saucer 在类路径上找到 css 我无法轻松构建 URL 来无缝解决此问题 https stackoverflow com questions 861500 url to l
  • 当客户端关闭连接时,Spring StreamingResponseBody 请求线程未清理

    我在控制器中有一个端点 它返回一个StreamingResponseBody 用于向客户端发送文件 其代码大致如下 RestController RequestMapping value api public class Controlle
  • 使用 JUnit 时,有没有办法验证测试方法中是否调用了 try/catch 指令的 Catch 部分?

    例如 如果我想测试以下课程 public class SomeClass public void someMethod try Some code where comething could go wrong catch Exception
  • 了解joda时间PeriodFormatter

    我以为我明白了 但显然我不明白 你能帮我通过这些单元测试吗 Test public void second assertEquals 00 00 01 OurDateTimeFormatter format 1000 Test public
  • 使用 Mockito 模拟某些方法,但不模拟其他方法

    有没有办法使用 Mockito 模拟类中的某些方法 而不模拟其他方法 例如 在这个 诚然是人为的 Stock我想嘲笑的班级getPrice and getQuantity 返回值 如下面的测试片段所示 但我想要getValue 执行乘法 如
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • Spring-ws:如何从没有“Request”元素的 xsd 创建 Wsdl

    尝试为客户端实现 SOAP Web 服务 我需要一个 wsdl 文件来通过soapUI 测试该服务 但正如您在下面看到的 这个 xsd 没有 Request 和 Response 方法 所有请求和响应都被定义为基本 ServiceProvi
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • OpenCSV:将嵌套 Bean 映射到 CSV 文件

    我正在尝试将 bean 映射到 CSV 文件 但问题是我的 bean 具有其他嵌套 bean 作为属性 所发生的情况是 OpenCSV 遍历属性找到一个 bean 然后进入其中并映射该 bean 内的所有数据 如果找到另一个 bean 它就
  • 将 Apache Camel 执行器指标发送到 Prometheus

    我正在尝试转发 添加 Actuator Camel 指标 actuator camelroutes 将交换 交易数量等指标 发送到 Prometheus Actuator 端点 有没有办法让我配置 Camel 将这些指标添加到 Promet
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp

随机推荐

  • 阿里版GPT来袭——“通义千问”

    4月7日 阿里云在官方公众号中宣布 大模型 通义千问 开始邀请测试 你好 我叫通义千问 在 通义千问 的自我介绍中可知 它是达摩院自主研发的预训练语言模型 能够回答问题 创作文字 还能表达观点 撰写代码 基于上述能力 通义千问 认为其可以在
  • 数据仓库的选择

    author skate time 2010 03 11 数据仓库的选择 数据仓库的选择单从技术方面要从服务器硬件 数据库软件 ETL和前端展示软件 存储系统 仓库的架构设计几方面综合考虑 根据数据库的操作类型不同 数据库一般分为OLAP和
  • ORA-12505, TNS:listener does not currently know of SID given in connect descriptor解决方式

    启动项目连接oracle数据报 ORA 12505 TNS listener does not currently know of SID given in connect descriptor ORA 12505 TNS 监听程序当前无法
  • .NET网站部署到阿里云服务器经验分享

    由于笔者需要将自己的网站上线 所以第一步就是去买了一个阿里云服务器 想要远程访问的话 首先是云数据库的部署 然后是网站的部署 1 云数据库的部署 过程 在云服务器上下载SQLServer 然后把本地的数据库 架构和数据 使用脚本导出保存 再
  • 【千律】OpenCV基础:Hough圆检测

    环境 Python3 8 和 OpenCV 内容 Hough圆检测 将直角坐标系中的一个圆映射为新坐标系中的一个点 对于原直角坐标系中的每一个圆 可以对应 a b r 这样一个点 这个点即为新三维中的点 标准法实现步骤 1 获取原图像的边缘
  • 如果判断服务器是否在被CC攻击?

    什么是CC攻击 CC攻击的前身名为Fatboy攻击 是利用不断对网站发送连接请求致使形成拒绝服务的目的 攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包 造成对方服务器资源耗尽 一直到宕机崩溃 怎么判断是否被CC攻击 CC攻击主要
  • php怎么获取微信code,PHP tp3.2微信公众号静默授权获取code 获取openid

    PHP tp3 2微信公众号静默授权获取code 获取openid 发布时间 2018 02 24 14 46 浏览次数 1530 标签 PHP tp code openid 一 调用静默授权接口 基于thinkphp3 2的 1 获取co
  • [C语言]字符串处理 - 以指定的字符串分割字符串(支持中文字符)

    C语言 字符串处理 以指定的字符串分割字符串 支持中文字符 函数StringSplit 分割字符串到一个字符串数组中 其中该数组第0位为分割后字符串的个数 函数StringSplit Struct 以定义一个新结构的方式来实现该函数 C代码
  • 单片机----

    开启内部上拉电阻 pbph 0 1
  • C++多线程并发总结

    文章目录 1 线程创建与管理 1 1 并发与并行 1 2 多线程并发与多进程并发 2 C 线程创建 2 1 std thread 线程同步之互斥锁 std mutex std unique lock lock与unlock保护共享资源 lo
  • Java封装OkHttp3工具类

    一 准备工作 Maven项目在pom文件中引入jar包
  • 阿里云 MSE 助力开迈斯实现业务高增长背后带来的服务挑战

    开迈斯新能源科技有限公司于 2019 年 5 月 16 日成立 目前合资股东分别为大众汽车 中国 投资有限公司 中国第一汽车股份有限公司 一汽 大众汽车有限公司 增资扩股将在取得适当监督 包括反垄断 审批后完成 万帮数字能源股份有限公司和安
  • 一文看懂哈希表并学会使用C++ STL 中的哈希表

    最近在刷题以及做编程练习的作业时经常会用到哈希表 碰到一些想用的函数时每次都看别人的博客 现结合别人的博客对哈希表做个总结 本篇博客的主要内容如下 1 哈希表的定义 2 如何使用STL库中的哈希表 3 STL中哈希表的常用函数 1 哈希表的
  • 【微信小程序警告】property received type-uncompatible value: expected <String> but get null value. Used empty

    微信小程序警告property received type uncompatible value expected but get null value Used empty 遇到这种错误多半是在wxml文件中写入了未在js文件中定义的值
  • 787. 归并排序

    文章目录 Question Ideas Code Question 给定你一个长度为 n 的整数数列 请你使用归并排序对这个数列按照从小到大进行排序 并将排好序的数列按顺序输出 输入格式 输入共两行 第一行包含整数 n 第二行包含 n 个整
  • element ui表格data搜索重置功能

    element ui表格搜索重置功能 本地 1 html
  • STM32_Debug 使用ST-Link进行调试出现Error:Flash Download Failed-"Cortex-M3" 解决方案

    在Debug窗口依次注意以下几个点 1 选择与主控芯片相配套的芯片 2 选择ST Link Debugger 此处注意该页面最下面一行可不更改 亲测有效 3 接上图点击进入Setting 依次选择 4 进入Flash Download 注意
  • python类基础

    类把数据与功能绑定在一起 创建新类就是创建新的对象 类型 从而创建该类型的新 实例 类实例具有多种保持自身状态的属性 类实例还支持 在类中定义的 改变自身状态的方法 和其他编程语言相比 Python 用非常少的新语法和语义将类加入到语言中
  • 算法题:一堆数组的动态和

    题目描述 给你一个数组 nums 数组 动态和 的计算公式为 runningSum i sum nums 0 nums i 请返回 nums 的动态和 from typing import List x 1 2 3 4 def runnin
  • Logback 集成 Skywalking Trace ID 并结合skywalking agent源码进行分析

    Logback集成skwalking的traceId 本文主要讲述在工程的logback文件中集成skywalking的traceId 以便在日志中打印对应的traceId 文章目录 Logback集成skwalking的traceId 前