Spring Cloud 接入 SkyWalking 小记
编辑前言
Spring Cloud 项目接入 SkyWalking 记录。
版本
服务 | 版本 |
---|---|
Java | 21.0.3 |
skywalking-apm | 10.0.1 |
skywalking-java-agent | 9.2.0 |
关注点一:JDK版本适配
根据官方描述,这个版本的 SkyWalking 要求 Java 11/17/21,要适配
那么意味着:
- 如果你的 JDK 环境变量是三者之一,那就跳过这一节
- 如果不是,那你
- 要么调整环境变量
- 要么修改启动脚本指定Java版本
如果你启动 SkyWalking 就闪退,那大概率就是 JDK 版本不适配的问题。
如果你和我一样,在本地调试,存在多个版本的 JDK ,那还是别改环境变量的好。
你需要修改两个启动脚本,_EXECJAVA
直接指定 Java 工作目录
oapService.bat
@echo off
setlocal
set OAP_PROCESS_TITLE=Skywalking-Collector
set OAP_HOME=%~dp0%..
set OAP_OPTS="-Xms256M -Xmx512M -Doap.logDir=%OAP_HOME%\logs"
set CLASSPATH=%OAP_HOME%\config;.;
set CLASSPATH=%OAP_HOME%\oap-libs\*;%CLASSPATH%
set _EXECJAVA="D:\soft\Java21\jdk-21.0.3\bin\java"
start "%OAP_PROCESS_TITLE%" %_EXECJAVA% "%OAP_OPTS%" -cp "%CLASSPATH%" org.apache.skywalking.oap.server.starter.OAPServerStartUp
endlocal
webappService.bat
@echo off
setlocal
set WEBAPP_PROCESS_TITLE=Skywalking-Webapp
set WEBAPP_HOME=%~dp0%..
set JARPATH=%WEBAPP_HOME%\webapp
set WEBAPP_LOG_DIR=%WEBAPP_HOME%\logs
if not exist "%WEBAPP_LOG_DIR%" (
mkdir "%WEBAPP_LOG_DIR%"
)
set _EXECJAVA="D:\soft\Java21\jdk-21.0.3\bin\java"
start "%WEBAPP_PROCESS_TITLE%" %_EXECJAVA% -Dwebapp.logDir=%WEBAPP_LOG_DIR% -cp %JARPATH%/skywalking-webapp.jar;%JARPATH% org.apache.skywalking.oap.server.webapp.ApplicationStartUp
endlocal
OK,这里就配完了。这里是 Win 环境,你如果是 Linux 就改对应的 .sh
脚本,不过正经人都不会在 Linux 配多个 JDK 版本,忽略不计~
到这就可以 startup.bat
启动 SkyWalking 服务了。
默认是 H2
存储,Demo 小样无所谓,如果你想用 MySQL
那就去改 config/application.yml
storage:
selector: ${SW_STORAGE:mysql}
mysql:
properties:
jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest?rewriteBatchedStatements=true&allowMultiQueries=true&allowPublicKeyRetrieval=true"}
dataSource.user: ${SW_DATA_SOURCE_USER:root}
dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root}
dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}
dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}
dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}
dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}
metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000}
maxSizeOfBatchSql: ${SW_STORAGE_MAX_SIZE_OF_BATCH_SQL:2000}
asyncBatchPersistentPoolSize: ${SW_STORAGE_ASYNC_BATCH_PERSISTENT_POOL_SIZE:4}
数据库连接配上,然后建库,它会自己刷数据表你不用管。小 Tip 你要自己找 MySQL JDBC 包丢到 oap-lib
目录。
如果你想要 Elasticsearch
读读官网吧~
新推出了一个 BanyanDB
谁去试试呀~
关注点二:agent
把 skywalking-java-agent
一整个拉到你需要收集链路的服务机器上,启动服务时候加探针
java
-javaagent:/path/xxx/skywalking-agent/skywalking-agent.jar
-Dskywalking.agent.service_name=app_name
-Dskywalking.collector.backend_service=127.0.0.1:11800
-jar xxx.jar
skywalking.agent.service_name
注册到 SkyWalking 上的服务名称
skywalking.collector.backend_service
SkyWalking 收集上报地址
在 idea 调试同理加上启动参数即可
关注点三:WebFlux
需要注意的是,默认没有支持收集 WebFlux
环境。
我们知道 spring-cloud-gateway
是 WebFlux 环境的,需要在 optional-plugins
目录找到 apm-spring-cloud-gateway-4.x-plugin-9.2.0.jar
插件,复制到 plugins
目录,重启下 Gateway 即可。
到这里,自己刷一刷请求,就可以到面板观察请求链路~
完。
- 1
- 0
-
分享