1. SkyWalking配置
1.1 下载SkyWalking
官网:https://skywalking.apache.org/downloads/
下载SkyWalking APM的Distribution的最新版
1.2 目录讲解
老版本布局:
新版本的布局:
1.3 设置配置文件 config/application.yml
storage:
# 修改存储引擎为mysql
selector: ${SW_STORAGE:mysql}
……
mysql:
properties:
# 修改ip和数据库
jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest"}
# 修改用户名
dataSource.user: ${SW_DATA_SOURCE_USER:root}
# 修改密码
dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root}
……
Skywalking支持的几种存储方式:
- h2:是Skywalking自带的,对应的jar包路径是Skywalking/oap-libs/h2-1.4.196.jar,h2是一种内存数据库
- mysql:MySQL数据库
- ElasticSearch:ElasticSearch 非关系型数据库
- ……
1.4 下载Mysql连接jar
在下面的网站中可以选择不同版本的jar包进行下载
https://mvnrepository.com/artifact/mysql/mysql-connector-java
选择下载了8.0.22版本
![[Pasted image 20240723105645.png]]
将jar包放在oap-libs
目录下即可,如果没有连接jar包,会抛如下异常:
Failed to get driver instance for jdbcUrl=jdbc:mysql://localhost:3306/XXX
No suitable driver
1.5 启动
- 在
bin/
目录下,执行starup.bat
(Windows)或者startup.sh
(Linux)文件 - startup脚本文件会同时启动Skywalking Collector、Skywalking UI
启动之后窗口闪退,问题在于JDK版本为8,与skywalking要求版本11不同
或者是因为目录中有空格
修正问题之后,启动成功:
修改了Web的启动端口为8090,在webapp/application.yml中进行修改。
在浏览器中输入localhost:8090/即可进入页面
2. Springboot配置
2.1 下载Java Agent
同样在Skywalking的官网中下载Java Agent
解压之后将文件夹放在项目是src文件夹下的main文件夹
2.2 配置Java Agent
在Skywalking-agent中的config文件中,找到相应属性进行修改
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}
agent.service_name=${SW_AGENT_NAME:Applciation_Name}
2.3 日志对接
在skywalking的UI端有一个日志的模块,用于收集客户端的日志,默认是没有数据的,那么需要如何将项目中产生日志数据传输到skywalking中
在springboot项目中导入相关依赖:
<!--打印skywalking的TraceId到日志-->
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>8.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>8.12.0</version>
</dependency>
添加配置文件:
新建一个logback-spring.xml放在resource目录下,配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 修改一下路径-->
<property name="PATH" value="./log/business"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder><!-- <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) %blue(%-50logger{50}:%-4line) %thread %green(%-18X{LOG_ID}) %msg%n</Pattern>-->
<Pattern>%d{mm:ss.SSS} %highlight(%-5level) %blue(%-30logger{30}:%-4line) %thread %green(%-18X{LOG_ID}) %msg%n</Pattern>
</encoder> </appender>
<appender name="TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${PATH}/trace.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${PATH}/trace.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <layout> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-18X{LOG_ID}) %msg%n</pattern>
</layout> </appender>
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${PATH}/error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${PATH}/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <layout> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-18X{LOG_ID}) %msg%n</pattern>
</layout> <filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter> </appender>
<root level="ERROR">
<appender-ref ref="ERROR_FILE" />
</root>
<root level="TRACE">
<appender-ref ref="TRACE_FILE" />
</root>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root></configuration>
2.4 使用Idea启动项目
在idea的启动配置中进行编辑,添加JVM选项,在JVM选项中加入
-javaagent:skywalking-agent.jar的绝对地址(skywalking-agent.jar在skywalking-agent文件夹中)
启动项目:
此时skywalking页面中就会记录项目运行的日志,并且记录接口的运行时间,可以用来分析接口的处理速度
3. 总结
Springboot与Skywalking的集成过程总的来说比较简单,第一步就是配置Skywalking,第二部配置Java Agent即可
此后可以使用Skywalking来分析哪个接口的执行速度比较慢,由此可以看到SQL的具体执行时间,可以定位到哪个sql出现了问题,有助于解决mysql的慢查询的问题。