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

相关推荐
Darkdreams3 天前
分布式监控Skywalking安装及使用教程(保姆级教程)
分布式·skywalking
zhglhy8 天前
Apache SkyWalking分布式链路实现
分布式·apache·skywalking
飞火流星020271 个月前
SkyWalking异步日志采集数据压缩从头到尾实现及踩坑笔记
skywalking·skywalking日志采集·skywalking日志压缩·macos上验证sw日志压缩·sw异步采集日志实现数据压缩
叱咤少帅(少帅)1 个月前
Skywalking v10.x 部署
skywalking
EQylwUYz1 个月前
基于DDPG算法优化四旋翼飞行器PD控制:从理论到Matlab实现
skywalking
dfyx9991 个月前
SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪
spring boot·后端·skywalking
_运维那些事儿2 个月前
skywalking链路追踪
java·运维·ci/cd·软件构建·skywalking·devops
虫小宝2 个月前
淘客返利系统的日志追踪与链路监控:SkyWalking 与 OpenTelemetry 集成方案
c#·linq·skywalking
shepherd1262 个月前
深度剖析SkyWalking:从内核原理到生产级全链路监控实战
分布式·后端·skywalking