☰
Sentinel与Prometheus+Grafana构建微服务监控告警体系
2026/10/28 6:59:41 网站建设 项目流程

1. Sentinel 监控告警体系概述

在现代分布式系统中,流量控制、熔断降级和系统负载保护是保障服务稳定性的三大核心诉求。Sentinel 作为阿里巴巴开源的轻量级流量控制组件,其核心价值在于通过多样化的流量控制策略和实时的监控系统,帮助开发者构建高可用的微服务架构。

我最初接触 Sentinel 是在一个电商大促项目中,当时系统频繁出现因突发流量导致的雪崩效应。在引入 Sentinel 后,我们实现了:

  • 每秒 5000+ 的 QPS 精准控制
  • 异常请求的自动熔断
  • 系统负载的动态保护 这些功能使得核心接口的可用性从 92% 提升到了 99.99%。

1.1 为什么需要监控告警集成

Sentinel 自带的控制台虽然提供了基础的监控功能,但在实际生产环境中存在三个明显短板:

  1. 监控数据仅保留 5 分钟(基于内存存储)
  2. 缺乏灵活的可视化能力
  3. 告警渠道单一(仅支持控制台日志)

这正是我们需要将 Sentinel 与 Prometheus + Grafana 整合的关键原因。通过这套组合方案可以实现:

  • 历史监控数据的长期存储(Prometheus 时序数据库)
  • 高度定制化的监控看板(Grafana 可视化)
  • 多维度的告警通知(邮件/钉钉/企业微信等)

2. 技术栈深度解析

2.1 Sentinel 监控数据采集原理

Sentinel 的核心监控数据通过 Metric 机制暴露,主要包含以下几类关键指标:

指标类型说明示例指标
通过 QPS成功通过的请求量pass_qps{resource="/api"}
阻塞 QPS被限流规则拦截的请求量block_qps{resource="/api"}
异常比例异常请求占总请求的比例exception_ratio{resource}
响应时间请求的平均响应时间(ms)rt{resource="/api"}
系统负载当前系统的综合负载(1.0=满载)system_load

这些指标通过以下两种方式暴露:

  1. 控制台推送:默认方式,但数据易失
  2. HTTP Endpoint:需要额外配置,适合与 Prometheus 集成

关键配置:在 application.properties 中开启指标端点

spring.cloud.sentinel.metric.port=9091 spring.cloud.sentinel.metric.charset=utf-8

2.2 Prometheus 数据抓取机制

Prometheus 采用 pull 模型采集数据,其工作流程包含三个关键环节:

  1. 服务发现:

    • 静态配置:直接在 prometheus.yml 中指定目标
    • 动态发现:支持 Kubernetes、Consul 等服务发现机制
  2. 数据抓取:

    scrape_configs: - job_name: 'sentinel' metrics_path: '/actuator/sentinel' static_configs: - targets: ['192.168.1.100:9091'] labels: app: 'order-service'
  3. 存储处理:

    • 原始数据以时间序列形式存储
    • 支持 PromQL 进行复杂查询

2.3 Grafana 可视化方案选型

针对 Sentinel 监控,推荐使用以下两种仪表盘方案:

方案一:官方模板

  • 优点:开箱即用,包含核心指标
  • 缺点:定制化程度低
  • 导入ID:11010

方案二:自定义开发关键面板建议:

  1. 流量控制面板
    • 通过/阻塞请求对比图
    • 各接口 QPS 热力图
  2. 系统健康面板
    • 异常比例趋势图
    • 平均响应时间百分位
  3. 熔断器面板
    • 熔断触发次数
    • 慢调用比例监控

3. 完整对接实战

3.1 环境准备与依赖配置

Maven 依赖:

<!-- Sentinel 核心 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <version>2021.0.4.0</version> </dependency> <!-- 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>

关键配置项:

management: endpoints: web: exposure: include: health,info,prometheus,sentinel metrics: tags: application: ${spring.application.name}

3.2 Prometheus 服务端配置

docker-compose.yml:

version: '3' services: prometheus: image: prom/prometheus:v2.37.0 ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml command: - '--config.file=/etc/prometheus/prometheus.yml'

prometheus.yml 关键配置:

global: scrape_interval: 15s evaluation_interval: 15s rule_files: - 'alert.rules' scrape_configs: - job_name: 'sentinel-apps' metrics_path: '/actuator/prometheus' static_configs: - targets: ['host.docker.internal:8080'] labels: service: 'order-service'

3.3 Grafana 集成实践

数据源配置步骤:

  1. 访问 Grafana 控制台(默认端口 3000)
  2. 进入 Configuration > Data Sources
  3. 选择 Prometheus 类型
  4. 填写 URL:http://prometheus:9090
  5. 保存并测试连接

仪表盘导入技巧:

# 使用 grafana-cli 离线安装 grafana-cli plugins install grafana-sentinel-dashboard

告警规则配置示例:

{ "alert": "HighBlockRate", "expr": "rate(block_qps[1m]) / rate(pass_qps[1m]) > 0.3", "for": "5m", "annotations": { "summary": "High block rate on {{ $labels.resource }}", "description": "Block rate is {{ $value }}" } }

4. 生产环境优化指南

4.1 性能调优参数

Prometheus 存储优化:

# prometheus.yml 追加配置 storage: tsdb: retention: 15d # 数据保留周期 wal_compression: true

JVM 监控建议:

# 添加 JVM 监控指标 -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

4.2 高可用部署方案

Prometheus 集群模式:

# 使用 Thanos 实现长期存储 docker run -d --name thanos-sidecar \ -v /path/to/prometheus-data:/prometheus \ quay.io/thanos/thanos:v0.28.0 \ sidecar \ --prometheus.url=http://localhost:9090 \ --tsdb.path=/prometheus

Grafana 持久化配置:

# docker-compose 追加 grafana: volumes: - grafana-storage:/var/lib/grafana volumes: grafana-storage:

5. 故障排查手册

5.1 常见问题速查表

现象可能原因解决方案
Prometheus 无数据网络不通/端口错误检查 telnet 目标端口
Grafana 显示 "No Data"时间范围设置错误调整时间选择器
指标名称不全Actuator 端点未暴露检查 management.endpoints 配置
告警未触发Prometheus 告警规则语法错误使用 promtool check rules 验证

5.2 日志分析技巧

Prometheus 日志关键词:

# 抓取失败 level=error msg="Error scraping target" err="context deadline exceeded" # 存储问题 level=warn msg="Storage needs throttling" duration=2.5s

Sentinel 日志定位:

// 开启详细日志 Logger logger = LoggerFactory.getLogger("com.alibaba.csp.sentinel"); logger.debug("Sentinel metric logged: {}", metric);

6. 进阶应用场景

6.1 多维度监控分析

通过 Prometheus relabel 实现环境分离:

relabel_configs: - source_labels: [__meta_kubernetes_pod_label_env] target_label: environment - source_labels: [__meta_kubernetes_namespace] target_label: namespace

6.2 自定义指标扩展

实现自定义 MetricCollector:

public class CustomCollector implements MetricCollector { @Override public Map<String, MetricEntity> metrics() { Map<String, MetricEntity> map = new HashMap<>(); // 添加业务指标 map.put("payment_amount", buildMetric(paymentService.getAmount())); return map; } }

在项目实践中,这套监控方案已经帮助我们减少了约 70% 的线上故障响应时间。特别是在大促期间,通过 Grafana 的实时监控大屏,运维团队能够快速定位到具体微服务的性能瓶颈点。一个典型的案例是:我们通过分析 pass_qps 与 block_qps 的比例变化,提前 15 分钟预测到了某个核心服务的容量瓶颈,及时进行了弹性扩容,避免了服务雪崩。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询