当前位置: 首页 > ds >正文

Springboot应用如何与SkyWalking集成,并使用Docker进行发布

Springboot 应用与SkyWalking 集成,并使用 Docker 进行发布的完整步骤。整个过程分为两大部分:搭建 SkyWalking 后端与 UI集成并发布 Spring Boot 应用

方案概览

在这里插入图片描述

我们将使用两个 Docker 容器(或两个 Docker Compose 服务):

  1. skywalking-oap-server: 负责接收、聚合、分析链路和指标数据。
  2. skywalking-ui: 提供图形化界面用于查看数据。
  3. your-spring-boot-app: 应用容器,通过 Java Agent 将数据上报到 skywalking-oap-server

第一部分:搭建 SkyWalking 后台 (使用 Docker Compose)

这是最推荐的方式,可以快速搭建一套 SkyWalking 环境。

1. 创建 docker-compose.yml 文件

创建一个目录,例如 skywalking-docker,然后创建 docker-compose.yml 文件。

version: '3.8'
services:# SkyWalking OAP 服务器skywalking-oap:image: apache/skywalking-oap-server:9.7.0container_name: skywalking-oaprestart: alwaysports:- "11800:11800"   # 接收 Agent 上报数据的 gRPC 端口- "12800:12800"   # 接收 Agent 上报数据的 HTTP 端口environment:- SW_STORAGE=elasticsearch7  # 存储类型,也可选用 elasticsearch8, h2, mysql 等- SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 # ES 地址,这里用服务名depends_on:- elasticsearchnetworks:- skywalking-network# SkyWalking Web UIskywalking-ui:image: apache/skywalking-ui:9.7.0container_name: skywalking-uirestart: alwaysports:- "8080:8080"     # Web 界面访问端口environment:- SW_OAP_ADDRESS=skywalking-oap:12800 # 告诉 UI 后端 OAP 的地址depends_on:- skywalking-oapnetworks:- skywalking-network# 可选的 Elasticsearch 服务(如果不想用外部的 ES)elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:7.17.10container_name: es-serverrestart: alwaysenvironment:- discovery.type=single-node- xpack.security.enabled=false- "ES_JAVA_OPTS=-Xms512m -Xmx512m"ports:- "9200:9200"networks:- skywalking-networknetworks:skywalking-network:driver: bridge
2. 启动 SkyWalking 后台

在包含 docker-compose.yml 的目录下运行:

docker-compose up -d

等待所有容器启动后,你可以通过 http://localhost:8080 访问 SkyWalking UI。初始状态没有应用数据,UI 界面是空的。

注意:如果宿主机已经安装了 Elasticsearch,可以删除 elasticsearch 服务,并将 SW_STORAGE_ES_CLUSTER_NODES 环境变量改为已有ES 地址(例如 host.docker.internal:9200 或服务器 IP)。

第二部分:集成 SkyWalking Agent 并发布 Spring Boot 应用

Spring Boot 应用通过 Java Agent 的方式与 SkyWalking 集成,无需修改任何代码。

1. 获取 SkyWalking Java Agent

你需要下载 SkyWalking Agent,有两种方式:

方式一:直接下载(推荐)
从 SkyWalking Apache 下载页 下载对应的 Agent 压缩包(例如 apache-skywalking-java-agent-8.20.0.tgz),解压后得到 agent 目录。

方式二:使用 Docker 镜像中的 Agent(更适用于 Docker 环境)
你可以直接使用 apache/skywalking-oap-server 镜像中的 Agent,它位于 /skywalking/agent 目录。这是我们下面在 Dockerfile 中会用到的方式。

2. 创建 Dockerfile 集成 Agent

Spring Boot 应用的 Dockerfile 需要将 Agent 拷贝到镜像中,并在启动命令中通过 -javaagent 参数启用它。

# 基础镜像
FROM eclipse-temurin:17-jre as builder
WORKDIR /app# 从 apache/skywalking-oap-server 镜像中复制 agent 到当前镜像
# 这避免了手动下载,确保 Agent 与 OAP Server 版本兼容
COPY --from=apache/skywalking-oap-server:9.7.0 /skywalking/agent /skywalking/agent# 拷贝 Spring Boot Jar 包(假设 jar 包在构建上下文目录)
COPY target/your-spring-boot-app.jar app.jar# 启动命令,关键是指定 javaagent 参数
ENTRYPOINT ["java", \"-javaagent:/skywalking/agent/skywalking-agent.jar", \  # 指定 Agent Jar 包路径"-Dskywalking.agent.service_name=your-application-name", \ # 在 SkyWalking 中注册的服务名"-Dskywalking.collector.backend_service=host.docker.internal:11800", \ # 告诉 Agent OAP 服务器的地址"-jar", \"/app/app.jar"]ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar upgrade.jar ${JAR_OPTS}

参数解释:

  • -javaagent:/skywalking/agent/skywalking-agent.jar: 启用 SkyWalking Agent。

  • -Dskywalking.agent.service_name=your-application-name: 重要:设置应用在 SkyWalking 中显示的名字,例如 user-service, order-service

  • -Dskywalking.collector.backend_service=host.docker.internal:11800
    

    重要:告诉 Agent 将数据上报到哪里。

    • host.docker.internal 是 Docker 的一个特殊 DNS,指向宿主机的 IP。这在 Mac/Windows 的 Docker Desktop 中有效。
    • 如果 SkyWalking OAP 和 Spring Boot 应用都在同一个 Docker Compose 中,你应该使用 服务名内部端口,例如 -Dskywalking.collector.backend_service=skywalking-oap:11800
    • 如果在 Linux 服务器或生产环境中,请使用真实的 OAP 服务器 IP 或域名。
3. 构建并运行 Spring Boot 应用容器
  1. 构建镜像:在 Spring Boot 项目根目录(包含 Dockerfile 和 jar 包的地方)运行:

    docker build -t your-spring-boot-app:latest .
    
  2. 运行容器

    • 如果使用同一个 Docker Compose(推荐)
      将应用服务添加到之前的 docker-compose.yml 中:

      services:# ... (之前的 skywalking-oap, skywalking-ui, elasticsearch 服务)your-spring-boot-app:build: context: /path/to/your/spring-boot-app # 指向应用目录container_name: your-spring-boot-apprestart: alwaysports:- "8081:8080" # 暴露应用端口environment:- SW_AGENT_COLLECTOR_BACKEND_SERVICES=skywalking-oap:11800 # 也可以通过环境变量覆盖后端地址networks:- skywalking-networkdepends_on:- skywalking-oap
      

      然后运行 docker-compose up -d 来同时启动所有服务(SkyWalking 基础设施 + 应用)。

    • 如果单独运行

      docker run -d \--name your-app \-p 8080:8080 \-e SW_AGENT_COLLECTOR_BACKEND_SERVICES=host.docker.internal:11800 \your-spring-boot-app:latest
      

      确保 host.docker.internal 能正确解析到运行着 skywalking-oap 容器的主机。

验证与查看

  1. 访问 Spring Boot 应用,触发几个接口调用。
  2. 打开浏览器,访问 SkyWalking UI:http://localhost:8080
  3. 在主页的服务下拉框中,你应该能看到你配置的服务名(例如 your-application-name)。
  4. 点击搜索按钮,稍等片刻(约1-2分钟),就能看到应用的拓扑图、链路追踪(Traces)和指标(Metrics)等信息。

常见问题排查 (Troubleshooting)

  • 在 UI 中看不到数据
    • 检查 skywalking-oapelasticsearch 容器日志是否有错误:docker logs skywalking-oap
    • 检查应用容器日志,确认 Agent 是否成功启动,并且没有连接 backend_service 的错误。
    • 确保 -Dskywalking.collector.backend_service 的地址和端口是正确的,并且网络是通的。
    • 在 Docker Compose 网络中,使用服务名;在宿主机单独部署时,使用 host.docker.internal 或宿主机 IP。
  • Agent 版本兼容性:确保 Java Agent 的版本与 OAP Server 的版本一致或兼容(主版本号相同通常可以)。

按照以上步骤,就可以成功地将 Spring Boot 应用与 SkyWalking 集成并通过 Docker 发布。

http://www.xdnf.cn/news/18903.html

相关文章:

  • Python爬虫实战:研究amazon-scrapy,构建亚马逊电商数据采集和分析系统
  • 扣子智能体商业化卡在哪?井云系统自动化交易+私域管理,闭环成交全流程拆解
  • 小程序开发指南(四)(UI 框架整合)
  • 机器视觉的3C玻璃盖板丝印应用
  • three.js+WebGL踩坑经验合集(8.3):合理设置camera.near和camera.far缓解实际场景中的z-fighting叠面问题
  • 如何在IDEA中使用Git
  • MyBatis-Plus 快速入门 -常用注解
  • 使用阿里云实现短信注册
  • SAVITECH盛微先进SAVIAUDIO音频解码芯片方案与应用
  • ValueTask 实战指南:解锁 .NET 异步编程的性能秘密
  • window显示驱动开发—混合系统 DDI 和 dList DLL 支持
  • 【P2P】P2P主要技术及RELAY服务实现
  • mac设置鼠标滚轮方向
  • 让清洁更智能,让城市更美好
  • 20、DMA----释放CPU压力,加快传输
  • 无人机航拍数据集|第30期 无人机腰果成熟度目标检测YOLO数据集3098张yolov11/yolov8/yolov5可训练
  • Day8--HOT100--160. 相交链表,206. 反转链表,234. 回文链表,876. 链表的中间结点
  • 艾利特石油管道巡检机器人:工业安全的智能守护者
  • 高通平台wifi--p2p issue
  • leetcode 17.04 消失的数字
  • 理解Vuex的辅助函数,分析mapState、mapGetters、mapMutations和mapActions各个应用场景
  • SQL 语句拼接在 C 语言中的实现与安全性分析
  • 大模型应用实战:构建企业知识库 RAG 系统(含权限控制 + 多轮对话)
  • 无线USB转换器TOS-WLink网盘更新--TOS-WLink使用帮助V1.0.pdf
  • 【C++游记】List的使用和模拟实现
  • 矩阵系统源代码开发,支持OEM贴牌
  • 5G与6G技术演进与创新对比分析
  • 我们为你连接网络,安装驱动程序
  • 车载诊断架构 --- DTC Event与DTC Status的对应关系
  • AWS ECS 成本优化完整指南:从分析到实施的最佳实践