在微服务里面,由于服务众多,同时服务与服务之间的调用也非常多,为了形成全链路的日志,一般我们会使用其他框架,比如Tlog再搭配上elasctisearch+kibana这样的日志采集搜索方案。在这里再给大家提供一个全链路日志采集方案,就是这里的skywalking,我们可以利用skywalking的trace链和skywalking自带的elasticsearch就可以采集日志了,同时还可以在skywalking上进行查看。这一套下来是不是更加方便呢?下面我们来演示一下。
一、部署skywalking
想要使用skywalking的日志功能,那么skywalking的版本必须要大于8.4,前面《SkyWalking学习系列(二)使用docker-compose快速部署Skywalking环境》演示的是8.1版本的,所以需要根据文末把skywalking升级到8.4及以上的版本。安装完毕之后可以在dashboard上看到有日志一栏:
2、项目中添加skywalking依赖
这里我们使用springboot的logback功能向skywalking直接异步吐日志的形式,所以需要在springboot应用里面集成skywalking的日志模块,依赖是:
<dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-trace</artifactId> <version>8.12.0</version> </dependency> <!-- skywalking logback日志插件 --> <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-logback-1.x</artifactId> <version>8.12.0</version> </dependency>
这里的版本一般需要大于8.4即可。
3、改造logback
接下来就是改造springboot的logback-spring.xml文件,把下面的内容添加进去:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 日志输出格式 --> <property name="log.pattern" value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %boldMagenta([%tid]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/> <!-- 控制台输出 --> <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.TraceIdPatternLogbackLayout"> <Pattern>${log.pattern}</Pattern> </layout> </encoder> </appender> <!-- 异步输出 --> <appender name="console-async" class="ch.qos.logback.classic.AsyncAppender"> <discardingThreshold>0</discardingThreshold> <queueSize>1024</queueSize> <neverBlock>true</neverBlock> <appender-ref ref="console"/> </appender> <!-- 使用gRpc将日志发送到skywalking服务端 --> <appender name="grpc-log" 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.TraceIdPatternLogbackLayout"> <Pattern>${log.pattern}</Pattern> </layout> </encoder> </appender> <root level="info"> <appender-ref ref="console-async"/> <appender-ref ref="grpc-log"/> </root> </configuration>
然后在应用里面添加日志打印,比如我在calculate接口的地方添加的日志打印
然后把对应的springboot应用打成jar包上传到服务器上
4、下载高版本的agent
接下来我们区skywalking的官网下载大于8.4版本的skywalking安装包,然后把它解压到服务器上,确保${skywalking_home}/agent目录下有skywalking-agent.jar即可。然后使用前面的命令启动java应用:
nohup java -javaagent:/mnt/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=rule-service -Dskywalking.collector.backend_service=192.168.1.249:11800 -jar RuleApp.jar &
启动之后测试调用下接口,再去skywalking的dashboard上就可以看到对应的日志信息了
这里的日志还支持搜索的,例如:
同时这里如果是启动多个springboot的微服务的话,我们可以根据同一个traceid来查看整个链路所打印的日志。是不是非常方便?
大家从这几篇实践看下来,是不是使用skywalking非常方便啊?
还没有评论,来说两句吧...