首页 > 其他分享 >Prometheus监控实战系列十二:配置告警规则

Prometheus监控实战系列十二:配置告警规则

时间:2023-08-29 15:55:37浏览次数:37  
标签:实战 node Alertmanager Prometheus 警报 规则 告警

在上篇的文章中,我们通过Grafana实现了监控可视化。而对于运维监控而言,除了监控展示以外,另一个重要的需求无疑就是告警了。良好的告警可以帮助运维人员及时的发现问题,处理问题并防范于未然,是运维工作中不可或缺的重要手段。

 

在Prometheus的架构中,告警功能由Prometheus Server和Alertmanager 协同完成,Prometheus Server负责收集目标实例的指标,定义告警规则以及产生警报,并将相关的警报信息发送到Alertmanager。

 

Alertmanager则负责对告警信息进行管理 ,根据配置的接收人信息,将告警发送到对应的接收人与介质 。

一. 添加告警规则

告警规则配置在独立的文件中,文件格式为yml,并在prometheus.yml文件的rule_files模块中进行引用。如下

rule_files:     - "/etc/prometheus/rules/myrules.yml"

 

引用的文件路径支持正则表达式方式,如果有多个文件时,可以用下列的方式匹配

rule_files:     - "/etc/prometheus/rules/*.yml"       - "/data/prometheus/rules/prd-*.yml"

 

默认情况下,Prometheus会每隔一分钟对这些告警规则进行计算,如果用户想定义自己的告警计算周期,可在global 模块中配置evaluation_interval参数来控制。

global:      evaluation_interval: 15s

 

在告警规则文件中, 可以将一组相关的规则设置定义在一个group下,在每一个group中我们可以定义多个告警规则。

如下是一条标准的告警规则,用于检测实例状态是否正常。

groups:- name: node_alert  rules:  - alert: node_down    expr: up{job="node-exporter"} != 1    for: 1m    labels:      level: critical    annotations:      description: "The node is Down more than 1 minute!"      summary:  "The  node is  down"   

 

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

 

alert:告警规则的名称,在每一个group中,规则名称必须是唯一的。

 

expr:基于PromQL表达式配置的规则条件,用于计算相关的时间序列指标是否满足规则。

 

for :评估等待时间,可选参数。当相关指标触发规则后,在for定义的时间区间内该规则会处于Pending状态,在达到该时间后规则状态变成Firing,并发送告警信息到Alertmanager。

 

labels:自定义标签, 允许用户指定要添加到告警信息上的一组附加标签。

 

annotations: 用于指定一组附加信息,如用于描述告警的信息文字等,本示例中 summary用于描述主要信息,description用于描述详细的告警内容。

二. 使用模板

模板(template)是一种在警报中使用时间序列数据的标签和值的方法,可用于告警中的注解和标签。模板使用标准的Go模板语法,并暴露一些包含时间序列的标签和值的变量。

 

通过{{ $lable.<lablename>}}变量可以访问当前告警实例中指定标签的值,{{ $value }}则可以获取当前PromQL表达式计算的样本值。

# To insert a firing element's label values:{{ $labels.<labelname> }}# To insert the numeric expression value of the firing element:{{ $value }}

 

在实际使用中,可以通过模板的方式优化summary与description内容的可读性。比如,在描述中插入了实例信息以及PromQL表达式计算的样本值。

如下:

groups:- name: node_alert  rules:  - alert: cpu_alert    expr: 100 -avg(irate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance)* 100 > 85    for: 5m    labels:      level: warning    annotations:      description: "instance: {{ $labels.instance }} ,cpu usage is too high ! value: {{$value}}"      summary:  "cpu usage is too high"    

三. 规则应用

配置好规则文件后,可以使用 curl -XPOST  http://localhost:9090/-/reload 或者重启Prometheus的方式让规则更新。当顺利加载规则后,可以在Prometheus的“Status”- “Rules”页面查看到相关的规则状态信息。

 

当告警规则生效后,可以在Alerts页面查看警报状态。

 

四. 警报状态

Prometheus的警报有如下几种状态:

inactive :警报未被触发。

Pending:警报已被触发,但还未满足for参数定义的持续时间。

Firing:警报被触发警,并满足for定义的持续时间的

 

告警规则的状态变化如下所示,默认状态为inactive,当规则被触发后将变为Pending,在达到持续时间后变成Firing状态。如果配置的规则没有for子句,那么当规则触发时,警报会自动从inactive转换为Firing,而没有任何的等待周期。

 

如果配置了Alertmanager的地址,当警报状态为Firing时,Prometheus会将相关的告警信息转发到Alertmanager,并由其进行告警信息的发送。在恢复正常后,警报状态重新变回inactive。

 

结语

本文介绍了关于Prometheus告警规则的配置,到目前为止,我们只能通过Prometheus UI查看当前警报的活动状态。Prometheus自身并不提供告警发送功能,其需要与Alertmanager结合,才能实现警报的管理与发送。限制篇幅原因,Alertmanager的讲解放到下一篇文章中介绍。

标签:实战,node,Alertmanager,Prometheus,警报,规则,告警
From: https://www.cnblogs.com/quqibinggan/p/17665024.html

相关文章

  • Prometheus监控实战系列八:标签重写
    标签重写(Relabeling)是Prometheus一个非常有用的功能,它可以在任务拉取(scraping)阶段前,修改target和它的labels。该功能在日常的监控中常常会使用到,值得我们好好了解。 一. 默认标签 默认情况下,Prometheus加载targets后,都会包含一些默认的标签,其中以__作为前置的标签是在系......
  • Prometheus监控实战系列九:主机监控
    前面我们介绍了Prometheus的基础概念,包括数据格式、PromQL语法等,本节我们将讲解如何通过Prometheus实现主机的监控。 Prometheus使用各种Exporter来监控资源。Exporter可以看成是监控的agent端,它负责收集对应资源的指标,并提供接口给到Prometheus读取。不同资源的监控对应不同......
  • Prometheus监控运维实战十: 主机监控指标
    在上一篇文章中我们学习了如何通过node-exporter获取主机监控信息。但安装好监控只是第一步,我们还需要知道哪些监控指标是我们需要关注的。本文将对Prometheus相关的主机监控指标进行介绍。一.CPU监控CPU负载node_load1node_load5node_load15 以上三个指标为主机的CPU平均......
  • Prometheus监控实战系列七:任务与实例
    一. 功能概述 任务与实例,是Prometheus监控中经常会提到的词汇。在其术语中,每一个提供样本数据的端点称为一个实例(instance),它可以是各种exporter,如node-exporter、mysql-exporter,也可以是你自己开发的一个服务。只要提供符合prometheus要求的数据格式,并允许通过HTTP请求获取......
  • 实操教程 | 触发器实现 Apache DolphinScheduler 失败钉钉自动告警
    作者|sqlboy-yuzhenc背景介绍在实际应用中,我们经常需要将特定的任务通知给特定的人,虽然ApacheDolphinScheduler在安全中心提供了告警组和告警实例,但是配置起来相对复杂,并且还需要在定时调度时指定告警组。通过这篇文章,你将学到一个简单的方法,无需任何配置,只需要在用户表(t_......
  • Prometheus监控实战系列五:PromQL语法(上篇)
    PromQL是Prometheus内置的数据查询DSL(DomainSpecificLanguage)语言,其提供对时间序列丰富的查询功能,聚合以及逻辑运算能力的支持。当前,PromQL被广泛应用在Prometheus的日常使用中,包括数据查询、可视化、告警处理等,可以说,掌握PromQL是熟练使用prometheus的必备条件。 本文将通......
  • Prometheus监控实战系列六:PromQL语法(下篇)
    一.操作符在PromQL的查询中,还可以通过表达式操作符,进行更加复杂的结果查询,常见的操作有下列几种。数学运算符数据运算符使用的加、减、乘、除等方式,对样本值进行计算,并返回计算后的结果。例如,通过process_virtual_memory_bytes获取到的内存值单位为byte,我们希望转换为GB为单......
  • Prometheus监控实战系列一: 产品介绍
    一.概述 Promehteus是一款近年来非常火热的容器监控系统,它使用go语言开发,设计思路来源于Google的Borgmom(一个监控容器平台的系统)。 产品由前谷歌SRE MattT.Proudd发起开发,并在其加入SoundCloud公司后,与另一位工程师JuliusVolz合伙推出,将其开源发布。 2016年,由Googl......
  • Prometheus监控实战系列二: 安装部署
    Prometheus支持多种操作系统,例如Linux、Windows和MaxOSX等。在产品官网上提供了独立的二进制文件进行下载,可下载对应的tar包并在相应系统的服务器上进行安装部署。 当然,做为与容器有着紧密联系的监控系统,Promethesu也可以很方便的通过docker、kubernetes等容器平台进行部署。......
  • Prometheus监控实战系列三:配置介绍
    Prometheus使用名为prometheus.yml的配置文件进行设置,通过在启动时指定相关的文件,对配置内容进行加载。该配置文件分为四个模块:global(全局配置)、alerting(告警配置)、rule_files(规则配置)、scrape_configs(目标拉取配置),本文将分别对其进行讲解介绍。一.global 用于定义promethe......