以下是监控 Spring Boot 业务服务的 **请求成功率、失败率、核心接口 RTT(往返时间)** 的完整方案,使用 **开源工具栈(Prometheus + Grafana)** 实现指标采集、存储和可视化: --- ### **一、监控方案架构** ```mermaid graph TD A[Spring Boot 应用] -->|暴露指标| B(Prometheus) B -->|存储/查询| C(Grafana) C -->|展示| D[监控大盘] ``` --- ### **二、具体步骤** #### **1. 集成监控指标库(Micrometer)** Spring Boot 原生支持 **Micrometer** 作为指标采集库,需添加依赖并配置 Prometheus 格式的指标暴露。 ##### **1.1 添加依赖(pom.xml)** ```xml org.springframework.boot spring-boot-starter-actuator io.micrometer micrometer-registry-prometheus ``` ##### **1.2 配置指标暴露(application.yml)** ```yaml management: endpoints: web: exposure: include: health,info,prometheus # 暴露 Prometheus 端点 metrics: tags: application: ${spring.application.name} # 添加应用标签 ``` --- #### **2. 部署 Prometheus 抓取指标** ##### **2.1 Prometheus 配置(prometheus.yml)** ```yaml 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** ```bash 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)** ```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)** ```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(平均响应时间)** ```promql 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 数据源** 1. 访问 `http://grafana-server:3000`,登录后进入 **Configuration > Data Sources**。 2. 选择 **Prometheus**,填写 URL(如 `http://prometheus:9090`)。 ##### **4.2 导入 Spring Boot 监控模板** 1. 访问 [Grafana 仪表盘市场](https://grafana.com/grafana/dashboards/),搜索 **"Spring Boot"**。 2. 选择模板(如 ID: **11378**),复制 ID。 3. 在 Grafana 中进入 **Create > Import**,输入 ID 完成导入。 ##### **4.3 自定义核心指标面板** ###### **成功率/失败率(百分比仪表盘)** ```promql # 成功率 (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(折线图)** ```promql # 平均响应时间(毫秒) 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 中设置告警规则** ```yaml # 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: ```bash 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 服务的全链路监控体系。