Micrometer 系列【37】Spring Boot Actuator | 集成 AlertManager 告警推送

发布时间:2026/10/6 3:52:45

Micrometer 系列【37】Spring Boot Actuator | 集成 AlertManager 告警推送 文章目录1. Alertmanager1.1 概述1.2 核心概念1告警分组Grouping2告警抑制Inhibition3告警静默Silences2. 集成演示2.1 部署 AlertManager2.2 Webhook 推送告警信息2.2.1 配置 Prometheus与 Alertmanager 对接2.2.2 Prometheus 添加告警规则2.2.3 Alertmanager 配置 webhook 告警通知2.2.4 模拟告警触发1. Alertmanager1.1 概述Alertmanager主要用于接收Prometheus发送的告警信息它支持丰富的告警通知渠道而且很容易做到告警信息进行分组、静默、抑制等是Prometheus生态中非常重要的一个模块。告警体系分为两大模块Prometheus服务内定义告警规则将告警推送至AlertmanagerAlertmanager统一接管告警提供告警静默、告警抑制、告警聚合能力并通过邮件、值班通知系统、聊天工具等渠道发送通知。搭建告警与通知功能的核心步骤部署并配置Alertmanager配置Prometheus使其对接Alertmanager在Prometheus中编写告警规则AlertManager不做告警判定只做告警治理与推送分发是生产告警降噪、避免轰炸的核心组件。1.2 核心概念1告警分组Grouping分组机制将同类告警合并为一条通知。大规模故障场景下尤为实用一旦大面积故障爆发系统可能同时触发成百上千条告警。举例集群中运行着上百个服务实例发生网络分区故障半数实例无法连接数据库。Prometheus告警规则配置为实例无法访问数据库时触发告警。最终会有数百条告警推送到Alertmanager。运维人员只希望收到一条通知同时能够查看受影响的具体实例。此时可以配置Alertmanager按照集群名称、告警名称对告警分组最终只发送一条汇总通知。告警分组规则、分组通知的等待时长、通知接收人均在配置文件的路由树中定义。2告警抑制Inhibition抑制机制当某条优先级更高的告警已经触发时屏蔽相关联的其他告警通知。举例一条告警提示整个集群无法访问。可以配置Alertmanager当该告警触发时屏蔽此集群下所有其他告警。避免大量次要告警刷屏干扰定位根因。3告警静默Silences静默可以在指定时间段内直接屏蔽告警。静默规则使用匹配器定义语法和路由树一致。当新告警抵达时会校验是否匹配任意一条生效静默规则匹配成功则不会发送该告警的通知。静默规则在Alertmanager Web页面中配置。2. 集成演示2.1 部署 AlertManager部署目录结构alertmanager/ ├── alertmanager.yml# 主配置文件├── templates/# 告警消息模板目录│ └── wechat.tmpl# 钉钉/企业微信消息模板└── data/# 持久化目录告警状态、静默记录alertmanager.yml默认配置# 全局配置global:# 告警超时时间resolve_timeout:5m# 路由配置route:# 用于将传入警报分组在一起的标签。group_by:[alertname]# 发送通知的初始等待时间group_wait:30s# 在发送有关新警报的通知之前需要等待多长时间group_interval:5m# 如果已发送通知则在再次发送通知之前要等待多长时间通常约3小时或更长时间repeat_interval:1h# 接受者名称receiver:web.hook# 接受者receivers:# 接受者名称-name:web.hook# webhook URLwebhook_configs:-url:http://127.0.0.1:5001/# 抑制规则inhibit_rules:-source_match:# 原标签匹配》告警级别严重severity:criticaltarget_match:# 目标标签匹配》告警级别警告severity:warning# 警报中必须有以下标签值才会被抑制。equal:[alertname,dev,instance]在上一篇的docker-compose.yml中新增Alertmanager告警组件alertmanager:image:prom/alertmanager:v0.32.2container_name:alertmanagerports:-9093:9093volumes:-./alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml:ro-./alertmanager/templates:/etc/alertmanager/templates:ro-./alertmanager/data:/alertmanagercommand:---config.file/etc/alertmanager/alertmanager.yml---storage.path/alertmanager# 如需集群高可用开启cluster参数# - --cluster.listen-address0.0.0.0:9094restart:unless-stoppedextra_hosts:-host.docker.internal:host-gateway启动docker-composeup-d访问http://ip:9093/2.2 Webhook 推送告警信息Alertmanager支持多种通知方式也就是支持多种通知接收者receiverwebhookweb回调或者HTTP服务的推送API接口wechat通过微信API发送VictorOps通过VictorOps API发出OpsGenie通过OpsGenie API发送sns短信Slack通过Slack webhooks发送。该通知包含一个附件Pushover通过Pushover API发送PagerDuty通过PagerDuty API发送email电子邮件接下来使用webhook方式实现告警信息推送2.2.1 配置 Prometheus与 Alertmanager 对接要实现Prometheus向Alertmanager中发送信息只需要配置Alertmanager连接地址即可。修改prometheus.yml添加Alertmanager地址、告警规则文件地址# 加载告警规则文件支持通配符rule_files:-alert-rules/*.yml# 配置推送告警到 Alertmanageralerting:alertmanagers:-static_configs:# 配置alertmanager连接地址-targets:[localhost:9093]localhost改为虚拟或主机地址2.2.2 Prometheus 添加告警规则在实际环境中告警规则肯定有很多比如对服务器异常进行告警就有宕机、CPU使用率超过100%、内存使用率超过80%、硬盘使用率超过80%等等。基本流程告警规则文件编写一组PromQL表达式满足条件 →Prometheus生成告警Prometheus检测到告警后推送到Alertmanager进行通知分发。直接在prometheus/alert-rules目录下编写告警规则模板示例1新建service-rules.yml文件监控的服务Job采集失败触发告警groups:-name:spring-service-rulesrules:-alert:ServiceInstanceDownexpr:up{jobspring-micrometer-service} 0for:30slabels:severity:criticalannotations:summary:服务实例宕机/无法采集description:|Job名称{{$labels.job}} 实例地址{{$labels.instance}} 当前状态采集失败服务大概率宕机或网络不通示例2HTTP请求错误率过高groups:-name:spring-service-rulesrules:# HTTP请求错误率过高-alert:HttpRequestErrorHighexpr:sum(rate(http_server_requests_seconds_count{status~5..}[1m])) by(instance,job) / sum(rate(http_server_requests_seconds_count[1m])) by(instance,job)0.05for:1mlabels:severity:warningannotations:summary:接口5xx错误率大于5%Docker环境需要添加文件映射-./prometheus/alert-rules:/etc/prometheus/alert-rules:ro重启Prometheus查看控制台发现当前规则已被激活也可以看到详细的规则信息。2.2.3 Alertmanager 配置 webhook 告警通知使用Spring boot创建一个web项目提供一个API接口用于接收告警通知。RestControllerRequestMapping(/alertmanager)publicclassAlertmanagerController{RequestMapping(/hook)publicObjecthook(RequestBodyStringbody){System.out.println(接受到告警信息body);System.out.println(告警信息发送到数据库。。。);returnsuccess;}}在alertmanager.yml中添加route及receivers配置webhook_configs中的url配置配我们提供了webhook接口地址。# 全局配置,全局配置包括报警解决后的超时时间、SMTP 相关配置、各种渠道通知的 API 地址等等。global:# 告警超时时间resolve_timeout:5m# 路由配置,设置报警的分发策略它是一个树状结构按照深度优先从左向右的顺序进行匹配。route:# 用于将传入警报分组在一起的标签。# 基于告警中包含的标签如果满足group_by中定义标签名称那么这些告警将会合并为一个通知发送给接收器。group_by:[alertname]# 发送通知的初始等待时间group_wait:30s# 在发送有关新警报的通知之前需要等待多长时间group_interval:5m# 如果已发送通知则在再次发送通知之前要等待多长时间通常约3小时或更长时间repeat_interval:30s# 接受者名称receiver:web.hook# 配置告警消息接受者信息例如常用的 email、wechat、slack、webhook 等消息通知方式receivers:# 接受者名称-name:web.hook# webhook URLwebhook_configs:-url:http://127.0.0.1:9111/alertmanager/hook重新启动查看控制台当前是没有信息提示的2.2.4 模拟告警触发关掉监控的Spring Boot程序Prometheus显示服务掉线查看Alertmanager控制台发现收到了一条告警通知在查看我们定义的webhook接口也收到了告警信息
延伸阅读

更多相关文章

2026/10/4 20:55:56

学生课程汇报PPT,哪个AI工具最好用?我实测了6款,结论有点意外

又到了期末汇报季,朋友圈里哀嚎一片——“PPT做到凌晨三点”“排版排到怀疑人生”“模板翻了两小时还没找到合适的”…… 这场景我太熟了。做课程汇报这件事,说难不难,说简单吧——翻模板、搭框架、填内容、调字体、对齐元素,一套…

2026/10/3 13:47:58

Redis十年版本演进:从2.6到7.0的核心特性与实战选型指南

1. 项目概述:一次穿越Redis十年的版本特性巡礼 如果你在项目中用过Redis,大概率会和我一样,从某个版本开始,一路跟着它升级。从最初简单暴力的内存缓存,到如今功能繁多的多模数据库,Redis的每个大版本更新都…

2026/10/6 3:48:32

ET框架斗地主Demo实战:棋牌服务端核心机制与踩坑全解

简介:这是一份基于ET框架(4.0版本)开发的斗地主Demo工程,面向希望入门ET游戏服务器框架的开发者,尤其适合具备一定C#和Unity基础、想了解分布式游戏架构与服务器客户端联调的初学者。包体为7z压缩格式,共10…

2026/10/6 3:48:32

会议室预订预约小程序前后台源码:防超订与自动释放实战

简介:这是一套面向写字楼、高校及创业园区的会议室在线预订系统源码,采用小程序前端与原生PHP后台组合,适合需要快速搭建预约平台的开发者或企业二次开发。前端基于小程序实现会议室查询、时段选择与预订操作,后台负责资源管理、订…

2026/10/6 3:48:32

2核2G云服务器架设游戏服务器的真实边界与部署技巧

2核2G的云服务器能不能架游戏?这个问题我这些年被问过不下几十次。问的人里有大学生、有刚组队做小游戏的朋友、也有单纯想开个私服带同学玩的老玩家。我的回答一直很直接:能,但前提是你得先搞明白自己架的是什么游戏、打算让几个人在线。这两…

2026/10/6 3:48:32

FreeCAD Expression Framework源码解析:参数化建模的表达式引擎

“FreeCAD没有齿轮工具”,这句社区热评我关注了很久。乍一听是吐槽,往深了想其实点中了FreeCAD和传统商业CAD最根本的差异:它不愿意把每一个你需要的形状都做成现成命令,而是把“让模型自己长出来”的能力交给你。支撑这个能力的底…

2026/10/6 3:43:32

Python+PySpark+DeepSeek-R1实现弹幕情感分析与推荐系统

每年到这个时间点,总有学弟学妹拿着差不多的题目来问我:能不能用 Python 做弹幕情感分析,能不能把大模型接进去,能不能再加一个推荐系统和一个可视化大屏凑成一整套毕业设计。说实话,这种题目现在很常见,但…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/5 17:38:27

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 0:03:23

MR25H40CDF+STM32F031C6工业级高可靠数据存储方案

1. 项目概述:为什么在工业现场非得用 MR25H40CDF 配 STM32F031C6 做数据存储?在工厂产线的 PLC 控制柜里、在风电变流器的散热片背面、在矿井监测终端的金属外壳下,你经常能看到一块指甲盖大小的黑色芯片——它既不是 Flash,也不是…

2026/10/6 0:03:23

MRAM+STM32工业断电数据保全实战指南

1. 项目概述:为什么在工业现场非得用 MR25H40CDF 配 STM32F031C6 做数据存储?在工厂产线的PLC柜里、在野外无人值守的环境监测终端里、在高速运转的包装机控制板上,你经常能看到一块指甲盖大小的黑色芯片,旁边贴着“MR25H40CDF”丝…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑