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

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.dtcms.com/a/349948.html

相关文章:

  • 深入理解Linux进程程序替换:从原理到实践
  • Elasticsearch JVM调优:核心参数与关键技巧
  • Git克隆时遇到“Filename too long“错误的完美解决方案
  • 代理设计模式
  • 俄罗斯情报机构推出新型安卓恶意软件,伪装成杀毒软件
  • SciPy科学计算与应用:SciPy入门与应用-科学计算与NumPy协同实践
  • 工业异常检测大模型(1)数据集、方法
  • 【git使用场景】本地仓库与远程仓库存在独立历史
  • Vulkan 学习路线图
  • Git 怎么仓库迁移?error: remote origin already exists.怎么解决
  • 定时器的原理
  • TensorFlow 深度学习 | Dataset API 数据读取详解
  • Open3D入门指南:3D数据处理与可视化利器
  • 初识神经网络——《深度学习入门:基于Python的理论与实现》
  • 昆仑万维开源 Matrix-3D大模型,正在开启“造物主”模式
  • 【智慧城市】2025年中国地质大学(武汉)暑期实训优秀作品(2):智慧城市西安与一带一路
  • pytest 并发执行用例(基于受限的测试资源)
  • imx6ull-驱动开发篇40——Linux RTC 驱动简介
  • 一道MySQL笔试题: 输出 100 以内质数
  • VIVO/OPPO手机,显示5G开关
  • 【SystemUI】锁屏来通知默认亮屏Wake模式
  • Mac 菜单栏多合一工具自荐:FancyTool
  • LeetCode算法日记 - Day 22: 提莫攻击、Z字形变换
  • 电影感人文街拍摆摊纪实摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • 从手术室到街头摄像头:多模态融合如何让AI“看得懂”万物?
  • 搭建ftp服务器(主动模式,被动模式)
  • Canvas 动态高度文本图片生成器
  • Linux 详谈Ext系列⽂件系统(一)
  • 嵌入式(ARM方向)面试常见问题及解答
  • 【ARM】MDK在debug模式下断点的类型