【监控】Prometheus中的告警机制介绍

prometheus实战之三:告警规则_验证prometheus告警规则-CSDN博客

Prometheus是一款开源的系统监控和告警工具,其告警功能是保障系统稳定运行的重要部分。以下将从告警的整体架构、核心概念、规则配置以及具体的通知流程等方面对Prometheus中的告警进行介绍。

告警架构

Prometheus的告警管理分为两部分。首先,在Prometheus服务端设置告警规则,Prometheus服务器端会基于这些规则对采集到的监控数据进行评估,当满足告警条件时,就会向Alertmanager发送告警。然后,由Alertmanager负责管理这些告警,包括静默、抑制、聚合以及通过电子邮件、PagerDuty和HipChat等方法发送通知。

核心概念

  • 分组(Grouping):分组是将类似性质的告警分类为单个通知的机制。在大型中断期间,例如网络分区导致许多服务实例无法访问数据库,Prometheus中针对每个服务实例的告警规则会被触发,数百个告警发送到Alertmanager。此时,可将Alertmanager配置为按群集和alertname对警报进行分组,这样用户就能收到单个紧凑通知,同时确切了解哪些服务实例受到影响。通知的接收器通过配置文件中的路由树来配置告警分组,并定时进行分组通知。
  • 抑制(Inhibition):如果某些特定的告警已经触发,那么可以配置Alertmanager抑制其他相关告警。例如,当某个告警触发表示无法访问整个集群时,可让Alertmanager在该特定告警触发时,将与该集群有关的所有其他告警静音,防止收到数百或数千个与实际问题无关的告警通知。
  • 静默(Silences):静默是在给定时间内简单地静音告警的方法。基于匹配器配置静默,就像路由树一样。检查告警是否匹配或者正则表达式匹配静默,如果匹配,则不会发送该告警的通知。可以在Alertmanager的Web界面中配置静默。
global:resolve_timeout: 5m  # 告警解决后等待5分钟标记为已解决route:receiver: 'default-receiver'group_by: ['alertname']group_wait: 30sgroup_interval: 5mrepeat_interval: 12hreceivers:
- name: 'default-receiver'email_configs:- to: 'ops@example.com'inhibit_rules:
- source_match:alertname: 'ClusterCritical'target_match:cluster: '{{ .labels.cluster }}'equal: ['cluster']# 预定义静默(可选,通常通过Web界面动态管理)
silences:
- matchers:- name: 'env'value: 'staging'startsAt: '2023-10-05T09:00:00Z'endsAt: '2023-10-05T18:00:00Z'comment: 'Staging environment maintenance'
关键说明
  1. 分组(Grouping):通过 group_by 标签组合告警,减少通知数量;group_waitgroup_interval 控制合并策略。
  2. 抑制(Inhibition):通过父子告警关系屏蔽次要信息,需确保 source_matchtarget_match 的标签关联。
  3. 静默(Silences):临时屏蔽告警,支持动态配置(Web 界面)和静态配置(文件),适合计划内维护或临时故障屏蔽。

告警规则配置

一条告警规则主要由以下几部分组成:

  • alert:告警规则的名称,用于唯一标识该告警规则。
  • expr:用于进行报警规则的PromQL查询语句,通过该语句定义告警触发的条件。例如,设定CPU利用率、内存使用量等性能指标的阈值,当指标在某个时间段内多次触发该阈值时,视为满足告警条件。
  • for:评估等待时间(Pending Duration),表示只有当触发条件持续一段时间后才发送告警,在等待期间新产生的告警状态为pending。
  • labels:自定义标签,允许用户指定额外的标签列表,把它们附加在告警上,用于对告警进行分类和标识。
  • annotations:指定了另一组标签,它们不被当做告警实例的身份标识,通常用于存储一些额外的信息,如告警的描述、解决方法等,用于报警信息的展示。

告警通知流程

Prometheus以scrape_interval(默认为1m)的规则周期从监控目标上收集信息,并将监控信息持久存储在其本地存储上。然后以evaluation_interval(默认为1m)的规则周期对告警规则做定期计算。当表达式为真时,告警状态切换到pending,若在下个计算周期表达式仍为真,且符合for持续时间,告警状态变更为active,并将告警从Prometheus发送给Alertmanager。Alertmanager接收告警后,根据配置的路由规则、抑制规则和静默规则等对告警进行处理,最终将告警通过配置好的通知方式发送给相关人员。

例子

以下是一些Prometheus告警规则的例子:

  • 实例宕机告警
- alert: InstanceDownexpr: up == 0for: 1mlabels:serverity: pageannotations:summary: "Instance {{ $labels.instance }} down"description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minute."
- **规则内容**:
- **解释**:用于检测job的状态,当持续1分钟获取不到指标数据(即 `up == 0`)时,触发告警,将告警发送给Alertmanager。
  • CPU使用率过高告警
- name: docker_alertsrules:- alert: HighCPUUsageexpr: sum(rate(container_cpu_usage_seconds_total{image!=""}[1m])) / sum(machine_cpu_cores) > 0.9labels:severity: criticalannotations:description: "The container {{ $labels.container_name }} is using more than 90% of CPU for over 1 minute."
- **规则内容**:
- **解释**:通过计算容器的CPU使用率,当容器的CPU使用率超过90%并持续1分钟时,触发 `HighCPUUsage` 告警。
  • 内存使用率过高告警
- alert: MemoryUsageHighexpr: ((node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Buffers_bytes + node_memory_Cached_bytes)) / node_memory_MemTotal_bytes) * 100 > 80labels:severity: warningannotations:summary: "Memory usage is high"description: "Memory usage on {{ $labels.instance }} is above 80%."
- **规则内容**:
- **解释**:计算主机的内存使用率,当内存使用率超过80%时触发告警。
  • 接口请求异常告警
- alert: InterfaceRequestExceptionexpr: http_server_requests_seconds_count{exception!="", job="<app_name>", method="<method>", uri="<uri>"} > 0for: 5mlabels:severity: errorannotations:summary: "Interface request exception"description: "There is an exception in the interface request of job {{ $labels.job }}, method {{ $labels.method }}, uri {{ $labels.uri }}."
- **规则内容**:
- **解释**:当指定应用(`<app_name>`)、指定方法(`<method>`)和指定接口地址(`<uri>`)的请求出现异常,且异常持续5分钟时触发告警。

总结

Prometheus中的告警机制通过灵活的规则配置和强大的Alertmanager组件,能够帮助用户及时发现系统中的问题,并有效地管理和处理告警信息,从而保障系统的稳定运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/82656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

53、用例(Use Case)详解

1. 定义与核心概念 用例&#xff08;Use Case&#xff09; 是软件工程中用于描述系统功能需求的核心工具&#xff0c;它通过结构化的方式定义系统与外部参与者&#xff08;用户、其他系统&#xff09;之间的交互行为&#xff0c;以实现具体的业务目标。用例强调从用户视角出发…

对比Redis与向量数据库(如Milvus)在AI中的应用

对比Redis与向量数据库&#xff08;如Milvus&#xff09;在AI中的应用 在AI架构中&#xff0c;缓存系统的设计直接影响响应速度、资源成本以及推理路径是否高效。而面对不同的AI业务诉求&#xff0c;选用什么类型的缓存系统、如何搭配&#xff0c;往往是系统架构设计中必须深入…

Oracle 的 MOVE 操作是否重建表?

Oracle 的 MOVE 操作是否重建表&#xff1f; Oracle 的 ALTER TABLE ... MOVE 操作实质上是重建表的物理存储结构&#xff0c;但保留表的逻辑定义不变。 MOVE 操作的本质 物理重建&#xff1a; 创建新的数据段&#xff08;物理存储结构&#xff09;将原表数据按顺序重新插入到…

数据库中表的设计规范

表的结构 列&#xff1a;由多个字段构成&#xff0c;每个字段存储单一数据项&#xff0c;列的先后顺序对表没有影响 行&#xff1a;记录&#xff0c;一个表中不能存在完全相同的两行&#xff0c;行的顺序对表没有影响 主键&#xff1a;primary key 表中的一列或多列组合起来…

[学习]C语言指针函数与函数指针详解(代码示例)

C语言指针函数与函数指针详解 文章目录 C语言指针函数与函数指针详解一、引言二、指针函数&#xff08;函数返回指针&#xff09;定义与语法典型应用场景注意事项 三、函数指针&#xff08;指向函数的指针&#xff09;定义与声明初始化与调用赋值方式调用语法 高级应用回调函数…

Python 实现桶排序详解

1. 核心原理 桶排序是一种非比较型排序算法&#xff0c;通过将数据分配到多个“桶”中&#xff0c;每个桶单独排序后再合并。其核心步骤包括&#xff1a; 分桶&#xff1a;根据元素的范围或分布&#xff0c;将数据分配到有限数量的桶中。桶内排序&#xff1a;对每个非空桶内的…

brep2seq 论文笔记

Brep2Seq: a dataset and hierarchical deep learning network for reconstruction and generation of computer-aided design models | Journal of Computational Design and Engineering | Oxford Academic 这段文本描述了一个多头自注意力机制&#xff08;MultiHead Attenti…

在 LangGraph 中集成 Mem0 记忆系统教程

简介 LangGraph 是一个强大的对话流程编排框架&#xff0c;而 Mem0 则是一个高效的记忆系统。本教程将介绍如何将两者结合&#xff0c;创建一个具有记忆能力的客服助手系统。 环境准备 首先安装必要的依赖&#xff1a; pip install langgraph mem0 langchain openai基础配置…

ceph 报错 full ratio(s) out of order

full ratio(s) out of order你遇到的错误信息: full ratio(s) out of order说明你设置的 OSD 空间使用阈值之间的数值顺序不正确,即: nearfull_ratio ≤ backfillfull_ratio ≤ full_ratio ≤ osd_failsafe_full_ratio如果它们的关系不满足这个顺序,Ceph 就会报这个错误。…

NB-IoT NPUSCH(三)-资源映射

资源映射单独做一章节&#xff0c;是因为NPUSCH的资源映射比较复杂。与LTE不同&#xff0c;为了提高数据传输的质量&#xff0c;NB-IoT的数据会有重复传输。NPUSCH一开始生成的TBS只与子载波个数、RU个数有关&#xff0c;与重复次数没有关系。初始产生的数据为 个时隙&#xff…

华为OD机试真题——荒岛求生(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

2025 B卷 200分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

centos7安装MySQL(保姆级教学)

在 Linux 系统的软件管理中&#xff0c;YUM&#xff08;Yellowdog Updater, Modified&#xff09;包管理器是不可或缺的工具&#xff0c;而 YUM 源的选择与配置直接影响着软件安装与更新的效率。本文将深入解析网络 YUM 源的分类&#xff0c;详细介绍如何使用知名平台提供的 YU…

DeepSeek 赋能教育游戏化:AI 重构学习体验的技术密码

目录 一、引言&#xff1a;教育游戏化与 DeepSeek 的相遇二、DeepSeek 技术剖析2.1 核心架构2.2 关键技术 三、教育游戏化设计的奥秘3.1 概念与意义3.2 常见方法与元素3.3 成功案例借鉴 四、DeepSeek 在教育游戏化设计中的多面应用4.1 个性化学习路径打造4.2 智能教学辅助工具4…

WPF命令与MVVM模式:打造优雅的应用程序架构

🎮 打造优雅的应用程序架构 1. 🧩 命令系统基础1.1 🤔 为什么需要命令?1.2 🏗️ ICommand接口1.3 🛠️ 实现基本命令2. 🏛️ MVVM模式详解2.1 🧱 MVVM三大组件2.2 🏗️ 创建ViewModel基类2.3 🎯 典型ViewModel示例3. 🧩 命令绑定实战3.1 🎨 View中的命令…

真实案例拆解:智能AI客服系统中的两类缓存协同

真实案例拆解:智能客服系统中的两类缓存协同 在AI客服系统中,“响应速度”与“语义准确性”是一对天然的矛盾体。为了实现秒级应答与智能理解的双重目标,系统需要在技术架构中融合精确命中的缓存系统(如Redis)与模糊语义识别的向量数据库(如Milvus)。这两种能力的结合,…

FastAPI与MongoDB分片集群:异步数据路由与聚合优化

title: FastAPI与MongoDB分片集群:异步数据路由与聚合优化 date: 2025/05/26 16:04:31 updated: 2025/05/26 16:04:31 author: cmdragon excerpt: FastAPI与MongoDB分片集群集成实战探讨了分片集群的核心概念、Motor驱动配置技巧、分片数据路由策略、聚合管道高级应用、分片…

一起学数据结构和算法(三)| 字符串(线性结构)

字符串&#xff08;String&#xff09; 字符串是由字符组成的有限序列&#xff0c;在计算机中通常以字符数组形式存储&#xff0c;支持拼接、查找、替换等操作。 简介 字符串是计算机科学中最常用的数据类型之一&#xff0c;由一系列字符组成的有限序列。在大多数编程语言中&…

2025电工杯数学建模竞赛A题 光伏电站发电功率日前预测问题 保姆级教程讲解|模型讲解

完整内容请看文章最下面的推广群 2025电工杯数学建模竞赛 A题保姆级分析完整思路代码数据教学 2025电工杯 A题保姆级教程思路分析 DS数模-全国大学生电工数学建模&#xff08;电工杯&#xff09; A题保姆级教程思路分析 A题&#xff1a;光伏电站发电功率日前预测问题 下面我…

React Native 拼音及拼音首字母搜索组件开发

写在前面 “用户说找不到联系人&#xff1f;拼音搜索功能必须安排上&#xff01;” —— 当产品经理第N次提出这个需求时&#xff0c;我意识到需要开发一个强大的拼音搜索组件。本文将详细介绍如何开发一个支持拼音匹配、首字母搜索的React Native搜索组件&#xff0c;让你的应…

springboot--实战--大事件--用户接口开发

开发模式&环境搭建 开发模式&#xff1a; 前后端分离开发 前端程序员写前端页面&#xff0c;后端程序员写后端的接口&#xff0c;前端工程发送请求来访问后台&#xff0c;后台处理完请求后要给前端相应对应的数据。 还需要一套标准来约束即接口文档&#xff0c;在接口文…