All checks were successful
Publish to Confluence / confluence (push) Successful in 57s
5.7 KiB
5.7 KiB
以下是监控 Spring Boot 业务服务的 请求成功率、失败率、核心接口 RTT(往返时间) 的完整方案,使用 开源工具栈(Prometheus + Grafana) 实现指标采集、存储和可视化:
一、监控方案架构
graph TD
A[Spring Boot 应用] -->|暴露指标| B(Prometheus)
B -->|存储/查询| C(Grafana)
C -->|展示| D[监控大盘]
二、具体步骤
1. 集成监控指标库(Micrometer)
Spring Boot 原生支持 Micrometer 作为指标采集库,需添加依赖并配置 Prometheus 格式的指标暴露。
1.1 添加依赖(pom.xml)
<!-- Spring Boot Actuator(核心指标) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- Prometheus 格式指标暴露 -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
1.2 配置指标暴露(application.yml)
management:
endpoints:
web:
exposure:
include: health,info,prometheus # 暴露 Prometheus 端点
metrics:
tags:
application: ${spring.application.name} # 添加应用标签
2. 部署 Prometheus 抓取指标
2.1 Prometheus 配置(prometheus.yml)
scrape_configs:
- job_name: 'spring-boot-apps'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['your-spring-boot-app:8080'] # 应用地址
relabel_configs:
- source_labels: [__address__]
target_label: instance
- source_labels: [__metrics_path__]
target_label: metrics_path
2.2 启动 Prometheus
docker run -d --name prometheus \
-p 9090:9090 \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
3. 核心指标采集
3.1 HTTP 请求成功率/失败率
Micrometer 自动采集的指标 http_server_requests_seconds_count
和 http_server_requests_seconds_sum
,通过状态码区分成功/失败。
成功率计算公式(PromQL)
sum(rate(http_server_requests_seconds_count{application="your-app", status!~"5.."}[5m]))
/
sum(rate(http_server_requests_seconds_count{application="your-app"}[5m]))
失败率计算公式(PromQL)
sum(rate(http_server_requests_seconds_count{application="your-app", status=~"5.."}[5m]))
/
sum(rate(http_server_requests_seconds_count{application="your-app"}[5m]))
3.2 核心接口 RTT(平均响应时间)
avg(rate(http_server_requests_seconds_sum{application="your-app", uri="/api/core"}[5m]))
/
avg(rate(http_server_requests_seconds_count{application="your-app", uri="/api/core"}[5m]))
4. 配置 Grafana 监控大盘
4.1 添加 Prometheus 数据源
- 访问
http://grafana-server:3000
,登录后进入 Configuration > Data Sources。 - 选择 Prometheus,填写 URL(如
http://prometheus:9090
)。
4.2 导入 Spring Boot 监控模板
- 访问 Grafana 仪表盘市场,搜索 "Spring Boot"。
- 选择模板(如 ID: 11378),复制 ID。
- 在 Grafana 中进入 Create > Import,输入 ID 完成导入。
4.3 自定义核心指标面板
成功率/失败率(百分比仪表盘)
# 成功率
(sum(rate(http_server_requests_seconds_count{status!~"5.."}[5m])) by (application)
/
(sum(rate(http_server_requests_seconds_count{}[5m])) by (application))
* 100
# 失败率
(sum(rate(http_server_requests_seconds_count{status=~"5.."}[5m])) by (application)
/
(sum(rate(http_server_requests_seconds_count{}[5m])) by (application))
* 100
接口 RTT(折线图)
# 平均响应时间(毫秒)
avg(rate(http_server_requests_seconds_sum{uri="/api/core"}[5m])) by (uri)
/
avg(rate(http_server_requests_seconds_count{uri="/api/core"}[5m])) by (uri)
* 1000
5. 告警配置(可选)
5.1 在 Prometheus 中设置告警规则
# alert.rules.yml
groups:
- name: spring-boot-alerts
rules:
- alert: HighErrorRate
expr: |
sum(rate(http_server_requests_seconds_count{status=~"5.."}[5m])) by (application)
/
sum(rate(http_server_requests_seconds_count{}[5m])) by (application)
> 0.05 # 错误率超过 5%
for: 5m
labels:
severity: critical
annotations:
summary: "High error rate detected in {{ $labels.application }}"
5.2 集成 Alertmanager
配置通知渠道(如邮件、Slack)并启动 Alertmanager:
docker run -d --name alertmanager \
-p 9093:9093 \
-v /path/to/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
prom/alertmanager
三、最终效果
- 监控大盘:包含全局请求成功率、失败率、核心接口 RTT、JVM 内存、CPU 使用率等。
- 实时告警:当错误率或延迟超过阈值时触发通知。
- 历史趋势:通过 Grafana 查看指标的历史波动。
四、常见问题排查
问题 | 解决方案 |
---|---|
指标未暴露 | 检查 management.endpoints.web.exposure.include 配置 |
Prometheus 抓取失败 | 检查 targets 地址和网络连通性 |
Grafana 无数据 | 确认数据源配置正确,PromQL 无语法错误 |
RTT 数值异常 | 检查 URI 标签是否匹配核心接口路径 |
通过以上步骤,可快速搭建 Spring Boot 服务的全链路监控体系。