1.下载SkyWalking agent和SkyWalking-apm
我这里下载的是agent9.5.0,apm 10.3.0,不兼容jdk22,我用的jdk21,没问题
2.SkyWalking oap(apm里面的)
bash
# OAP Server 的核心功能
功能模块:
- 数据接收:通过 gRPC/HTTP 接收 Agent 上报的数据
- 数据分析:对追踪数据、指标数据进行聚合计算
- 数据存储:将处理后的数据写入 ElasticSearch/MySQL
- 告警管理:根据规则检测异常并触发告警
- 查询服务:为 UI 提供数据查询接口
- 集群管理:支持多节点部署,实现高可用
config/application.yml
bash
# OAP Server 配置
core:
# gRPC 端口(接收 Agent 数据)
gRPCPort: 11800
# HTTP 端口(提供查询接口)
restPort: 12800
storage:
# 使用 ElasticSearch 存储
selector: elasticsearch
elasticsearch:
clusterNodes: 127.0.0.1:9200
alarm:
# 告警规则配置
default:
rules:
service_resp_time_rule:
metrics-name: service_resp_time
threshold: 1000
3.SkyWalking UI(Webapp)(apm里面的)
定位 :SkyWalking 的可视化界面,提供数据展示和查询功能。
bash
# SkyWalking UI 功能
功能模块:
- 服务拓扑图:展示服务间的调用关系
- 追踪查询:查看具体的调用链路
- 指标仪表盘:展示服务性能指标
- 告警列表:查看触发的告警信息
- 日志查询:查看关联的日志数据
- 数据库监控:查看数据库调用情况
前端sky-ui访问路径,默认http://localhost:8080/
4.调整apm里面的配置(config/application.yml)
4.1.nacos
修改默认的服务发现和服务注册的配置,我这里用的nacos,注意要添加/nacos的前缀和修改nacos默认密码成自己的


4.2es储存配置
默认是banyandb这个,但是这个是go语言的,还要下载node和go依赖,我就没用了,就用es,简单一点,修改默认配置和修改es账号密码就好了
检测es是否运行成功
5.启动oap和ui
oap
bash
@echo off
chcp 65001 >nul
echo ========================================
echo 启动 SkyWalking OAP Server
echo ========================================
echo.
cd /d D:\IDEA\skywalking-apm-10.3.0-bin\apache-skywalking-apm-bin\bin
echo 启动 SkyWalking OAP Server...
start "SkyWalking OAP" cmd /k oapService_jdk21.bat
echo.
echo SkyWalking OAP 启动中...
echo OAP gRPC 端口: 11800
echo OAP HTTP 端口: 12800
echo 健康检查: http://localhost:12800/healthcheck
echo ========================================
pause
这里oap的启动bat我自己重新复值写了一个,自己环境jdk版本太高了,换了个jdk路径(jdk21)
oapService_jdk21.bat(这个是agent config下的bat配置 原名 oapService.bat)
bash
@REM
@REM Licensed to the Apache Software Foundation (ASF) under one or more
@REM contributor license agreements. See the NOTICE file distributed with
@REM this work for additional information regarding copyright ownership.
@REM The ASF licenses this file to You under the Apache License, Version 2.0
@REM (the "License"); you may not use this file except in compliance with
@REM the License. You may obtain a copy of the License at
@REM
@REM http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing, software
@REM distributed under the License is distributed on an "AS IS" BASIS,
@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@REM See the License for the specific language governing permissions and
@REM limitations under the License.
@echo off
set "JAVA_HOME=D:\java\JDK\ms-21.0.7"
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%
if defined JAVA_HOME (
set _EXECJAVA="%JAVA_HOME%\bin\java"
)
if not defined JAVA_HOME (
echo "JAVA_HOME not set."
set _EXECJAVA=java
)
start "%OAP_PROCESS_TITLE%" %_EXECJAVA% "%OAP_OPTS%" -cp "%CLASSPATH%" org.apache.skywalking.oap.server.starter.OAPServerStartUp
endlocal
ui
bash
@echo off
chcp 65001 >nul
echo ========================================
echo 启动 SkyWalking UI
echo ========================================
echo.
cd /d D:\IDEA\skywalking-apm-10.3.0-bin\apache-skywalking-apm-bin\bin
echo 启动 SkyWalking UI...
start "SkyWalking UI" cmd /k webappService.bat
echo.
echo SkyWalking UI 启动中...
echo 访问地址: http://localhost:8080
echo ========================================
pause

注意 :之前因为jdk版本和储存配置有问题,这个路径一直访问不了localhost:12800/healthcheck(ui访问oap的后台路径),可以去这个日志这里查看
D:\IDEA\skywalking-apm-10.3.0-bin\apache-skywalking-apm-bin\logs
5.使用agent里面的skywalking-agent.jar来启动项目(easy_dubbo)
5.1为什么要用 Agent.jar?
-
✅ 业务代码与监控代码完全分离
-
✅ 无需重新编译应用
-
✅ 可以随时启用/禁用监控
-
✅ 对业务开发人员完全透明
-
要不然就用到@Trace注解注入到项目里了
-

我这里项目有账号服务,公共服务,订单服务,库存服务,基础的dubbo微服务项目
写了三个bat来启动项目,三个bat如下
order-run.bat
bash
@echo off
chcp 65001 >nul
set "MY_JAVA_HOME=D:\java\JDK\ms-21.0.7"
set "PATH=%MY_JAVA_HOME%\bin;%PATH%"
:: 验证一下当前使用的 Java 版本 (可选,启动时会打印出来)
echo 当前使用的 Java 环境:
java -version
echo ========================================
:: 1. 【关键修复】定义 OAP 地址变量 (IP:端口)
set OAP=127.0.0.1:11800
:: 2. 定义 Agent 路径
set AGENT_PATH=D:\IDEA\skywalking-agent-9.5.0\skywalking-agent\skywalking-agent.jar
:: 3. 定义要启动的服务名称 (必须唯一,不要和 jar 包名搞混)
set SERVICE_NAME=order-service
:: 4. 定义 Jar 包路径
set JAR_PATH=target\order-service-0.0.1-SNAPSHOT.jar
echo ========================================
echo 正在启动:%SERVICE_NAME%
echo OAP 地址:%OAP%
echo Agent 路径:%AGENT_PATH%
echo ========================================
:: 5. 启动命令 (注意 %OAP% 现在是有值的了)
java -javaagent:%AGENT_PATH% ^
-Dskywalking.agent.service_name=%SERVICE_NAME% ^
-Dskywalking.collector.backend_service=%OAP% ^
-jar %JAR_PATH%
pause
run-inventory.bat
bash
@echo off
chcp 65001 >nul
set "MY_JAVA_HOME=D:\java\JDK\ms-21.0.7"
set "PATH=%MY_JAVA_HOME%\bin;%PATH%"
:: 验证一下当前使用的 Java 版本 (可选,启动时会打印出来)
echo 当前使用的 Java 环境:
java -version
echo ========================================
:: 1. 【关键修复】定义 OAP 地址变量 (IP:端口)
set OAP=127.0.0.1:11800
:: 2. 定义 Agent 路径
set AGENT_PATH=D:\IDEA\skywalking-agent-9.5.0\skywalking-agent\skywalking-agent.jar
:: 3. 定义要启动的服务名称 (必须唯一,不要和 jar 包名搞混)
set SERVICE_NAME=order-service
:: 4. 定义 Jar 包路径
set JAR_PATH=target\order-service-0.0.1-SNAPSHOT.jar
echo ========================================
echo 正在启动:%SERVICE_NAME%
echo OAP 地址:%OAP%
echo Agent 路径:%AGENT_PATH%
echo ========================================
:: 5. 启动命令 (注意 %OAP% 现在是有值的了)
java -javaagent:%AGENT_PATH% ^
-Dskywalking.agent.service_name=%SERVICE_NAME% ^
-Dskywalking.collector.backend_service=%OAP% ^
-jar %JAR_PATH%
pause
run-account.bat
bash
@echo off
chcp 65001 >nul
set "MY_JAVA_HOME=D:\java\JDK\ms-21.0.7"
set "PATH=%MY_JAVA_HOME%\bin;%PATH%"
:: 验证一下当前使用的 Java 版本 (可选,启动时会打印出来)
echo 当前使用的 Java 环境:
java -version
echo ========================================
:: 1. 【关键修复】定义 OAP 地址变量 (IP:端口)
set OAP=127.0.0.1:11800
:: 2. 定义 Agent 路径
set AGENT_PATH=D:\IDEA\skywalking-agent-9.5.0\skywalking-agent\skywalking-agent.jar
:: 3. 定义要启动的服务名称 (必须唯一,不要和 jar 包名搞混)
set SERVICE_NAME=account-service
:: 4. 定义 Jar 包路径
set JAR_PATH=target\account-service-0.0.1-SNAPSHOT.jar
echo ========================================
echo 正在启动:%SERVICE_NAME%
echo OAP 地址:%OAP%
echo Agent 路径:%AGENT_PATH%
echo ========================================
:: 5. 启动命令 (注意 %OAP% 现在是有值的了)
java -javaagent:%AGENT_PATH% ^
-Dskywalking.agent.service_name=%SERVICE_NAME% ^
-Dskywalking.collector.backend_service=%OAP% ^
-jar %JAR_PATH%
pause
6.seata.bat
bash
@echo off
title Seata Server Launcher
echo ========================================
echo Seata Server Startup Script
echo ========================================
echo.
:: 设置Seata服务端所在目录(请根据实际情况修改)
set SEATA_HOME=D:\IDEA\apache-seata-2.3.0-incubating-bin\apache-seata-2.3.0-incubating-bin\seata-server
:: 检查目录是否存在
if not exist "%SEATA_HOME%" (
echo [错误] 找不到Seata安装目录:
echo %SEATA_HOME%
echo.
echo 请检查路径是否正确,然后重新运行本脚本。
pause
exit /b 1
)
:: 检查seata-server.bat是否存在
if not exist "%SEATA_HOME%\bin\seata-server.bat" (
echo [错误] 找不到 seata-server.bat 文件
echo 路径:%SEATA_HOME%\bin\seata-server.bat
pause
exit /b 1
)
:: 切换到bin目录并启动Seata服务端
echo [信息] 正在启动 Seata Server ...
echo [信息] 工作目录:%SEATA_HOME%\bin
echo.
cd /d "%SEATA_HOME%\bin"
:: 执行启动脚本,将参数传递给seata-server.bat
call seata-server.bat %*
:: 如果上面脚本执行失败,暂停窗口
if errorlevel 1 (
echo.
echo [错误] Seata Server 启动失败
pause
exit /b 1
)
pause
7.调用接口实现sky链路追踪
主界面如下,我的三个服务

支持的服务,我这里只用到了es,数据库(mysql)

支持虚拟数据库
支持类似普罗米修斯和Granfan的仪表盘

支持集群配置,保证高并发情况下的链路追踪监控
观察请求经过各个服务的请求耗时
请求经过服务路径
这里我调用order服务的接口实现,订单储存,仓库扣减,账号扣减,实现三个服务的联通

对应sky-ui结果如下:
首先目录显示如下:

如果sky链路结果如下:
右上角为时间,左边是这个请求经过的地方,从红的,http请求发起的order服务,然后到下游的账号和库存服务进行扣减,包含dubbo的调用和mysql的连接关闭调用时长等。

小结:我这里实际上运行了八个,微服务bat三个,es一个,nacos一个,seata一个,sky-oap一个,sky-ui界面一个!!!