Skywalking、logback及logstash整合之trace信息输出
本篇内容比较简单,但是涉及到一点坑,所以记录说明一下。
1. 去哪里查找资料信息?
skywalking官方的信息很多,但是,查找具体的配置信息确并不是太容易。
官方的网站为:https://skywalking.apache.org/
下载地址(这里我们直接选择归档地址,因为包含所有版本,主页面只有最新的几个):https://archive.apache.org/dist/skywalking/
配置地址(这里的版本是8.6.0,其他版本类似):https://github.com/apache/skywalking-java/blob/v8.6.0/docs/en/setup/service-agent/java-agent/Application-toolkit-logback-1.x.md
2. 为什么会选择8.6.0?
由于我们之前agent使用的是8.0.1版本,所以toolkit也就选择了8.0.1,但是,在做trace信息输出的时候发现,该版本只能输出tid,别的信息根本没办法输出。而查看官方的release notes,我们发现在8.4.0的时候才增加了spanId等信息的输出。但是,在8.4.0的版本的配置说明中,并没有对应的配置。而最早有该配置的版本为8.6.0,所以,这里我们就选择了该版本。
3. Json格式的输出
因为我们原有的logback配置中,使用了<encoder class="net.logstash.logback.encoder.LogstashEncoder">这个encoder输出Json格式的日志,这是原日志收集时约定的格式。所以,这个Json形式的输出是不能变的。在国内网上流传的traceId及TID输出的方式基本都是使用
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
这个是不满足我们的需求的。
4. 关于agent和toolkit
toolkit的版本必须与Agent相一致,因为toolkit获取的一些信息都是来自于agent织入的,如果不一致,则可能出现获取不到的情况,比如上面说的8.4.0之前没有输出spanId,那么即使toolkit使用了8.6.0的版本,输出的结果依然为空。
另外,agent在官网很容下载到,但是,toolkit在下载的压缩包中并没有找到,官网也没有看到哪里可以下载toolkit。所以,这里我们直接从maven仓库下载:https://search.maven.org/artifact/org.apache.skywalking/apm-toolkit-logback-1.x/8.6.0/jar
5. pom.xml引入包
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>8.6.0</version>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.9</version>
</dependency>
6. 具体的集成配置
这里的配置可以参考我上面提到的配置地址,那个是当前版本的配至说明。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<!--日志文件存储位置 -->
<property name="LOG_FILE_PATH" value="/tmp/log/"/>
<!--启动日志与控制台日志文件-->
<property name="JSON_LOG_FILE_NAME" value="spring_applog"/>
<!--单个日志文件最大100M-->
<property name="MAX_FILE_SIZE" value="100MB"/>
<!--最大归档时间 30 天-->
<property name="LOG_FILE_MAX_HISTORY" value="30"/>
<!--最大日志总量 -->
<property name="LOG_FILE_TOTAL_SIZE" value="10GB"/>
<!--jmx log信息提供给Spring Boot Admin-->
<jmxConfigurator/>
<conversionRule conversionWord="tid" converterClass="org.apache.skywalking.apm.toolkit.log.logback.v1.x.LogbackPatternConverter"/>
<!-- add converter for %sw_ctx -->
<conversionRule conversionWord="sw_ctx" converterClass="org.apache.skywalking.apm.toolkit.log.logback.v1.x.LogbackSkyWalkingContextPatternConverter"/>
<!-- 输出spring运行日志到统一日志平台的配置 -->
<appender name="STASH" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输出spring日志到 /tmp/log/spring_log.json -->
<file>${LOG_FILE_PATH}${JSON_LOG_FILE_NAME}.json</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE_PATH}${JSON_LOG_FILE_NAME}.%d{yyyy-MM-dd}_%i.json</fileNamePattern>
<MaxFileSize>${MAX_FILE_SIZE}</MaxFileSize>
<maxHistory>${LOG_FILE_MAX_HISTORY}</maxHistory>
<totalSizeCap>${LOG_FILE_TOTAL_SIZE}</totalSizeCap>
</rollingPolicy>
<!-- 将日志输出成 JSON格式,并包含预定义 logType: spring_applog -->
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<includeCallerData>false</includeCallerData>
<!-- add TID(traceId) field -->
<provider class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.logstash.TraceIdJsonProvider" />
<!-- add SW_CTX(SkyWalking context) field -->
<provider class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.logstash.SkyWalkingContextJsonProvider">
</provider>
</encoder>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
"level": "%level",
"tid": "%tid",
"skyWalkingContext": "%sw_ctx",
"thread": "%thread",
"class": "%logger{1.}:%L",
"message": "%message",
"stackTrace": "%exception{10}"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<root level="info">
<appender-ref ref="STASH"/>
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
其中,%sw_ctx就包含了类似spanId等信息。
- 本文标签: skywalking
- 本文链接: https://www.v8en.com/article/292
- 版权声明: 本文由SIMON原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权