Prometheus 告警规则

概念

    警报规则允许您根据 Prometheus 表达式语言表达式定义警报条件,并将有关触发警报的通知发送到外部服务。每当警报表达式在给定的时间点产生一个或多个向量元素时,警报对于这些元素的标签集算作活动。

    类似于记录规则, 告警规则(Alerting rule) 也定义在独立的文件中, 而后由 Prometheus 在 rule_files 配置段中加载,如下配置

    告警规则模板地址: https://awesome-prometheus-alerts.grep.to/rules.html#host-and-hardware

rule_files:
  - recording_rules/*.yaml
  - alerting_rules/*.yml          # 告警规则文件路径

触发告警

   Prometheus以一个固定的周期来评估所有告警规则,其值由 evaluate_interval 参数定义,默认为15s;在每个评估周期内,Prometheus会计算每条告警规则中的布尔表达式并更新告警状态;
  未使用for子句的告警,会自动从Inactive状态转为Firing,它只需要一个评估周期便能触发;而带有for子句的告警状态将先转为Pending,而后才到Firing,因而至少需要两个评估周期才能触发;
  处于Pending状态的告警,在其持续时长满足for子句的定义之前,若布尔表达式的值转回了false,则告警状态将转回Inactive;
  由此可见,经由Pending再到Firing的转换,可以确保告警更有效,且不会来回浮动;
Prometheus将为Pending和Firing状态中的每个告警创建指标,该指标名称为ALERT,其值固定为1,并且在告警处于Pending和Firing状态期间存在;在此之后,它将不接收任何更新,直到过期;

告警规则

    警报规则在 Prometheus 中的配置方式与记录规则相同

指标含义

选项   含义
groups 配置顶级,用于定义一个监控组
- name  规则名称
rules 规则
- alert 告警规则的名称。
expr 表达式基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件。
for   评估等待时间, 在等待时状态为pending, 满足时长告警状态为 firing, 恢复则为 inactive状态.
labels 自定义标签
annotations

用于指定一组附加信息,比如用于描述告警详细信息的文字等,annotations的内容在告警产生时会一同作为参数发送到Alertmanager。summary描述告警的概要信息,description用于描述告警的详细信息。同时Alertmanager的UI也会根据这两个标签值,显示告警信息。

实例规则

groups:
- name: Allinstances     # 组名
  rules:
  - alert: instanceDown  # 规则名称
    expr: up == 0        # 匹配规则 实例宕机 promQl 表达式
    for: 10s             # 检测持续时间
    annotations:         # 告警自己也是一个时间序列 注解
      title: "instance down" # 告警标题
      description: 'Instance has been down for more than 1 minute.' # 告警详情
    labels:              # 新标签
      serverity: "critical"
      group_by: "node"

  - alert: 主机内存不足
    expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 99
    for: 10s
    labels:
      severity: "critical"
    annotations:
      summary: 主机内存不足 (主机地址 {{ $labels.instance }})
      description: "主机内存已满 (< 10% left)\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"

告警模板

 
Prometheus支持在告警中使用模板;
  • 告警模板是指在告警中的标签和注解上引用时间序列的标签和样本值的方法;
  • 它使用标准的Go语法,并暴露一些包含时间标签和值的变量;
    • 标签引用: {{ $label.<label_name> }}
    • 指标样本值引用: {{ $value }}

若要在description注解中引用触发告警的时间序列上的instance和job标签的值,可分别使用“{{ $label.instance }}”和“{{ $label.job }}”;

示例

[root@ops prometheus]# cat alerting_rules/instance-down.yml 
groups:
- name: Allinstances     # 组名
  rules:
  - alert: instanceDown  # 规则名称
    expr: up == 0        # 匹配规则 实例宕机 promQl 表达式
    for: 10s             # 检测持续时间
    annotations:         # 告警自己也是一个时间序列 注解
      summary: 主机宕机 (主机地址 {{ $labels.instance }})
      description: '实例宕机超过 1m. 当前值为: {{ $value }}' # 告警详情
    labels:              # 新标签
      serverity: "critical"

 Prometheus 页面检查配置

 

posted @ 2021-11-08 23:29  闫世成  阅读(442)  评论(0编辑  收藏  举报