• sky walking日志采集以及注意事项


    1,sky walking日志采集功能概述

    在介绍Sky walking日志采集功能之前,最好在系统学习一遍日志框架,这里推荐楠哥的日志框架
    在实际项目中我们需要将项目中的日志采集到sky walking中以便于我们能够快速排查问题,sky walking本身提供了logback,log4j,log4j2日志采集功能。
    可以直接进入官网学习和配置
    在这里插入图片描述
    因为现在企业基本上使用logback和log4j2两个日志框架所以我们就只演示这两个日志框架的收集。

    2,采集log4j2日志

    引入依赖

            <dependency>
                <groupId>org.apache.skywalkinggroupId>
                <artifactId>apm-toolkit-log4j-2.xartifactId>
                <version>9.0.0version>
            dependency>
            <dependency> 
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-log4j2artifactId>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    如果是Spring boot项目中还需要排除他自带的logback日志框架

            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.bootgroupId>
                        <artifactId>spring-boot-starter-loggingartifactId>
                    exclusion>
                exclusions>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在resource目录下新建log4j2.xml文件定义日志输出格式等
    这里可以参考sky walking官方给出的配置
    在这里插入图片描述

    
    <configuration status="WARN" monitorInterval="30">
        
        <appenders>
            
            <GRPCLogClientAppender name="SkywalkingLog">
                <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout pattern="${LOG_PATTERN}"/>
            GRPCLogClientAppender>
        appenders>
        <loggers>
            <root level="INFO">
                <appender-ref ref="SkywalkingLog"/>
            root>
        loggers>
    configuration>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    3,采集logback日志

    如果是在springboot项目中的话不需要引入logback依赖,因为上面已经介绍过springboot自带有logback日志框架,所以只需要引入sky walking日志上传的工具包依赖

            <dependency>
                <groupId>org.apache.skywalkinggroupId>
                <artifactId>apm-toolkit-logback-1.xartifactId>
                <version>9.0.0version>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    同样在resource目录下新建logback.xml配置文件

    
    <configuration>
    
        <property name="LOG_PATTERN" value="%date{yyyy-MM-dd HH:mm:ss} | %highlight(%-5level) | %boldYellow(%tid) | %boldYellow(%thread) | %boldGreen(%logger) | %msg%n"/>
    
        <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>${LOG_PATTERN}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.TraceIdPatternLogbackLayout">
                    <Pattern>${LOG_PATTERN}Pattern>
                layout>
            encoder>
        appender>
    
        <root level="INFO">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="GRPC_LOG"/>
        root>
    
    configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    4,效果展示

    正常情况下日志成功展示效果如下

    在这里插入图片描述

    5,注意事项

    最近在工作中使用sky walking时遇到一个大坑,因为项目已经运行很久了,在日志的配置文件中,已经有了很多了appender并且有些logger还是自定义的,这就导致一个问题,日志上传不成功。
    在排查过程中反复确认配置是没问题的【自己新建一个项目使用相同配置都能上传成功】最终进过源码调试和查阅很多文档确认还是配置问题,
    这也是为什么一开始我建议希望在好好系统性学习一下日志框架,logger里面有一个additivity配置,代表是否需要向上一级logger传递打印信息,默认是true,但是我们的项目中都是配置了false,而我们的sky walking的appender是配置在根logger里面,导致了我们的sky walking采集的日志不在同一个上下文中,所以没有采集到对应日志。
    日志配置说明

    
    <configuration>
    
        
        <property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %c [%thread]
                                        %-5level %msg%n"/>
        
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            
            <target>System.errtarget>
            
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>${pattern}pattern>
            encoder>
        appender>
        
        
        <root level="ALL">
            <appender-ref ref="console"/>
        root>
    configuration>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    修改方案,要么将additivity设置为true,要么将所有appender放在root标签里面。

  • 相关阅读:
    linux下安装openwrt(kvm虚拟机下安装)
    Spring beans
    mybatis原理及整合spring原理
    Nodejs多版本管理工具
    代码随想录算法训练营第一天(C)| 704. 二分查找 27. 移除元素
    各大自动化测试框架对比
    SpringMVC
    Python从入门到入土-基础语法
    python-0004-django站点
    Jmeter压测Nacos注册中心的Dubbo接口
  • 原文地址:https://blog.csdn.net/qq_48959845/article/details/139204389