SkyWalking链路追踪安装和使用

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界面一个!!!

相关推荐
洒满阳光的午后2 天前
我做了一个“能理解业务语义”的可观测性 MCP Server:统一接入 Prometheus、OpenObserve 和 SkyWalking
人工智能·ai·prometheus·skywalking·openobserve·mcp
梵得儿SHI2 天前
SpringCloud 实战落地:可观测性建设(SkyWalking + Prometheus + Grafana)从 0 到 1 生产级部署
grafana·prometheus·springcloud·skywalking·微服务可观测性·线上问题排查
Jinkxs4 天前
SkyWalking - Spring Cloud Alibaba 全链路追踪实战
skywalking
烛之武5 天前
Skywalking服务链路追踪与Jemeter压力测试
压力测试·skywalking
鬼先生_sir6 天前
Spring Cloud 微服务监控实战:SkyWalking + Prometheus+Grafana 全栈解决方案
运维·spring cloud·grafana·prometheus·skywalking
dgvri11 天前
Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
spring boot·后端·skywalking
rOuN STAT12 天前
Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
spring boot·后端·skywalking
危笑ioi12 天前
helm部署skywalking链路追踪 java
java·开发语言·skywalking
MmeD UCIZ13 天前
Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
spring boot·后端·skywalking
专注API从业者13 天前
淘宝 API 调用链路追踪实战:基于 SkyWalking/Pinpoint 的全链路监控搭建
大数据·开发语言·数据库·skywalking