ThankNeko's Blog ThankNeko's Blog
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)

Hoshinozora

尽人事,听天命。
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)
  • 操作系统

  • 虚拟化服务

  • 数据库服务

  • 监控服务

    • Prometheus笔记

      • Prometheus介绍
      • Prometheus部署使用
      • Prometheus查询
      • Prometheus生态组件
      • Prometheus告警
        • Prometheus告警介绍
          • 告警介绍
          • 告警规则
        • AlertManager介绍
          • 介绍
          • 功能
        • AlertManager部署配置
        • Prometheus告警配置
    • Zabbix笔记

  • Web服务

  • 数据处理

  • Ops
  • 监控服务
  • Prometheus笔记
Hoshinozora
2024-04-07
目录

Prometheus告警

# Prometheus告警介绍

# 告警介绍

在监控体系中,Prometheus本身并没有告警功能,它仅仅负责评估告警规则并生成告警。具体的告警操作由Alertmanager负责,它用于处理告警,包括去重、分组、抑制和发送通知等。

# 告警规则

告警规则是由PromQL编写的布尔表达式,每次评估告警规则都会基于其查询的返回结果来判断是否触发告警,如果返回结果为false则表示正常,如果返回结果为true则表示异常,将触发告警。

# AlertManager介绍

# 介绍

Alertmanager是Prometheus监控系统的关键组件之一,专门负责处理由 Prometheus 服务器发送过来的告警。尽管Alertmanager是由Prometheus项目维护的,但它作为一个独立的组件运行,需要单独安装和配置。

它的设计目的是提供一种统一的告警处理方式,尽管它的客户端通常Prometheus,但也支持与其他监控工具集成,接收并处理来自它们的告警。

# 功能

# 分组 (Grouping)

分组规则可以将相似的告警合并为一组作为单个通知进行发送。减少告警通知的数量,即能避免告警风暴对接收者造成的干扰,也能避免关键信息的隐没。分组规则可以基于告警的标签来定义,如根据环境、应用或严重性等进行分组。

比如检测多个系统的运行状况,但因为停电导致所以系统不运行,只有告警系统在运行。这个时候如果没有配置分组就会报出很多相似的告警信息,而如果分组了的话,就可以防止出现很多相似的告警信息。

# 去重 (Deduplication)

去重规则能确保在一定时间内只发送一次通知,减少冗余的告警信息,使得告警通知更加清晰。

# 抑制 (Inhibition)

抑制规则用于暂时抑制某些告警通知。当特定条件满足时,可以抑制(即暂时不发送)某些告警通知。抑制是避免类似的级联告警的一种特性,从而让用户能将精力集中于真正的故障所在,而抑制其他关联告警。

比如某个组件告警了,原本依赖于它的其他组件也应该跟着报警,但通过抑制规则可以阻止依赖于该组件的其他组件也跟着报警。

# 静默 (Silent)

静默规则允许用户临时静默一组特定的告警通知。通过配置静默规则,可以指在一个特定时间内即便接收到告警,Alertmanager也不会真正向用户发送通知。

通常在系统例行维护期间,需要激活告警系统的静默特性,防止维护时一直报警。

# 路由 (Route)

路由规则用于告诉Alertmanager如何处理告警通知,它基于告警的标签进行匹配,并且可以嵌套,从而提供高度灵活的配置方式来处理当前告警通知的路径和行为。

路由规则可以按告警级别或分组,对特定的一个或一组接收人进行告警通知发送,以确保告警能够及时准确地被相应负责人处理。

# 告警媒介

Alertmanager支持多种告警媒介(即通知方式),包括但不限于电子邮件、钉钉、Webhook等。通过配置,可以实现将告警通知发送到几乎任何支持接收消息的系统或服务。

# AlertManager部署配置

  1. 下载并解压二进制包
https://prometheus.io/download/
1
  1. 配置AlertManager

vim ./alertmanager.yml

  • 全局配置
global:
  # 告警状态由存在变为恢复的等待时间
  # 如果指定时间内没有恢复会再次发送,它比route中配置的时间间隔优先级更高
  resolve_timeout: 5m
1
2
3
4
  • 路由配置
# 配置路由,定义告警通知的路径和行为
route:
  # 分组标签,指定告警根据哪些标签进行分组
  group_by: ['alertname']
  # 在同一组告警发送前等待的时间,这个是为了把更多的告警作为同一个批次发出
  group_wait: 30s
  # 同一组告警不同批次之间等待的时间
  group_interval: 5m
  # 重复告警的等待时间,收到的重复告警要等待多久后才再次发出
  repeat_interval: 1h
  # 默认接收者,如果没有匹配任何子路由,则使用此接收者
  receiver: 'default-receiver'

  # 子路由列表,每个子路由可以指定更具体的匹配规则和接收者
  routes:
      # 匹配标签,表示当告警标签包含env=pro和service=database时使用该子路由
    - match:
        env: pro
        service: database
      # 为匹配的告警指定接收者
      receiver: 'team-DB-email'
    # 使用正则表达式匹配标签,表示匹配service为web或api的告警
    - match_re:
        service: ^(web|api)$
      receiver: 'team-Webhook'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  • 接收者配置
# 配置接收者,定义了发送告警通知的具体方法
receivers:
    # 接收者名称,用于路由中引用
  - name: default-receiver
    # 邮件配置,定义发送邮件告警通知的参数
    email_configs:
        # 邮件接收地址
      - to: 'admin@example.com'
  - name: team-Webhook
    # Webhook配置
    webhook_configs:
        # 指定Webhook的目标URL
      - url: 'http://127.0.0.1:5001/'
        # 指定是否在恢复时也发送通知,默认false
        send_resolved: true
        # 指定额外的HTTP配置(可选)
        http_config:
          # 指定用于认证的BearerToken(可选)
          bearer_token: 'your-bearer-token'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

钉钉告警可以使用:https://github.com/timonwong/prometheus-webhook-dingtalk

  • 抑制配置
inhibit_rules:
    # 匹配源告警(触发抑制机制的告警)
  - source_match:
      # 匹配的告警名(可选)
      alertname: InstanceDown
      # 匹配的告警级别(可选)
      severity: 'critical'
    # 匹配目标告警(需要抑制的告警)
    target_match:
      severity: 'critical'
    # 源告警和目标告警在这些标签上的值必须相等,告警抑制才会生效,用于确保只有相关联的告警之间才会发生抑制
    equal: ["instance"]

    # 正则匹配源告警,与source_match的区别在于可以正则匹配
  - source_match_re:
      service: 'database-(.*)'
    # 正则匹配目标告警,与target_match的区别在于可以正则匹配
    target_match_re:
      service: 'webserver-(.*)'
    equal: ['instance'] 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

标签配置在告警规则的labels字段中,默认标签有:alertname、severity、instance、job

注意:需要确保源告警和目标告警的匹配配置不一致,也就是两者匹配到的必须是不同的告警,否则抑制不会生效。

# Prometheus告警配置

  • # 配置AlertManager信息

一般还会将AlertManager作为监控目标,配置方法同Targets配置。

# 静态配置方式
# 主配置文件prometheus.yml中添加以下配置
alerting:
  alertmanagers:
  - static_config:
    - targets:
      - 192.168.10.20:5001
1
2
3
4
5
6
7
# 文件发现配置方式
## 主配置文件prometheus.yml中添加以下配置
alerting:
  alertmanagers:
  - file_sd_configs:
    - files:
      - "targets/alertmanager.yml"

# 创建文件发现配置文件
# vim ./targets/alertmanager.yml
- targets:
  - 192.168.10.20:5001
  labels:
    app: alertmanager
    job: alertmanager
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  • # 配置告警规则

vim ./prometheus.yml

# 加载alert_rules文件夹内的文件到告警规则
rule_files:
  - "alert_rules/*.yml"
1
2
3

vim ./alert_rules/instances.yml

# 表示使用规则组,方便组织和管理告警规则
groups:
    # 规则组名称
  - name: AllInstances
    # 规则配置
    rules:
        # 告警规则名称
      - alert: HighRequestLatency
        # PromQL表达式,定义何时触发告警,结果需要是布尔值
        expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5
        # 触发条件满足多长时间后才真正触发告警,以避免短暂波动造成的误报
        for: 10m
        # 告警通知内容
        annotations:
          # 发送的告警通知标题
          title: "High request latency "
          # 发送的告警通知描述,{{ $value }}会替换为触发告警的PromQL表达式的实际值
          description: "This service has a mean request latency above 0.5s (current value: {{ $value }}s)"
        # 指定附加标签
        labels:
          # 告警级别标签(必带),可以自定义,但一般为以下三个级别:warning(警告)、critical(严重)、emergency(紧急)
          severity: critical
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  • 配置完后,如果是使用静态配置,则需要重启Prometheus使配置生效。
#Linux#监控#Prometheus#生态组件
Prometheus生态组件
Zabbix介绍与部署

← Prometheus生态组件 Zabbix介绍与部署→

最近更新
01
二〇二五年四月十七日随笔
04-17
02
二〇二五年四月十六日随笔
04-16
03
二〇二五年四月九日随笔
04-09
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Hoshinozora | MIT License
湘ICP备2022022820号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式