skywalking + docker + logback + mysql 实现全链路日志跟踪

1.版本信息

        skywalking-oap-server:9.3.0

        skywalking-ui:9.3.0

        apache-skywalking-java-agent-8.14.0.tgz

2.docker拉取镜像

        2.1.(注意括号内的信息,还有这句话  -v /dev-ops:/skywalking/ext-libs \

                 /dev-ops这个是存放mysql驱动的,不然会报错,去这里下载数据库驱动jar包

docker run --name oap --restart=always  \
-e JAVA_OPTS="-Xms1G" \
-e SW_STORAGE=mysql \
-e SW_JDBC_URL=jdbc:mysql://(你的ip):3306/swtest \
-e SW_DATA_SOURCE_USER=(你的数据库账号) \
-e SW_DATA_SOURCE_PASSWORD=(你的数据库密码) \
-v /dev-ops:/skywalking/ext-libs \
-dp 11800:11800 \
-dp 12800:12800 \
apache/skywalking-oap-server:9.3.0

docker run --name oap-ui --restart=always \
-dp 8686:8080 \
-e SW_OAP_ADDRESS=http://(你的ip):12800 \
-e TZ=Asia/Shanghai \
apache/skywalking-ui:9.3.0

 3.创建一个dockerfile文件,拉取解压探针

wget https://dlcdn.apache.org/skywalking/java-agent/8.14.0/apache-skywalking-java-agent-8.14.0.tgz

tar -zxvf apache-skywalking-java-agent-8.14.0.tgz

 4.在dockerfile文件夹根目录中创建

        4.1.vi dockerfile

        

        4.2.这里是文件内容

        注意,我是通过openjdk:8来打的镜像,如果你们本地没有就要去拉取一下openjdk:8的镜像

FROM openjdk:8
EXPOSE 8089


ENV HOME_PATH /home

WORKDIR $HOME_PATH

ADD demo1-0.0.1-SNAPSHOT.jar $HOME_PATH/app.jar

ENTRYPOINT ["java","-jar","app.jar"]

 5.打包镜像

docker build -t skywalking-agent:8.14.0 .

6.写springboot项目的dockerfile

         6.1.这里ADD ./target/demo1-0.0.1-SNAPSHOT.jar是基于我的目录来做的

             FROM skywalking-agent:8.14.0这就是第五步打成镜像的名称

             如果是跟着我的目录做到这里的"-javaagent:/agent/skywalking-agent.jar"就不要改变

# 基础镜像
FROM skywalking-agent:8.14.0

#申明一个环境变量
ENV HOME_PATH /home

#指定容器启动时,执行命令会在该目录下执行
WORKDIR $HOME_PATH

#应用构建成功后的jar复制到容器指定目录下
ADD ./target/demo1-0.0.1-SNAPSHOT.jar $HOME_PATH/app.jar

#指定容器内部端口
EXPOSE 8089

ENTRYPOINT ["java","-javaagent:/agent/skywalking-agent.jar","-DSW_AGENT_NAME=hello","-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=(你的ip):11800","-jar","app.jar"]

 7.写logbake.xml,我这里分成两个文件

        7.1.logback-skywalking.xml

<?xml version="1.0" encoding="UTF-8"?>
<included>
    <!--日志渲染-->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />

    <!-- skywalking日志样式 -->
    <property name="SKY_WALKING_PATTERN" value="[%tid] ${SKY_WALKING_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} %line){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

    <!-- skywalking控制台 -->
    <appender name="SKY_WALKING_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>${SKY_WALKING_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.mdc.TraceIdMDCPatternLogbackLayout">
                <pattern>%date [%file:%line]-%msg%n</pattern>
            </layout>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>
    <!-- skywalking控制台 -->
</included>

        7.2.logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
    <include resource="logback-skywalking.xml"/>  # 引入sky日志(也可以写在一个文件中)
    <property name="LOG_PATH" value="logs"/>
    <property name="MAX_FILE_SIZE" value="10MB"/>
    <property name="MAX_HISTORY" value="30"/>

    <springProperty scope="context" name="applicationName" source="spring.application.name" defaultValue="demo" />
    <springProperty scope="context" name="loglevel" source="logging.level.root" defaultValue="info" />
    <springProperty scope="context" name="skyLogEnable" source="skywalking.log.enable" defaultValue="false"/> # 新增sky日志的开关,yml中配置
    <!-- 控制台日志样式 -->
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%d{[${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}]}-[${LOG_LEVEL_PATTERN:-%5p}]-[%-30.30logger{29}] : %m%n}"/>
    <!-- 文件日志样式 -->
    <property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{[${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}]}-[${LOG_LEVEL_PATTERN:-%5p}]-[%-30.30logger{29}] : %m%n}"/>

    <!-- 控制台 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <!-- <file>${LOG_PATH}/ztproject.log</file> -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${applicationName}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
            <maxHistory>${MAX_HISTORY}</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
    </appender>

    <!-- 错误日志文件 我们在k8s环境下 没必要做错误日志文件 -->
    <!-- <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LOG_PATH}/ztproject-error-error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${applicationName}-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
            <maxHistory>${MAX_HISTORY}</maxHistory>
        </rollingPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender> -->

    <!-- 异步写日志 -->
    <appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>1024</queueSize>
        <appender-ref ref ="FILE"/>
    </appender>
    <!-- <appender name="ASYNC_ERROR_FILE" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>1024</queueSize>
        <appender-ref ref ="ERROR_FILE"/>
    </appender> -->

    <root level="INFO">
        <appender-ref ref="ASYNC_FILE"/>
        <if condition='${skyLogEnable}'> # js表达式
            <then>
                <appender-ref ref="SKY_WALKING_CONSOLE"/>
                <appender-ref ref="GRPC_LOG"/>
            </then>
            <else>
                <appender-ref ref="CONSOLE"/>
            </else>
        </if>
    </root>
</configuration>

8.添加依赖

<!--start skywalking8.5集成-->
<!--skywalking8.5日志集成-->
<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-logback-1.x</artifactId>
    <version>8.14.0</version>
</dependency>

<!-- 该引用用于代码获取tranceId -->
<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-trace</artifactId>
    <version>8.14.0</version>
</dependency>
<!--end skywalking8.5集成-->

<!--xml.value解析表达式-->
<dependency>
    <groupId>org.codehaus.janino</groupId>
    <artifactId>janino</artifactId>
    <version>3.0.6</version>
</dependency>

9.开启日志跟踪

#application.yml开启日志追踪
skywalking:
  log:
    enable: true # false是关闭,不配默认关闭

 10.查看日志

        10.1.我通过访问接口打印了一堆日志,如果在有报错,复制TID到skywalking中

         10.2.直接复制你TID进行搜索

 

ok,完美下班!

大部分内容是照搬这个帖子的(90条消息) Linux搭建Skywalking9.3_linux 安装skywalking_猿仁的博客-CSDN博客

我是有配置了jenkins,提交代码就可以自动部署。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值