SpringBlade监控告警体系:Prometheus+Grafana可视化配置

SpringBlade监控告警体系:Prometheus+Grafana可视化配置

【免费下载链接】SpringBlade SpringBlade 是一个由商业级项目升级优化而来的SpringCloud分布式微服务架构、SpringBoot单体式微服务架构并存的综合型项目,采用Java8 API重构了业务代码,完全遵循阿里巴巴编码规范。采用Spring Boot 2.7 、Spring Cloud 2021 、Mybatis 等核心技术,同时提供基于React和Vue的两个前端框架用于快速搭建企业级的SaaS多租户微服务平台。 【免费下载链接】SpringBlade 项目地址: https://gitcode.com/gh_mirrors/sp/SpringBlade

引言:微服务监控的痛点与解决方案

在分布式微服务架构中,随着服务数量的激增和业务复杂度的提升,传统的监控方式面临三大核心痛点:指标碎片化(不同服务使用独立监控系统)、告警延迟(故障发生后无法及时感知)、可视化割裂(数据分散在多个平台)。SpringBlade作为企业级微服务平台,亟需一套统一的监控告警体系来保障系统稳定性。

本文将详细介绍如何基于Prometheus(指标收集) + Grafana(可视化展示) 构建SpringBlade监控告警体系,通过10个实战步骤实现从指标采集到告警通知的全链路配置,最终达成:

  • 95%以上核心业务指标实时可见
  • 关键异常5分钟内自动告警
  • 多维度性能瓶颈一键定位

技术选型:为什么选择Prometheus+Grafana组合?

SpringBlade微服务架构中,监控系统需要满足高可用低侵入易扩展三大要求。通过对比主流监控方案,Prometheus+Grafana组合具有明显优势:

监控方案侵入性扩展性告警能力适合场景
Prometheus+Grafana低(基于Pull模式)强(支持自定义Exporter)多维度告警规则容器化微服务
Zabbix中(需安装Agent)中(模板化配置)基础阈值告警传统服务器监控
ELK Stack高(日志采集)强(生态丰富)日志关键字告警日志集中分析
SkyWalking中(字节码增强)强(分布式追踪)链路异常告警分布式追踪

Prometheus的时序数据模型PromQL查询语言特别适合微服务指标分析,而Grafana的丰富可视化插件告警渠道集成(邮件/钉钉/企业微信)能满足SpringBlade的多样化告警需求。

监控架构:SpringBlade监控体系拓扑设计

SpringBlade监控体系采用分层架构设计,从数据采集到告警通知共分为5个层级:

mermaid

核心技术组件

  • 数据采集:Spring Boot Actuator + Micrometer
  • 指标存储:Prometheus 2.45+
  • 可视化:Grafana 10.2+
  • 告警渠道:Alertmanager + 钉钉机器人

实战配置:从零构建监控体系的10个步骤

步骤1:添加监控依赖(Maven配置)

在SpringBlade各微服务模块的pom.xml中添加Actuator和Micrometer依赖:

<!-- 健康检查与指标暴露 -->
<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>

注意:需在blade-common模块中统一管理依赖版本,避免版本冲突。

步骤2:配置Actuator端点暴露(application.yml)

在各服务的配置文件中开启Actuator端点,并暴露Prometheus指标:

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus  # 暴露的端点列表
      base-path: /actuator                       # 基础路径
  endpoint:
    health:
      show-details: always                      # 显示详细健康信息
      probes:
        enabled: true                           # 启用健康检查探针
  metrics:
    export:
      prometheus:
        enabled: true                           # 启用Prometheus导出
    tags:
      application: ${spring.application.name}   # 全局指标标签(服务名称)

步骤3:自定义业务指标(代码实现)

针对核心业务场景,通过Micrometer API埋点自定义指标。以订单服务为例:

@Component
public class OrderMetricsCollector {
    private final MeterRegistry meterRegistry;
    private Counter orderCreateCounter;
    private Timer orderProcessTimer;

    // 构造函数注入MeterRegistry
    public OrderMetricsCollector(MeterRegistry meterRegistry) {
        this.meterRegistry = meterRegistry;
        initMetrics();
    }

    // 初始化指标
    private void initMetrics() {
        // 订单创建计数器
        orderCreateCounter = Counter.builder("order.create.total")
                .description("Total number of created orders")
                .tag("status", "success")
                .register(meterRegistry);

        // 订单处理计时器
        orderProcessTimer = Timer.builder("order.process.duration")
                .description("Duration of order processing")
                .tag("payment_type", "alipay")
                .register(meterRegistry);
    }

    // 记录订单创建
    public void recordOrderCreated() {
        orderCreateCounter.increment();
    }

    // 记录订单处理耗时
    public <T> T recordOrderProcessing(Supplier<T> supplier) {
        return Timer.start(meterRegistry).record(supplier);
    }
}

核心指标类型

  • Counter:累计计数(如订单创建次数)
  • Gauge:瞬时值(如当前活跃用户数)
  • Timer:耗时统计(如接口响应时间)
  • Summary:分位数统计(如P99响应时间)

步骤4:部署Prometheus服务(Docker方式)

在SpringBlade的docker-compose.yml中添加Prometheus服务定义:

prometheus:
  image: prom/prometheus:v2.45.0
  container_name: blade-prometheus
  ports:
    - "9090:9090"
  volumes:
    - ./prometheus.yml:/etc/prometheus/prometheus.yml
    - prometheus-data:/prometheus
  command:
    - '--config.file=/etc/prometheus/prometheus.yml'
    - '--storage.tsdb.path=/prometheus'
    - '--web.enable-lifecycle'  # 支持热加载配置
  networks:
    - blade_net

volumes:
  prometheus-data:

networks:
  blade_net:
    driver: bridge

步骤5:配置Prometheus数据抓取(prometheus.yml)

创建Prometheus配置文件,设置SpringBlade服务的抓取规则:

global:
  scrape_interval: 15s  # 全局抓取间隔
  evaluation_interval: 15s  # 规则评估间隔

scrape_configs:
  # SpringBlade服务抓取配置
  - job_name: 'springblade-services'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s  # 服务指标抓取间隔
    static_configs:
      - targets: [
          'blade-gateway:7000',
          'blade-system:8001',
          'blade-auth:9000',
          'blade-desk:8006'
        ]
    relabel_configs:
      - source_labels: [__address__]
        regex: '(.*):\d+'
        target_label: instance
        replacement: '${1}'

  # 基础设施抓取配置
  - job_name: 'infrastructure'
    static_configs:
      - targets: ['node-exporter:9100']  # 主机监控
        labels:
          group: 'infrastructure'

关键配置说明

  • scrape_interval:根据业务重要性调整,核心服务建议5s
  • metrics_path:固定为Actuator的Prometheus端点
  • relabel_configs:去除实例端口,便于聚合展示

步骤6:部署Grafana服务(Docker方式)

扩展docker-compose.yml添加Grafana服务:

grafana:
  image: grafana/grafana:10.2.0
  container_name: blade-grafana
  ports:
    - "3000:3000"
  volumes:
    - grafana-data:/var/lib/grafana
    - ./grafana/provisioning:/etc/grafana/provisioning
  environment:
    - GF_SECURITY_ADMIN_PASSWORD=blade@2025  # 管理员密码
    - GF_USERS_ALLOW_SIGN_UP=false  # 禁用注册
  depends_on:
    - prometheus
  networks:
    - blade_net

volumes:
  grafana-data:

步骤7:配置Grafana数据源与仪表盘

  1. 添加Prometheus数据源
    登录Grafana(默认账户admin/blade@2025),导航至Configuration > Data Sources,点击Add data source

    • Name: SpringBlade-Prometheus
    • Type: Prometheus
    • URL: http://prometheus:9090
    • Scrape Interval: 15s
  2. 导入Spring Boot监控面板
    导入官方Spring Boot仪表盘(ID: 12856):

    • 导航至Dashboards > Import
    • 输入仪表盘ID: 12856
    • 选择数据源: SpringBlade-Prometheus
    • 点击Import完成导入
  3. 自定义业务仪表盘
    创建订单服务专属仪表盘,添加关键指标面板:

    • 订单创建趋势图(使用order_create_total指标)
    • 订单处理耗时分布(使用order_process_duration_seconds指标)
    • 支付方式占比饼图(按payment_type标签分组)

步骤8:配置告警规则(Prometheus AlertRules)

在Prometheus中定义告警规则文件alert.rules.yml

groups:
- name: springblade_alerts
  rules:
    # 服务可用性告警
    - alert: ServiceDown
      expr: up{job="springblade-services"} == 0
      for: 30s
      labels:
        severity: critical
      annotations:
        summary: "服务 {{ $labels.instance }} 不可用"
        description: "服务 {{ $labels.instance }} 已宕机超过30秒"

    # 接口响应时间告警
    - alert: ApiResponseTimeHigh
      expr: http_server_requests_seconds_sum{quantile="0.95"} > 1
      for: 1m
      labels:
        severity: warning
      annotations:
        summary: "接口 {{ $labels.uri }} 响应缓慢"
        description: "接口 {{ $labels.uri }} 95%响应时间超过1秒,当前值: {{ $value }}"

    # JVM内存告警
    - alert: JvmMemoryUsageHigh
      expr: jvm_memory_used_bytes / jvm_memory_max_bytes > 0.8
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "服务 {{ $labels.instance }} 内存使用率过高"
        description: "JVM内存使用率超过80%,当前值: {{ $value | humanizePercentage }}"

prometheus.yml中引用告警规则:

rule_files:
  - "alert.rules.yml"

alerting:
  alertmanagers:
    - static_configs:
        - targets: ['alertmanager:9093']

步骤9:部署Alertmanager与告警渠道配置

添加Alertmanager服务到docker-compose.yml

alertmanager:
  image: prom/alertmanager:v0.25.0
  container_name: blade-alertmanager
  ports:
    - "9093:9093"
  volumes:
    - ./alertmanager/config.yml:/etc/alertmanager/config.yml
  networks:
    - blade_net

配置钉钉告警渠道(config.yml):

global:
  resolve_timeout: 5m

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 4h
  receiver: 'dingtalk'

receivers:
- name: 'dingtalk'
  webhook_configs:
  - url: 'http://dingtalk-webhook:8060/dingtalk/blade/send'  # 钉钉Webhook服务
    send_resolved: true

inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'instance']

步骤10:验证与优化监控体系

  1. 指标采集验证
    访问http://prometheus:9090/graph,执行查询up{job="springblade-services"},确认所有服务实例状态为1。

  2. 仪表盘数据验证
    在Grafana中查看Spring Boot仪表盘,确认JVM指标、接口调用量等数据正常显示。

  3. 告警触发测试
    通过停止某个服务实例,验证Alertmanager是否在30秒内触发ServiceDown告警,并成功发送钉钉通知。

  4. 性能优化

    • 对高频指标(如QPS>1000)设置scrape_interval: 10s
    • 对低优先级指标使用metric_relabel_configs过滤不必要标签
    • 配置Prometheus存储保留策略(--storage.tsdb.retention.time=15d

高级实践:监控体系的扩展与最佳实践

微服务链路追踪集成

结合Spring Cloud Sleuth和Zipkin实现分布式追踪与监控联动:

spring:
  sleuth:
    sampler:
      probability: 1.0  # 开发环境全采样
  zipkin:
    base-url: http://zipkin:9411

在Grafana中添加Zipkin数据源,实现指标-日志-链路的一站式问题定位。

自定义业务仪表盘模板

导出常用仪表盘为JSON模板,通过Grafana Provisioning实现自动化部署:

# provisioning/dashboards/dashboard.yml
apiVersion: 1
providers:
- name: 'default'
  orgId: 1
  folder: ''
  type: file
  disableDeletion: false
  editable: true
  options:
    path: /etc/grafana/provisioning/dashboards

多环境监控隔离

通过Prometheus的external_labels实现多环境数据隔离:

# 开发环境配置
global:
  external_labels:
    environment: dev

# 生产环境配置
global:
  external_labels:
    environment: prod

在Grafana中通过environment标签切换不同环境的监控视图。

总结与展望

通过本文介绍的10个步骤,我们基于Prometheus+Grafana构建了SpringBlade的监控告警体系,实现了从指标采集存储分析可视化展示告警通知的全链路覆盖。该体系具有以下优势:

  1. 无侵入集成:基于Spring Boot Actuator和Micrometer,无需修改业务代码
  2. 灵活扩展:支持自定义指标和告警规则,适应业务变化
  3. 可视化丰富:通过Grafana多维度展示,直观反映系统状态
  4. 告警及时:关键异常5分钟内通知,降低故障影响范围

未来演进方向

  • 基于机器学习的异常检测(使用Prometheus Anomaly Detector)
  • 监控数据湖构建(集成Thanos实现长期存储)
  • 告警智能化(基于故障影响范围动态调整告警级别)

建议团队定期(每季度)对监控体系进行审计,添加新的业务指标,优化告警阈值,确保监控体系持续适应业务发展需求。

附录:常用监控指标参考

指标类型核心指标用途
JVM监控jvm_memory_used_bytes堆内存使用量
jvm_threads_live_threads活跃线程数
jvm_gc_pause_seconds_sumGC暂停时间
应用监控http_server_requests_seconds接口响应时间
http_server_requests_count接口调用次数
error_total异常发生次数
数据库监控hikaricp_connections_active活跃连接数
hikaricp_connections_idle空闲连接数
mybatis_executor_statement_secondsSQL执行耗时
缓存监控redis_keyspace_hits缓存命中次数
redis_keyspace_misses缓存未命中次数
cache_gets_seconds缓存操作耗时

通过合理配置这些指标,可全面掌握SpringBlade微服务集群的运行状态,为系统稳定性提供有力保障。

【免费下载链接】SpringBlade SpringBlade 是一个由商业级项目升级优化而来的SpringCloud分布式微服务架构、SpringBoot单体式微服务架构并存的综合型项目,采用Java8 API重构了业务代码,完全遵循阿里巴巴编码规范。采用Spring Boot 2.7 、Spring Cloud 2021 、Mybatis 等核心技术,同时提供基于React和Vue的两个前端框架用于快速搭建企业级的SaaS多租户微服务平台。 【免费下载链接】SpringBlade 项目地址: https://gitcode.com/gh_mirrors/sp/SpringBlade

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值