Prometheus + Alertmanager 实现监控预警

prometheus学习圣经Part1:使用prometheus+Grafana实现指标监控

prometheus学习圣经Part2:使用prometheus+Alertmanager实现指标预警

1. prometheus + alertmanager

监控和告警,是孪生兄弟,监控就需要报警,没有报警的监控是不完善的。

那么prometheus生态,报警究竟是怎么实现呢,告警组件它又是怎么和prometheus一起协调,并且完成报警的发送呢?

先来看一下, prometheus的官方生态架构图

图片

prometheus可以抓取exporter中暴露出来的指标数据并且存储,prometheus有自己的查询语句PromQL,

grafana面板中的显示的都是PromQL查询prometheus时序数据库出来的数据。

和grafana一样,告警组件alertmanager也是依靠prometheus的PromQL,具体的流程大致是:在prometheus中可以定义一些PromQL语句,当语句查询出来的值超过预定的阈值,prometheus发送报警给alertmanager了,

alertmanager负责把prometheus发送过去的相关的报警指标分类,并且执行报警(微信,邮件,企微)

Prometheus的架构中被划分为两个部分,

  1. 在Prometheus Server中定义告警规则,以及产生告警,

  2. Alertmanager组件则用于处理这些由Prometheus产生的告警。

    Alertmanager即Prometheus体系中告警的统一处理中心。Alertmanager提供了多种内置第三方告警通知方式,同时还提供了对Webhook通知的支持,通过Webhook用户可以完成对告警更多个性化的扩展。

prometheus触发一条告警的过程: prometheus—>触发阈值—>超出持续时间—>alertmanager—>分组|抑制|静默—>媒体类型—>邮件|钉钉|微信等。

图片

图片

Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉, slack等。

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

  1. 告警名称:用户需要为告警规则命名,当然对于命名而言,需要能够直接表达出该告警的主要内容

  2. 告警规则:告警规则实际上主要由PromQL进行定义,其实际意义是当表达式(PromQL)查询结果持续多长时间(During)后出发告警

2.自定义告警规则

Prometheus中的告警规则允许你基于PromQL表达式定义告警触发条件,Prometheus后端对这些触发规则进行周期性计算,当满足触发条件后则会触发告警通知。

默认情况下,用户可以通过Prometheus的Web界面查看这些告警规则以及告警的触发状态。

当Promthues与Alertmanager关联之后,可以将告警发送到外部服务如Alertmanager中并通过Alertmanager可以对这些告警进行进一步的处理。

prometheus 告警规则的案例

先来一个简单点的案例

groups:
- name: example
  rules:
  - alert: HighErrorRate
    expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5
    for: 10m
    labels:
      severity: page
    annotations:
      summary: High request latency
      description: description info

用来做直接内存阈告警的例子:

groups:
# 报警组组名称
- name: DirectMemoryAlert
  #报警组规则
  rules:
   #告警名称,需唯一
  - alert: DirectMemoryAlert
    #promQL表达式
    expr:  gateway_direct_memory  > 5
    #满足此表达式持续时间超过for规定的时间才会触发此报警
    for: 1m
    labels:
      #严重级别
      severity: page
    annotations:
     #发出的告警标题
      summary: "实例 {
  { $labels.instance }} 直接内存使用超过 5M"
      #发出的告警内容
      description: "实例{
  { $labels.instance }} 直接内存使用超过 5M, (当前值为: {
  { $value }})M"

可以将一组相关的规则设置定义在一个group下。 在每一个group中定义多个告警规则(rule)。

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

  • alert:告警规则的名称。

  • expr:基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件。

  • for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在等待期间新产生告警的状态为pending。

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

  • annotations:用于指定一组附加信息,比如用于描述告警详细信息的文字等,annotations的内容在告警产生时会一同作为参数发送到Alertmanager。

让Prometheus启用定义的告警规则

在Prometheus全局配置文件中,通过 rule_files 指定一组告警规则文件的访问路径,路径下存放告警规则文件

Prometheus启动后会自动扫描这些路径下告警规则文件中定义的内容,并且根据这些规则计算是否向外部发送通知:

rule_files:
  [ - <filepath_glob> ... ]

默认情况下, Prometheus会每分钟对这些告警规则进行计算,注意周期是 每分钟。

如果用户想 自定义的告警计算周期 ,则可以通过evaluation_interval来覆盖默认的计算周期:

global:
  [ evaluation_interval: <duration> | default = 1m ]
prometheus告警规则文件的模板化

在告警规则文件的annotations中,有两个重要的、关于规则的描述信息项目:

  • summary:描述告警的概要信息,

  • description: 描述告警的详细信息。

除了Prometheus之外,同时Alertmanager的UI也会根据这两个标签值,显示告警信息。

为了提升可读性,Prometheus支持模板化label和annotations的中标签的值,通过表达式去访问。

比如,通过下面两个表达式,可以访问数据序列中的 标签和样本值:

  • $labe

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值