Skywalking集成日志框架

914 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第21天,点击查看活动详情

一、SkyWalking继承服务的日志

如果部署多个微服务,各个服务的日志都记录在服务部署的主机上,要查看所有日志就比较麻烦了,SkyWalking就可以帮助我们将各个微服务的日志进行采集,进行统一处理。下面就来处理一下。

1-1、引入依赖

和SkyWalking进行日志集成,每个日志框架集成的方式不太一样,具体可以参考如下文档。

logback官方配置

log4j官方配置

log4j2j官方配置

我这边使用logback进行处理,首先引入logback对SkyWalking的依赖,版本要和SkyWalking保持一致

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

1-2、添加logback-spring.xml配置文件

1-2-1、配置logback日志信息

最重要的是需要在日志格式中添加 [%tid] 这个就是后面需要用到的追踪ID

另外再appender中的layoutclass\color{red}{另外再appender中的layout的class是}

org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 引入 Spring Boot 默认的 logback XML 配置文件  -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>


    <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>[%tid]-${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}</Pattern>
            </layout>
        </encoder>

    </appender>

    <!-- 设置 Appender -->
    <root level="INFO">
        <appender-ref ref="console"/>
    </root>

</configuration>

1-2-2、通过GRPC上报日志信息

gRPC报告程序可以将收集到的日志转发到SkyWalking OAP服务器上

image.png 最终logback-spring.xml配置文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 引入 Spring Boot 默认的 logback XML 配置文件  -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>


    <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>[%tid]-${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}</Pattern>
            </layout>
        </encoder>

    </appender>

    <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.mdc.TraceIdMDCPatternLogbackLayout">
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>

    <!-- 设置 Appender -->
    <root level="INFO">
        <appender-ref ref="console"/>
        <appender-ref ref="grpc-log"/>
    </root>

</configuration>

1-3、启动服务查看追踪ID是否已记录

启动之后发现,并没有输出我们需要的追踪ID image.png

这是因为我这边服务运行和SkyWalking部署没在同一个物理空间,就无法记录日志信息了,这时候就需要进行特殊处理一下\color{red}{这是因为我这边服务运行和SkyWalking部署没在同一个物理空间,就无法记录日志信息了,这时候就需要进行特殊处理一下}

1-3-1、给本地SkyWalking添加远程配置

打开本地agent/config/agent.config配置文件,添加如下配置信息:

plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:192.168.253.131}
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}

1-3-2、重启服务再次访问

访问控制台就可以看到tid了。

image.png

1-4、查看SkyWalking日志

通过grpc将日志上报到SkyWalking就可以在SkyWalking控制台看到日志信息了 image.png

1-4-1、筛选日志

复制控制台的ID,粘贴到SkyWalking的追踪ID,查询就可以查到追踪ID的日志信息了。 image.png

1-4-2、通过追踪ID,查看追踪链路信息

通过筛选,点击追踪ID image.png

就会自动跳转到追踪tab中,指定的追踪ID请求链路了

image.png

以上最主要的就是如果服务和SkyWalking的服务没部署在同一个服务器,那么就需要在服务的服务器中配置agent下的config,指向远程SkyWalking地址。