当前位置: 首页 > news >正文

基于Prometheus Pushgateway与Alertmanager的自定义指标监控与告警实践指南

封面

业务场景描述

在大型分布式系统中,核心服务无法通过传统拉取(scrape)方式收集所有业务指标,尤其是短命批处理任务、异步消息消费等场景。我们需要将这些自定义指标主动推送到监控系统,并对关键指标设置告警策略,确保在异常时能够及时发现并响应。本文结合生产环境经验,介绍如何基于Prometheus PushgatewayAlertmanager搭建可靠的自定义指标监控与告警体系。

技术选型过程

  1. Prometheus:开源度高,生态完善,支持多种Exporter和Alertmanager集成。
  2. Pushgateway:适用于短生命周期或不易被Prometheus直接抓取的应用,用于临时保存推送的指标。
  3. Alertmanager:Prometheus官方告警组件,支持多种告警方式(邮件、钉钉、企业微信、Slack等)。
  4. Micrometer:Java生态常用指标采集库,可无缝集成Spring Boot项目,支持Pushgateway后端。

综合考虑,选用Prometheus + Pushgateway + Alertmanager,并在Java微服务中使用Micrometer进行指标推送。

实现方案详解

系统架构

  • 各微服务(批处理、异步消费者)通过Micrometer将指标推送至Pushgateway
  • Prometheus定时(如30s)从Pushgateway抓取自定义指标
  • Alertmanager根据Prometheus告警规则进行告警分发
+------------+       +---------------+       +-------------+       +--------------+
|  Service A | ----> | Pushgateway   | <---- | Service B   |       | Batch Jobs   |
+------------+       +---------------+       +-------------+       +--------------+|                    |                     |                     |v                    v                     v                     v
+--------------------------------------------------------------------------+
|                                Prometheus                                 |
+--------------------------------------------------------------------------+|v+-----------------+|  Alertmanager   |+-----------------+

部署方式(Docker Compose示例)

version: '3.7'
services:prometheus:image: prom/prometheus:v2.31.1volumes:- ./prometheus.yml:/etc/prometheus/prometheus.ymlports:- '9090:9090'pushgateway:image: prom/pushgateway:v1.4.1ports:- '9091:9091'alertmanager:image: prom/alertmanager:v0.23.0volumes:- ./alertmanager.yml:/etc/alertmanager/alertmanager.ymlports:- '9093:9093'
prometheus.yml
global:scrape_interval: 30sscrape_configs:- job_name: 'pushgateway'honor_labels: truestatic_configs:- targets: ['pushgateway:9091']
alertmanager.yml
route:receiver: 'team_email'
receivers:- name: 'team_email'email_configs:- to: 'oncall@example.com'from: 'alertmanager@example.com'smarthost: 'smtp.example.com:587'auth_username: 'alertmanager@example.com'auth_identity: 'alertmanager@example.com'auth_password: 'password'

代码示例(Spring Boot + Micrometer)

  1. 引入依赖(pom.xml)
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus-pushgateway</artifactId>
</dependency>
  1. 配置Pushgateway客户端(application.yml)
management:metrics:export:prometheus:enabled: false   # 禁用默认拉取接口pushgateway:enabled: truebase-url: http://pushgateway:9091push-rate: 30sjob: my-service
  1. 自定义指标推送示例
@RestController
public class JobController {private final PushGateway pushGateway;private final CollectorRegistry registry;@Autowiredpublic JobController() throws MalformedURLException {this.registry = CollectorRegistry.defaultRegistry;this.pushGateway = new PushGateway(new URL("http://pushgateway:9091"));}@PostMapping("/runJob")public String runJob() throws IOException {// 业务逻辑long start = System.currentTimeMillis();// ... 模拟执行任务long duration = System.currentTimeMillis() - start;// 构建自定义HistogramHistogram histogram = Histogram.build().name("job_execution_duration_seconds").help("Job execution time in seconds").register(registry);histogram.observe(duration / 1000.0);// 推送到PushgatewaypushGateway.pushAdd(registry, "my-service");return "Job completed in " + duration + " ms";}
}

踩过的坑与解决方案

  1. 指标重复推送导致Pushgateway堆积指标
    解决:使用pushAdd替换push,并定期清理过期job或配置--persistence.file--persistence.interval

  2. Alertmanager无法发送邮件
    解决:检查SMTP配置、SSL/TLS设置,确认防火墙及网络可达性。

  3. Prometheus抓取Pushgateway标签不对齐
    解决:开启honor_labels: true,保证推送标签在Prometheus侧保留。

总结与最佳实践

  • 对短生命周期应用和批处理任务,优先使用Pushgateway主动推送指标。
  • 推荐结合Micrometer与Pushgateway,简化Java项目集成成本。
  • 告警策略应与SLO、业务重点结合,避免告警疲劳。
  • 定期清理Pushgateway历史数据,防止磁盘占满。
  • 在生产环境部署高可用Prometheus和Alertmanager,实现监控告警的可靠性。

通过本文方案,您可以快速为自定义指标构建全链路监控与告警系统,帮助团队在生产环境中高效定位问题,保障服务稳定性。

http://www.dtcms.com/a/353102.html

相关文章:

  • 【HTML】隐藏滚动条但保留功能
  • 年度优质会议推荐:【西安石油大学主办|IEEE出版|往届均EI】第七届智能控制、测量与信号处理国际学术会议 (ICMSP 2025)
  • Playwright进阶指南 (6) | 自动化测试实战
  • 从 GRIT 到 WebUI:Chromium 内置资源加载与前端展示的完整链路解析
  • 寻找AI——初识墨刀AI
  • 【FPGA】VGA显示-贪吃蛇
  • oracle 表空间扩容(增加新的数据文件)
  • 浅聊达梦数据库物理热备的概念及原理
  • VESA时序检测模块设计verilog实现
  • 力扣hot100:字母异位词分组和最长连续序列(49,128)
  • Ansible的介绍+ansible平台部署
  • 互联网大厂Java面试深度解析:从基础到微服务云原生的全场景模拟
  • 公开课程 | 大规模图数据管理与分析 第二讲:图的度量、性质与生成模型
  • redbook的判断完美数
  • 销售数据分析平台
  • LeetCode hot 100 每日一题(18)——206.反转链表
  • 开源 | 推荐一套企业级开源AI人工智能训练推理平台(数算岛):完整代码包含多租户、分布式训练、模型市场、多框架支持、边缘端适配、云边协同协议:
  • 高并发写入、毫秒级查询——盘古信息携手 TDengine 时序数据库解决六大技术挑战
  • SimLab Composer8.2_win中文_3D绘画_安装教程
  • 音频时长裁剪工具:高效处理音频,让内容创作更轻松
  • 【Rust】 2. 数据类型笔记
  • Compose副作用域
  • 大模型重构建筑“能耗基因“:企业如何用物联中台打响能源革命?
  • 入行IC | 数字IC设计和FPGA哪个好?
  • STM32 入门实录:从 0 到 3 色 LED 呼吸式闪烁
  • Git-远程操作
  • 基于 Node.js 的淘宝 API 接口开发:快速构建异步数据采集服务
  • SFTP服务器可以通过同一个登录到SFTP服务器的账号密码连接上控制台吗
  • 【0420】Postgres内核 实现(借助 SMgrRelation)为指定 table(CREATE TABLE)创建 disk file
  • android证书相关