springcloud集成sleuth并将日志写入到elk
·
背景:因为服务容器化部署在了k8s集群,像往常一样把日志写入到服务器的文件系统中已经不那么适用了。一旦重新部署又是另外一个容器会导致日志丢失,虽然理论上来说也可以使用文件挂载的方式,但是相比而言集成elk会更加好用点。而sleuth的主要作用就是在请求过程中加上traceid和spanid来标记微服务间调用的同一个请求。
这两个字段在日志格式中的配置分别为:%X{X-B3-TraceId:-} ,%X{X-B3-SpanId:-}
对应的maven依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.6</version>
</dependency>
logback.xml的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--定义Logstash输出器-->
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>localhost:5044</destination>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
</encoder>
</appender>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%X{X-B3-TraceId},%X{X-B3-SpanId}] %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!--设置根日志级别为INFO,将日志事件输出到Logstash输出器中-->
<root level="INFO">
<appender-ref ref="logstash"/>
<appender-ref ref="console"/>
</root>
</configuration>
这一步的前提是,我们已经搭建好了自己的ELK,或者是logstash服务,因为最终是输出到logstash的。然后是替换掉logback.xml的destination配置,替换成实际的logstash的服务地址。
如果需要搭建ELK,可以移步小弟的另一篇博客使用rancher管理界面在k8s集群搭建ELk
更多推荐



所有评论(0)