SpringBoot集成Skywalking日志收集

在实际项目中,为了方便线上排查问题,尤其是微服务之间调用链路比较复杂的系统中,通过可视化日志的手段仍然是最直接也很方便的排查定位问题的手段,比如大家熟悉的ELK就是一种比较成熟的可视化日志展现方式,在skywalking UI界面上,在服务菜单栏中有Log一项,该项就是用于服务中集成日志。 并提供相关搜索功能 ,根据TraceId快速定位某一次请求全链路日志信息。

skywalking支持的日志框架有:log4j、log4j2、logback等。

本文采用从skywalking agent收集的方式,日志框架使用springboot中使用默认的的logback。

1. 配置SpringBoot项目Skywalking agent

即在启动jvm参数增加

-javaagent后是skywalking-agent.jar的路径,在apache-skywalking-java-agent-9.0.0.tgz解压后的包中

-Dskywalking.agent.service_name是服务的名称,自定义,一般用spring.application.name

-Dskywalking.collector.backend_service是指skywalking oap服务器的ip和端口号

-javaagent:F:\project\git\agent\skywalking-agent\skywalking-agent.jar
-Dskywalking.agent.service_name=skywalking_demo_test  
-Dskywalking.collector.backend_service=192.168.110.155:11800

详细步骤参考:SpringBoot集成Skywalking链路追踪-CSDN博客

2. 引入POM依赖

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

3. 修改日志配置

有两种日志展示方式,一种是随机字符型,一种是展示链路上下文的,任选一种即可。

3.1 方式一

skywalking使用traceId对调用链路进行标识,traceId的格式为随机字符,如果没有请求链路,则输出日志中的traceId为N/A。

logback.xml文件

<configuration debug="false" scan="false"><springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/><property name="log.path" value="logs/ceshi"/><!-- 控制台输出  --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout"><pattern>%d{yyyy-mM-dd HH:mm:ss.sss} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</pattern></layout></encoder></appender><!--配置异步输出日志,提升性能--><appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"><discardingThreshold>0</discardingThreshold><queueSize>1024</queueSize><neverBlock>true</neverBlock><appender-ref ref="console"/></appender><!--skywalking grpc 日志收集--><appender name="grpc" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender"><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout"><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern></layout></encoder></appender><!--本地info日志保存 ,不需要可以删除--><appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/info.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log.path}/%d{yyyy-MM, aux}/info.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><maxFileSize>50MB</maxFileSize><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern></encoder></appender><!-- 本地error日志保存 ,不需要可以删除 --><appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/error.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><maxFileSize>50MB</maxFileSize><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern></encoder><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level></filter></appender><root level="INFO"><appender-ref ref="console"/><appender-ref ref="info"/><appender-ref ref="error"/><appender-ref ref="grpc"/></root>
</configuration>

3.2 方式二

由于traceId仅表示为随机字符,可读性较差。幸运的是,skywalking也认识到这一点,于是又引入了一个新的概念:链路上下文SW_CTX,所谓链路上下文,其实与traceId的作用相同,但他的好处是可读性强,其格式为SW_CTX:[服务名, 实例名, traceId, traceSegmentId, spanId]。

<configuration debug="false" scan="false"><springProperty scop="context" name="spring.application.name" source="spring.application.name" defaultValue=""/><property name="log.path" value="logs/ceshi"/><!-- 控制台输出  --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout"><pattern>%d{yyyy-mM-dd HH:mm:ss.sss} [%X{sw_ctx}] [%thread] %-5level %logger{36} -%msg%n</pattern></layout></encoder></appender><!--配置异步输出日志,提升性能--><appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"><discardingThreshold>0</discardingThreshold><queueSize>1024</queueSize><neverBlock>true</neverBlock><appender-ref ref="console"/></appender><!--skywalking grpc 日志收集--><appender name="grpc" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender"><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout"><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{sw_ctx}] [%thread] %-5level %logger{36} -%msg%n</Pattern></layout></encoder></appender><!--本地info日志保存 ,不需要可以删除--><appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/info.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log.path}/%d{yyyy-MM, aux}/info.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><maxFileSize>50MB</maxFileSize><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern></encoder></appender><!-- 本地error日志保存 ,不需要可以删除 --><appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/error.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><maxFileSize>50MB</maxFileSize><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern></encoder><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level></filter></appender><root level="INFO"><appender-ref ref="console"/><appender-ref ref="info"/><appender-ref ref="error"/><appender-ref ref="grpc"/></root>
</configuration>

4. 启动SpringBoot项目

4.1. 启动springboot项目

没有请求链路的系统日志,比如项目启动时的

4.2. 发送一个http请求

4.3. 查看控制台或文件日志

按照3.1方式配置的日志

按照3.2方式配置的日志

从输出的日志可以看到,该请求的调用链上有了TraceId,可以根据这个TraceId在Skywalking日志里面搜索

5. 在Skywalking控制台查看链路日志

  1. 访问Skywalking控制台

如 http://192.168.110.155:8080

  1. 点击Log选项卡

如下图所示,可以看到TraceId

  1. 查看某一个链路日志

复制TraceId,搜索即可以看到某次http请求的所有日志信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/804620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kamailio mysql数据表之subscriber用户表

1:表结构 CREATE TABLE subscriber (id int(10) unsigned NOT NULL AUTO_INCREMENT,username varchar(64) NOT NULL DEFAULT ,domain varchar(64) NOT NULL DEFAULT ,password varchar(64) NOT NULL DEFAULT ,ha1 varchar(128) NOT NULL DEFAULT ,ha1b varchar(128) NOT NULL …

书生·浦语大模型第二期实战营第二课笔记和基础作业

来源&#xff1a; 作业要求:Homework - Demo 文档教程:轻松玩转书生浦语大模型趣味 Demo B站教程:轻松玩转书生浦语大模型趣味 Demo 1. 笔记 2.基础作业 2.1 作业要求 2.2 算力平台 2.3 新建demo目录&#xff0c;以及新建目录下的文件&#xff0c;下载模型参数 2.4 Intern…

谷歌seo自然搜索排名怎么提升快?

要想在谷歌上排名快速上升&#xff0c;关键在于运用GPC爬虫池跟高低搭配的外链组合 首先你要做的&#xff0c;就是让谷歌的蜘蛛频繁来你的网站&#xff0c;网站需要被谷歌蜘蛛频繁抓取和索引&#xff0c;那这时候GPC爬虫池就能派上用场了&#xff0c;GPC爬虫池能够帮你大幅度提…

LangChain - Chain

文章目录 1、概览为什么我们需要链? 2、快速入门 (Get started) - Using LLMChain多个变量 使用字典输入在 LLMChain 中使用聊天模型&#xff1a; 3、异步 API4、不同的调用方法__call__调用仅返回输出键值 return_only_outputs只有一个输出键 run只有一个输入键 5、自定义cha…

DasViewer可以添加照片到里面吗?点开就可以看照片?

DasViewer主要是三维模型浏览器&#xff0c;二维可以添加矢量和正射影像&#xff0c;航片暂不支持。 DasViewer是由大势智慧自主研发的免费的实景三维模型浏览器,采用多细节层次模型逐步自适应加载技术,让用户在极低的电脑配置下,也能流畅的加载较大规模实景三维模型,提供方便…

vue element动态添加删除数据div

Vue 动态添加 div|极客教程 Vue 点击后添加元素方法_vue追加新元素-CSDN博客 vueelement项目动态添加删除数据div_elementui动态添加div-CSDN博客 附: <template><div><el-button click"addDiv">添加Div</el-button><div v-for"…

蓝桥杯嵌入式(G431)备赛笔记——UART

printf的重定向 为了方便使用&#xff0c;通过keil中的Help功能的帮助&#xff0c;做一个printf的重定向 搜索fputc&#xff0c;复制这段 将复制的那段放入工程中&#xff0c;并添加串口发送的函数 关键代码 u8 rx_buff[30]; // 定义一个长度为30的接收缓冲区数组rx_buff u8…

leetcode2529--正整数和负整数的最大计数

1. 题意 给定有序数组&#xff0c;求其中正整数和负整数的计数最大值。 正整数和负整数的最大计数 2. 题解 2.1 遍历 直接判断 class Solution { public:int maximumCount(vector<int>& nums) {int neg 0;int pos 0;for (int num:nums) {if (!num)continue;i…

在 Python 编程中,面向对象编程的核心概念包括哪些部分?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 在 Python 编程中&#xff0c;面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;的核心概念主要包括类&#xff08;Class&#xff09;、对象&#xff08;Object&#x…

“数字大冒险:探索二分查找的神奇之旅“

前言 作者&#xff1a;小蜗牛向前冲 专栏&#xff1a;小蜗牛算法之路 专栏介绍&#xff1a;"蜗牛之道&#xff0c;攀登大厂高峰&#xff0c;让我们携手学习算法。在这个专栏中&#xff0c;将涵盖动态规划、贪心算法、回溯等高阶技巧&#xff0c;不定期为你奉上基础数据结构…

深入了解Linux: dbus-daemon系统总线的作用与管理

dbus-daemon是Linux和其他类Unix系统中的消息总线系统&#xff0c;它允许不同的程序&#xff08;通常是进程&#xff09;进行相互通信。dbus-daemon提供了两种类型的消息总线&#xff0c;一种是系统总线&#xff08;system bus&#xff09;&#xff0c;另一种是会话总线&#x…

算法:多重背包问题dp

文章目录 一、多重背包问题特点1.1、多重背包问题的特征1.2、解决多重背包问题的基本方法典型例题&#xff1a;AcWing——多重背包问题I 1.3、二进制优化1.3.1、二进制优化的思想1.3.2、多重背包问题的二进制优化 一、多重背包问题特点 多重背包问题是背包问题的又一变种&…

性能优化角度

1.启动角度 2.数据缓存角度比如历史信息联想 3.内存释放角度 4.配合并要求后端进行接口API整合 5.耗时较多需求&#xff0c;根据业务情况进行线程异步处理 6.通过开源的loop监控sdk日志埋点&#xff0c;可监控线程对应环路的休眠/唤醒时间间隔&#xff0c;优化卡顿 7.尽量避免离…

如何在Flutter应用中配置ipa Guard进行混淆

在移动应用开发中&#xff0c;保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具&#xff0c;帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆&#xff0c;并提供了相关的操作步骤和注意事项。 &#x1f4dd; 摘要 本…

彩虹聚合DNS管理系统源码

聚合DNS管理系统可以实现在一个网站内管理多个平台的域名解析&#xff0c;目前已支持的域名平台有&#xff1a;阿里云、腾讯云、华为云、西部数码、CloudFlare。本系统支持多用户&#xff0c;每个用户可分配不同的域名解析权限&#xff1b;支持API接口&#xff0c;支持获取域名…

LeetCode-冗余连接(并查集)

每日一题&#xff0c;今天又刷到一道使用并查集来解决的问题&#xff0c;再次加深了一遍自己对并查集的印象和使用。 题目要求 树可以看成是一个连通且 无环 的 无向 图。 给定往一棵 n 个节点 (节点值 1&#xff5e;n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1…

对象参数验证工具, 解决非controller层数据校验问题, @Validated、@Valid

工具类 package com.common;import com.common.SysException;import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import java.util.Set; import java.util.stream.Collectors;/**1. author: 0i773. Desc…

Android TV 谷歌语音

Android TV 上的谷歌语音助手是一个强大的工具&#xff0c;它允许用户通过语音命令来控制电视设备、搜索内容、管理智能家居设备等。下面是一些关于在 Android TV 上使用谷歌语音助手的实战建议&#xff1a; 启用和设置&#xff1a; 确保你的 Android TV 设备已经连接到了互联…

【计算机毕业设计】超市进销存管理系统——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…

揭秘ChatGPT技巧:高效撰写学术论文的专家秘笈

ChatGPT无限次数:点击直达 html 揭秘ChatGPT技巧&#xff1a;高效撰写学术论文的专家秘笈 揭秘ChatGPT技巧&#xff1a;高效撰写学术论文的专家秘籍 在当今信息爆炸的时代&#xff0c;如何高效撰写学术论文成为许多研究者和学生关注的焦点。ChatGPT是一款人工智能助手&…