技术交流28群

服务热线

135-6963-3175

微信服务号

skywalking集成日志追踪 更新时间 2022-2-19 浏览2353次

主要两点:

  1. 可实现链路id附加到我们的log输出业务日志中。

  2. 可实现日志自动收集通过grpc方式上传oap server。

官方默认支持三种日志框架。需要8.4版本。

1、log4j

依赖引入

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-log4j-1.x</artifactId>
    <version>${skywalking.version}</version>
</dependency>

配置 log4j.properties

log4j.appender.CONSOLE.layout=TraceIdPatternLayout # 设置日志输出格式 
log4j.appender.CONSOLE.layout.ConversionPattern=%d [%T] %-5p %c{1}:%L - %m%n

2、log4j2

依赖引入

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-log4j-2.x</artifactId>
    <version>${skywalking.version}</version>
</dependency>

配置 log4j2.xml

<Configuration status="debug">
    <Appenders>
        <!-- 控制台输出 -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d [%traceId] %-5p %c{1}:%L - %m%n"/>
        </Console>
        <!-- skywalking grpc 日志收集 8.4.0版本开始支持 -->
        <GRPCLogClientAppender name="grpc-log">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </GRPCLogClientAppender>
    </Appenders>
    <Loggers>
        <logger name="com.a.eye.skywalking.ui" level="debug" additivity="false">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="grpc-log"/>
        </logger>
        <logger name="org.apache.kafka" level="INFO"></logger>
        <logger name="org.apache.skywalking.apm.dependencies" level="INFO"></logger>
        <Root level="debug">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="grpc-log"/>
        </Root>
    </Loggers>
</Configuration>

3、Logback

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-logback-1.x</artifactId>
    <version>${skywalking.version}</version>
</dependency>

配置 logback.xml

<configuration>  
    <!-- 控制台输出 -->
    <appender name="STDOUT" 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>%d{yyyy-MM-dd HH:mm:ss.SSS} [%mdc] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>
    <! -- 配置异步记录 AsyncAppender -->
    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>1024</queueSize>
        <neverBlock>true</neverBlock>
        <appender-ref ref="STDOUT"/>
    </appender>
    <!-- skywalking grpc 日志收集 8.4.0版本开始支持 -->
    <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>%d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n</Pattern>
            </layout>
        </encoder>
    </appender>
<!--系统操作日志-->
<root level="DEBUG">  
    <appender-ref ref="STDOUT"/> 
    <appender-ref ref="ASYNC"/> 
    <appender-ref ref="grpc-log"/>
</root>
</configuration>

你要输出日志到文件中,grpc是利用本地日志去上传的。如果是使用GRPCLogClientAppender, 需要在agent的config/agent.config文件中加上grpc的配置,否则会默认访问127.0.0.1:11800的端口上传日志,导致远程日志上传失败。

gRPC报告程序可以将收集到的日志转发到SkyWalking OAP服务器或SkyWalking Satellite卫星。跟踪ID,段ID和跨度ID将自动附加到业务日志中,那么我们排查问题时候就能根据tid进行查询。

plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:xx.xx.xx.xx}
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}

agent与oap在本地的可以不配。

也可以不配置<appender-ref ref="grpc-log"/>,只负责打印,交给其他工具去收集。


附录配置项:

plugin.toolkit.log.transmit_formatted 是否以格式化或未格式化的格式传输记录的数据 true

plugin.toolkit.log.grpc.reporter.server_host 指定要向其报告日志数据的grpc服务器的主机 127.0.0.1

plugin.toolkit.log.grpc.reporter.server_port 指定要向其报告日志数据的grpc服务器的端口 11800

plugin.toolkit.log.grpc.reporter.max_message_size 指定grpc客户端要报告的日志数据的最大大小 10485760

plugin.toolkit.log.grpc.reporter.upstream_timeout 客户端向上游发送数据时将超时多长时间。单位是秒 30