首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从0到1搭建Spring Boot 开发脚手架之集成部署与监控

从0到1搭建Spring Boot 开发脚手架之集成部署与监控

作者头像
紫风
发布2025-10-14 15:25:55
发布2025-10-14 15:25:55
700
代码可运行
举报
运行总次数:0
代码可运行

详细细化一下后续步骤中的部署与监控: 使用Docker打包应用。 配置Prometheus + Grafana监控面板。希望能给大家带来帮助。

使用Docker打包应用与配置监控(详细教程)

1. Docker化Spring Boot应用
1.1 为每个服务编写Dockerfile

以下以 scaffold-user 模块为例,其他服务(如网关、认证中心)操作相同。

scaffold-user 模块根目录创建 Dockerfile

代码语言:javascript
代码运行次数:0
运行
复制
# 第一阶段:构建应用(使用Maven镜像)
FROM maven:3.8.6-jdk-17 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests

# 第二阶段:运行应用(使用轻量级JRE)
FROM openjdk:17-jdk-slim
WORKDIR /app
# 复制构建产物
COPY --from=build /app/target/*.jar ./app.jar
# 暴露端口
EXPOSE 8081
# 启动命令(带actuator健康检查)
ENTRYPOINT ["java", "-jar", "app.jar", "--spring.profiles.active=prod"]

构建镜像

代码语言:javascript
代码运行次数:0
运行
复制
docker build -t scaffold-user:1.0.0 .

1.2 编写docker-compose.yml(一键部署)

在项目根目录创建 docker-compose.yml,集成所有依赖服务和监控组件:

代码语言:javascript
代码运行次数:0
运行
复制
version: '3.8'

services:
  # ---------- 基础设施服务 ----------
  mysql:
    image: mysql:8.0
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: scaffold
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
    networks:
      - scaffold-net

  redis:
    image: redis:7.0
    container_name: redis
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    networks:
      - scaffold-net

  nacos:  # 若使用Nacos作为配置中心
    image: nacos/nacos-server:v2.2.0
    container_name: nacos
    ports:
      - "8848:8848"
    environment:
      MODE: standalone
    networks:
      - scaffold-net

  # ---------- 业务服务 ----------
  gateway:
    image: scaffold-gateway:1.0.0
    container_name: gateway
    ports:
      - "8888:8888"
    depends_on:
      - mysql
      - redis
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/scaffold?useSSL=false
      SPRING_REDIS_HOST: redis
    networks:
      - scaffold-net

  user-service:
    image: scaffold-user:1.0.0
    container_name: user-service
    ports:
      - "8081:8081"
    depends_on:
      - mysql
      - redis
    networks:
      - scaffold-net

  # ---------- 监控服务 ----------
  prometheus:
    image: prom/prometheus:v2.44.0
    container_name: prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    networks:
      - scaffold-net

  grafana:
    image: grafana/grafana:10.1.5
    container_name: grafana
    ports:
      - "3000:3000"
    volumes:
      - grafana_data:/var/lib/grafana
    depends_on:
      - prometheus
    networks:
      - scaffold-net

# 定义网络和卷
volumes:
  mysql_data:
  redis_data:
  grafana_data:

networks:
  scaffold-net:
    driver: bridge

2. 配置Prometheus监控
2.1 创建Prometheus配置文件

在项目根目录创建 prometheus.yml

代码语言:javascript
代码运行次数:0
运行
复制
global:
  scrape_interval: 15s  # 抓取间隔

scrape_configs:
  - job_name: 'user-service'
    metrics_path: '/actuator/prometheus'  # Spring Boot Actuator端点
    static_configs:
      - targets: ['user-service:8081']  # 监控目标地址(Docker内网通信)

  - job_name: 'gateway'
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['gateway:8888']

  - job_name: 'redis'
    static_configs:
      - targets: ['redis:6379']  # 需额外配置Redis Exporter

  - job_name: 'mysql'
    static_configs:
      - targets: ['mysql:3306']  # 需额外配置MySQL Exporter
2.2 在Spring Boot中暴露监控端点

每个服务模块的 application.yml 添加:

代码语言:javascript
代码运行次数:0
运行
复制
management:
  endpoints:
    web:
      exposure:
        include: "*"  # 暴露所有监控端点
  metrics:
    tags:
      application: ${spring.application.name}  # 添加应用标签
  endpoint:
    health:
      show-details: always

3. 配置Grafana可视化
3.1 启动所有服务
代码语言:javascript
代码运行次数:0
运行
复制
# 进入项目根目录
docker-compose up -d
3.2 登录Grafana
  1. 访问 http://localhost:3000,默认账号密码:admin/admin
  2. 添加数据源
    • 类型选择 Prometheus
    • URL填写 http://prometheus:9090(Docker内网地址)
3.3 导入Dashboard模板
  1. 下载Spring Boot仪表盘模板
  2. 导入模板
    • 在Grafana侧边栏选择 Dashboards → Import,上传JSON文件或输入ID 11378
  3. 查看监控数据
    • 仪表盘将展示JVM内存、线程数、HTTP请求等指标。

4. 高级监控配置(可选)
4.1 监控MySQL和Redis

部署Exporter

docker-compose.yml 中添加:

代码语言:javascript
代码运行次数:0
运行
复制
redis-exporter:
  image: oliver006/redis_exporter:v1.55.0
  ports:
    - "9121:9121"
  command: --redis.addr redis://redis:6379
  networks:
    - scaffold-net

mysql-exporter:
  image: prom/mysqld-exporter:v0.15.0
  ports:
    - "9104:9104"
  environment:
    DATA_SOURCE_NAME: "root:root@(mysql:3306)/scaffold"
  networks:
    - scaffold-net

更新Prometheus配置

代码语言:javascript
代码运行次数:0
运行
复制
- job_name: 'redis-exporter'
  static_configs:
    - targets: ['redis-exporter:9121']

- job_name: 'mysql-exporter'
  static_configs:
    - targets: ['mysql-exporter:9104']
4.2 配置告警规则

在Prometheus中添加告警规则

代码语言:javascript
代码运行次数:0
运行
复制
# prometheus.yml
rule_files:
  - alerts.yml

# 创建alerts.yml
groups:
- name: spring-boot-alerts
  rules:
  - alert: HighErrorRate
    expr: sum(rate(http_server_requests_seconds_count{status!~'2..'}[5m])) / sum(rate(http_server_requests_seconds_count[5m])) > 0.5
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "高错误率报警 (实例 {{ $labels.instance }})"

5. 验证部署与监控

访问服务

代码语言:javascript
代码运行次数:0
运行
复制
curl http://localhost:8888/api/user/info

查看日志

代码语言:javascript
代码运行次数:0
运行
复制
docker logs -f user-service

观察Grafana仪表盘

  • 确认 JVM内存使用请求延迟 等指标正常更新。

6. 生产环境优化建议
  1. 镜像优化
    • 使用 jlink 裁剪JRE,减少镜像体积。
    • 多阶段构建分离编译与运行环境。
  2. 安全加固
    • 为Docker容器设置非root用户运行。
    • 使用 --read-only 挂载只读文件系统。
  3. 集群部署
    • 使用 docker swarmKubernetes 替代单机docker-compose。
    • 为Prometheus配置持久化存储(如挂载NFS卷)。

通过以上步骤,您已完成 Docker化部署全链路监控 配置,开发人员可通过Grafana实时掌握系统健康状态。

本篇的分享就到这里了,感谢观看,如果对你有帮助,别忘了点赞+收藏+关注。 后续将继续把后续步骤继续完善,有什么遗漏、或者对什么功能有缺失的可以评论区,指出来,共同成长共同进步。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用Docker打包应用与配置监控(详细教程)
    • 1. Docker化Spring Boot应用
      • 1.1 为每个服务编写Dockerfile
      • 1.2 编写docker-compose.yml(一键部署)
    • 2. 配置Prometheus监控
      • 2.1 创建Prometheus配置文件
      • 2.2 在Spring Boot中暴露监控端点
    • 3. 配置Grafana可视化
      • 3.1 启动所有服务
      • 3.2 登录Grafana
      • 3.3 导入Dashboard模板
    • 4. 高级监控配置(可选)
      • 4.1 监控MySQL和Redis
      • 4.2 配置告警规则
    • 5. 验证部署与监控
    • 6. 生产环境优化建议
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档