详细细化一下后续步骤中的部署与监控: 使用Docker打包应用。 配置Prometheus + Grafana监控面板。希望能给大家带来帮助。
以下以 scaffold-user
模块为例,其他服务(如网关、认证中心)操作相同。
在 scaffold-user
模块根目录创建 Dockerfile
:
# 第一阶段:构建应用(使用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"]
构建镜像:
docker build -t scaffold-user:1.0.0 .
在项目根目录创建 docker-compose.yml
,集成所有依赖服务和监控组件:
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
在项目根目录创建 prometheus.yml
:
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
每个服务模块的 application.yml
添加:
management:
endpoints:
web:
exposure:
include: "*" # 暴露所有监控端点
metrics:
tags:
application: ${spring.application.name} # 添加应用标签
endpoint:
health:
show-details: always
# 进入项目根目录
docker-compose up -d
http://localhost:3000
,默认账号密码:admin/admin
。
http://prometheus:9090
(Docker内网地址)
11378
(Spring Boot监控模板)。
11378
。
部署Exporter:
在 docker-compose.yml
中添加:
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配置:
- job_name: 'redis-exporter'
static_configs:
- targets: ['redis-exporter:9121']
- job_name: 'mysql-exporter'
static_configs:
- targets: ['mysql-exporter:9104']
在Prometheus中添加告警规则:
# 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 }})"
访问服务:
curl http://localhost:8888/api/user/info
查看日志:
docker logs -f user-service
观察Grafana仪表盘:
jlink
裁剪JRE,减少镜像体积。
--read-only
挂载只读文件系统。
docker swarm
或 Kubernetes
替代单机docker-compose。
通过以上步骤,您已完成 Docker化部署 和 全链路监控 配置,开发人员可通过Grafana实时掌握系统健康状态。
本篇的分享就到这里了,感谢观看,如果对你有帮助,别忘了点赞+收藏+关注。 后续将继续把后续步骤继续完善,有什么遗漏、或者对什么功能有缺失的可以评论区,指出来,共同成长共同进步。