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,提交代码就可以自动部署。