当前位置:网站首页 > R语言数据分析 > 正文

spring cloud微服务配置log4j2日志组件和zipkin进行服务链路追踪

前言:由于公司业务需求越来越大,和第三方调用的接口也越来越频繁,有时候需要排查很久之前的日志。项目初期,排查日志都是直接去服务器上按时间拷贝下来,然后再搜索对比,过程很是复杂。所以决定架构一个elk日志检索系统。该检索系统应该在项目初期就架构的。主要还是因为懒,还有就是我是项目中期才进来的。

一、配置log4j2日志组件

由于原架构使用的是logback作为日志组件。当然该日志组件还是挺好用的,很方便的进行了日志分割等操作。但是该组件是同步的,所以高访问的时候可能会影响效率,这里就换成log4j2支持异步的日志组件。

1.pom中引入依赖Log4j Starter、disruptor依赖

(1)先exclusions排除掉默认的日志:

<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis.version}</version> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency>

(2) 引入log4j2相关依赖

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.3.6</version> </dependency>

注:disruptor是一个基于无锁化环形队列的高性能并发框架,log4j2就是借助它进行高性能日志异步输出的。 

2.添加log4j2.xml配置文件

日志文件如下:

<?xml version="1.0" encoding="UTF-8"?> <configuration status="debug"> <Properties> <!--自定义一些常量,之后使用${变量名}引用--> <Property name="logFilePath">logs/activity</Property> </Properties> <appenders> <!--这个输出控制台的配置--> <Console name="STDOUT" > <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" /> <!-- 输出日志的格式--> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%logger{50}:%L] [%X{X-B3-TraceId},%X{X-B3-SpanId}] - %msg%n" charset="UTF-8"/> </Console> <RollingRandomAccessFile name="FILE-INFO" fileName="${logFilePath}/info/log-info.log" filePattern="${logFilePath}/info/log-info.%d{yyyy-MM-dd}-%i.log"> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" /> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%logger{50}:%L] [%X{X-B3-TraceId},%X{X-B3-SpanId}] - %msg%n" charset="UTF-8" /> <!-- Policies :日志滚动策略--> <Policies> <!--每1天/小时/分/... 生成一个文件, 时间依据filePattern的配置--> <TimeBasedTriggeringPolicy interval="1" /> <!-- SizeBasedTriggeringPolicy :文件大小滚动策略--> <SizeBasedTriggeringPolicy size="100 MB"/> </Policies> <!-- 默认滚动策略--> <!-- max参数指定了计数器的最大值。一旦计数器达到了最大值,过旧的文件将被删除。注意:不要认为max参数是需要保留的日志文件的最大数目。 max参数是与filePattern中的计数器%i配合起作用的,其具体作用方式与filePattern的配置密切相关。 --> <DefaultRolloverStrategy max="3" > <Delete basePath="logs" maxDepth="2"> <IfFileName glob="*log-info.*.log" /> <!--备注: 这里的age必须和filePattern协调, 后者是精确到HH, 这里就要写成xH, xd就不起作用 另外, 数字最好>2, 否则可能造成删除的时候, 最近的文件还处于被占用状态,导致删除不成功!--> <!-- 日志保留30天的 --> <IfLastModified age="30d" /> </Delete> </DefaultRolloverStrategy> </RollingRandomAccessFile> <RollingRandomAccessFile name="FILE-DEBUG" fileName="${logFilePath}/debug/log-debug.log" filePattern="${logFilePath}/debug/log-debug.%d{yyyy-MM-dd}-%i.log"> <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" /> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%logger{50}:%L] [%X{X-B3-TraceId},%X{X-B3-SpanId}] - %msg%n" charset="UTF-8" /> <Policies> <TimeBasedTriggeringPolicy interval="1" /> <SizeBasedTriggeringPolicy size="100 MB"/> </Policies> <DefaultRolloverStrategy max="3" > <Delete basePath="logs" maxDepth="2"> <IfFileName glob="*log-debug.*.log" /> <IfLastModified age="30d" /> </Delete> </DefaultRolloverStrategy> </RollingRandomAccessFile> <RollingRandomAccessFile name="FILE-WARN" fileName="${logFilePath}/warn/log-warn.log" filePattern="${logFilePath}/warn/log-warn.%d{yyyy-MM-dd}-%i.log"> <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY" /> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%logger{50}:%L] [%X{X-B3-TraceId},%X{X-B3-SpanId}] - %msg%n" charset="UTF-8" /> <Policies> <TimeBasedTriggeringPolicy interval="1" /> <SizeBasedTriggeringPolicy size="100 MB"/> </Policies> <DefaultRolloverStrategy max="3" > <Delete basePath="logs" maxDepth="2"> <IfFileName glob="*log-warn.*.log" /> <IfLastModified age="30d" /> </Delete> </DefaultRolloverStrategy> </RollingRandomAccessFile> <RollingRandomAccessFile name="FILE-ERROR" fileName="${logFilePath}/error/log-error.log" filePattern="${logFilePath}/error/log-error.%d{yyyy-MM-dd}-%i.log"> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" /> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%logger{50}:%L] [%X{X-B3-TraceId},%X{X-B3-SpanId}] - %msg%n" charset="UTF-8" /> <Policies> <TimeBasedTriggeringPolicy interval="1" /> <SizeBasedTriggeringPolicy size="100 MB"/> </Policies> <DefaultRolloverStrategy max="3" > <Delete basePath="logs" maxDepth="2"> <IfFileName glob="*log-error.*.log" /> <IfLastModified age="30d" /> </Delete> </DefaultRolloverStrategy> </RollingRandomAccessFile> </appenders> <loggers> <!-- 去掉无关紧要的默认日志 --> <AsyncLogger name="springfox" level="OFF"></AsyncLogger> <!-- includeLocatio输出行号,有性能开销 --> <AsyncRoot level="INFO" includeLocation="true" > <AppenderRef ref="FILE-INFO" /> <AppenderRef ref="FILE-WARN" /> <AppenderRef ref="FILE-ERROR" /> <AppenderRef ref="STDOUT" /> </AsyncRoot> </loggers> </configuration>

3.添加log4j2.component.properties文件

# 环形队列的大小,默认是26万 # 全异步模式下 AsyncLogger.RingBufferSize=10000 # 混合模式下 AsyncLoggerConfig.RingBufferSize=10000 # 自动降级--丢弃日志 log4j2.AsyncQueueFullPolicy=Discard # 队列满后丢弃DEBUG级别的日志 log4j2.DiscardThreshold=DEBUG

至此log4j2配置完成.

二、Spring Cloud Sleuth接入

1.pom引入相关依赖

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency> 

2.日志文件配置添加追踪变量 

在log4j2.xml日志文件中添加: [%X{X-B3-TraceId},%X{X-B3-SpanId}],上述配置文件已添加。

3.在application.properties文件中添加zipkin服务地址

#zipkin服务地址 spring.zipkin.base-url=http://${eureka.instance.hostname}:9411/ #设置抽样百分比 0.1-1 1为采集全部信息 spring.sleuth.sampler.probability=1.0

三、Zipkin Server的搭建 

1.创建SpringBoot工程

创建zipkin服务,勾选Sleuth和zipkin依赖 

2.添加Zipkin Starter、Zipkin Server的相关依赖

<dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-autoconfigure-ui</artifactId> </dependency> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-server</artifactId> </dependency>

3.添加application.properties相关依赖

server.port=9411 spring.application.name=zipkin zipkin.storage.type=mem

4.启动类添加@EnableZipkinServer注解

到此这篇spring cloud微服务配置log4j2日志组件和zipkin进行服务链路追踪的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • spring cloud搭建elk2024-11-30 13:54:06
  • centos安装rabbitMQ2024-11-30 13:54:06
  • windows安装mitmproxy2024-11-30 13:54:06
  • 配置APP的fiddler系统根证书2024-11-30 13:54:06
  • 学好SQF, 快活Arma32024-11-30 13:54:06
  • elasticsearch分片报错Unassigned2024-11-30 13:54:06
  • elasticsearch集群(多机版)2024-11-30 13:54:06
  • centos服务器配置elasticsearch2024-11-30 13:54:06
  • mac下使用MxSrvs配置thinkphp52024-11-30 13:54:06
  • centos使用crontab调度任务2024-11-30 13:54:06
  • 全屏图片