【Alertmanager】Alertmanager配置实现飞书告警

12 篇文章 0 订阅

目录

1、 Alertmanager实现告警理论知识

1.1 告警

1.2 Alertmanager常见概念

1.2.1、分组

1.2.2、抑制(Inhibition)

1.2.3、静默(Silences)

2、 Alertmanager安装配置

2.1 创建文件夹

2.2 配置模版 (好像不重要)

2.3 配置alertmanager.yml

3、启动容器

3.1 启动

3.2 验证

4、 修改prometheus的配置文件

4.1 新增以下内容

4.2 新增告警规则文件

4.3 重启 prometheus

4.4 查看所有的告警

5、部署prometheusAlert - 发送飞书告警

5.1 介绍

5.2 创建飞书机器人(略)

5.3 安装prometheusAlert

5.4 登录prometheusAlert

6 、修改Alertmanager配置文件

6.1 修改alertmanager.yml

6.2 配置完成后重启Alertmanager

7、飞书验证

7.1 查看报警

7.2 修改飞书模版的时区问题

8、 修改告警模板

9、告警的配置小结

9.1 从prometheus报警去找

9.2 从prometheus设置的报警yml文件当中去找 


前言:基于prometheus-alert+prometheus+alertmanager实现飞书告警

1、 Alertmanager实现告警理论知识

1.1 告警

使用 Prometheus 发出警报分为两部分。Prometheus 服务器的告警规则会将告警发送给Alertmanager。然后,Alertmanager 管理这些警报,包括静音、抑制、聚合和 通过电子邮件、随叫随到的通知系统和聊天平台等方法发送通知。
配置告警和通知的主要步骤如下:

  • 设置和配置 Alertmanager
  • 配置 Prometheus 与 Alertmanager 通信
  • 在 Prometheus 中创建报警规则

1.2 Alertmanager常见概念

Alertmanager 负责处理客户端应用程序(如 Prometheus 服务器)发送的警报。它负责消除重复、分组,并将它们路由到正确的接收器集成,如电子邮件、PagerDuty 或 OpsGenie。同时,它还负责静默和告警抑制。
以下是一些常见概念:

1.2.1、分组

分组将性质相似的警报分类为单个通知。当许多系统同时发生故障,可能同时触发数百到数千个警报时,这在较大的中断期间特别有用。
例如:当网络分区发生时,集群中正在运行数十或数百个服务实例。一半的服务实例不能再访问数据库。Prometheus的警报规则被配置为在每个服务实例无法与数据库通信时发送警报。结果,数百个警报被发送到Alertmanager。
作为用户,人们只想获得一个页面,同时仍然能够准确地看到哪些服务实例受到了影响。因此,我们可以配置Alertmanager,将警报按集群和alertname分组,这样它就会发送一个紧凑的通知。
警报分组、分组通知的定时以及这些通知的接收者由配置文件中的路由树配置。

1.2.2、抑制(Inhibition)

告警抑制,当在已经触发某些警告的情况下,压制与其相关的其他特定警告不发送通知
例如:当有一个警告触发,告知整个集群无法访问时,Alertmanager可以被配置为抑制与该集群相关的所有其他警告的通知。这有助于避免因为成百上千个不相关的警告触发而发送通知,从而帮助用户聚焦于实际的问题。
抑制是通过Alertmanager的配置文件来配置的。

1.2.3、静默(Silences)

静默是一种简单直接的方式来在特定时间内压制警告。静默的配置基于匹配器,就像路由树一样。传入的警告会检查是否匹配活跃静默中所有的等号或正则表达式匹配器。如果匹配,则不会为该警告发送任何通知。
静默是在Alertmanager的Web界面中进行配置的。

2、 Alertmanager安装配置

2.1 创建文件夹

mkdir -p /opt/alertmanager
 
chmod 777 -R  /opt/alertmanager
 
cd /opt/alertmanager
mkdir template 

 

2.2 配置模版 (好像不重要)

vi template/test.tmpl
{{ define "test.html" }}
  {{ range $i, $alert := .Alerts.Firing }}
    [报警项名]:{{ index $alert.Labels "alertname" }}
    [报警主机]:{{ index $alert.Labels "instance" }}
    [报警阀值]:{{ index $alert.Annotations "value" }}
    [开始时间]:{{ $alert.StartsAt }}
  {{ end }}
{{ end }}

2.3 配置alertmanager.yml

vim alertmanager.yml

alertmanager.yml内容如下: 

### 进行配置文件修改
global:
  resolve_timeout: 5m #处理超时时间,默认为5分钟
  smtp_from: 'xxx@qq.com'       # smtp_from:指定通知报警的邮箱
  smtp_smarthost: 'smtp.qq.com:25'        # smtp_smarthost: 使用email打开服务配置
  smtp_auth_username: xxx@qq.com'    # smtp_auth_username:邮箱用户名
  smtp_auth_password: xxxxxxxxxxxxj'    # 此处为邮箱授权码

route:
  group_by: ['alertname', 'item']  # 传入报警分组在一起的标签,如item=测试和alertname=Disk的多个报警将批处理为单个组
  group_wait: 30s  # 这个参数设置了在发送第一批警报之后,Alertmanager 等待新警报加入现有组的时间。此处 group_wait 被设置为 30 秒。如果在 30 秒内没有新的警报加入组,那么这个组的警报将被发送出去。
  group_interval: 300s  # 发送组警报的时间间隔
  repeat_interval: 4h  # 对同一个警报组的重复通知之间的时间间隔 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
  receiver: 'email'   # 发送警报的接收者的名称,以下receivers name的名称
  
       
# 定义模板
templates:
  - '/opt/alertmanager/template/*.tmpl'

receivers:

# 接收邮件的邮箱
- name: 'email'
  email_configs:
  - to: 'xxxxxxxx'

inhibit_rules: # 抑制规则
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance', 'prod']

我使用的是这个,比较简单

route:
  group_by: ['alertname', 'item']  # 传入报警分组在一起的标签,如item=测试和alertname=Disk的多个报警将批处理为单个组
  group_wait: 30s  # 这个参数设置了在发送第一批警报之后,Alertmanager 等待新警报加入现有组的时间。此处 group_wait 被设置为 30 秒。如果在 30 秒内没有新的警报加入组,那么这个组的警报将被发送出去。
  group_interval: 300s  # 发送组警报的时间间隔
  repeat_interval: 4h  # 对同一个警报组的重复通知之间的时间间隔 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
  receiver: 'web.hook'   # 发送警报的接收者的名称,以下receivers name的名称

receivers:  
- name: 'web.hook'  
  webhook_configs:  
    - url: 'http://192.168.1.XXXX:6080/prometheusalert?type=fs&tpl=prometheus-fs&fsurl=https://open.XXXXXXXX飞书机器人'

inhibit_rules: # 抑制规则
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'instance']

3、启动容器

3.1 启动

docker run -d -p 9093:9093 --restart=always \
  -v /opt/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
  -v /etc/localtime:/etc/localtime -v /etc/timezone:/etc/timezone \
  --name alertmanager \
  prom/alertmanager

3.2 验证

访问:http://IP:9093/

4、 修改prometheus的配置文件

prometheus的安装略 《Prometheus》

4.1 新增以下内容

prometheus.yml

alerting:  
  alertmanagers:  
  - static_configs:  
    - targets:  
      - "192.168.1.98:9093" # Alertmanager地址 

rule_files:  
  - /opt/prom/prometheus/rules/*.yml # 配置规则文件
  # - /opt/prom/prometheus/rules/*.rules # 配置规则文件

4.2 新增告警规则文件

vi /opt/prom/prometheus/rules/alert.yml
  • 告警名称‌(‌alert)‌:‌内存使用率预警。‌
  • 告警表达式‌(‌expr)‌:‌基于PromQL表达式,‌计算内存使用率是否超过80%。‌
  • 评估等待时间‌(‌for)‌:‌40秒,‌表示只有当触发条件持续40秒后才发送告警。‌
  • 自定义标签‌(‌labels)‌:‌指定告警级别为critical。‌
  • 附加信息‌(‌annotations)‌:‌包括告警的标题、‌服务名称、‌实例、‌值以及一个链接模板,‌用于提供详细的告警信息和处理建议。‌

# 相关的规则设置定义在一个group下。在每一个group中我们可以定义多个告警规则(rule)
groups:
  # 组名。报警规则组名称
- name: 内存预警
  rules:
  - alert: 内存使用率预警
    # expr:基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件。
    expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes )) / node_memory_MemTotal_bytes * 100 >= 80
    # for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在等待期间新产生告警的状态为pending。
    for: 40s # for语句会使 Prometheus 服务等待指定的时间, 然后执行查询表达式。(for 表示告警持续的时长,若持续时长小于该时间就不发给alertmanager了,大于该时间再发。for的值不要小于prometheus中的scrape_interval,例如scrape_interval为30s,for为15s,如果触发告警规则,则再经过for时长后也一定会告警,这是因为最新的度量指标还没有拉取,在15s时仍会用原来值进行计算。另外,要注意的是只有在第一次触发告警时才会等待(for)时长。)
    # labels:自定义标签,允许用户指定要附加到告警上的一组附加标签。
    labels:
      # severity: 指定告警级别。有三种等级,分别为 warning, critical 和 emergency 。严重等级依次递增。
      severity: critical
    # annotations: 附加信息,比如用于描述告警详细信息的文字等,annotations的内容在告警产生时会一同作为参数发送到Alertmanager。
    annotations:
      title: "内存使用率预警"
      serviceName: "{{ $labels.job }}"
      instance: "{{ $labels.instance }}"
      value: "{{ $value }}"
      btn: "点击查看详情 :撇嘴:"
      link: "http://escctv.hkeasyspeed.com/d/ov0oEgdik/linux?orgId=1&refresh=5s&var-host={{ $labels.instance }}:9100&var-job=${serviceName}"
      template: "**{{ $labels.job }}**({{ $labels.instance }}) 内存使用率**{{ $value }}%**已经超过阈值 **80%**, 请及时处理!"
      description: "**{{ $labels.job }}**({{ $labels.instance }}) 内存使用率**{{ $value }}%恢复到预警值以下!"
- name: CPU预警
  rules:
  - alert: CPU使用率预警 
    # expr:这里假设我们使用1分钟内的平均CPU使用率,并且假设node_cpu_seconds_total中的'mode=idle'代表CPU空闲时间。
    expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100) >= 80 
    for: 1m
    # labels:自定义标签,允许用户指定要附加到告警上的一组附加标签。
    labels:
      # severity: 指定告警级别。有三种等级,分别为 warning, critical 和 emergency 。严重等级依次递增。
      severity: critical
    # annotations: 附加信息,比如用于描述告警详细信息的文字等,annotations的内容在告警产生时会一同作为参数发送到Alertmanager。
    annotations:
      title: "CPU使用率预警"
      serviceName: "{{ $labels.job }}"
      instance: "{{ $labels.instance }}"
      value: "{{ $value }}"
      btn: "点击查看详情 :撇嘴:"
      link: "http://escctv.hkeasyspeed.com/d/ov0oEgdik/linux?orgId=1&refresh=5s&var-host={{ $labels.instance }}:9100&var-job=${serviceName}"
      template: "**{{ $labels.job }}**({{ $labels.instance }}) CPU使用率**{{ $value }}%**已经超过阈值 **80%**, 请及时处理!"
      description: "**{{ $labels.job }}**({{ $labels.instance }}) CPU使用率**{{ $value }}%**恢复到预警值以下!"
- name: 磁盘预警
  rules:
  - alert: 磁盘使用率预警
    expr: (node_filesystem_size_bytes - node_filesystem_avail_bytes) / node_filesystem_size_bytes * 100 >= 80
    for: 1m
    labels:
      severity: critical

    annotations:
      title: "磁盘使用率预警"
      serviceName: "{{ $labels.job }}"
      instance: "{{ $labels.instance }}"
#      mountpoint: "{{ $labels.mountpoint }}"
      value: "{{ $value }}"
      btn: "点击查看详情 :撇嘴:"
      link: "http://escctv.hkeasyspeed.com/d/ov0oEgdik/linux?orgId=1&refresh=5s&var-host={{ $labels.instance }}:9100&var-job=${serviceName}"
      template: "**{{ $labels.job }}**({{ $labels.instance }}) 服务器磁盘设备使用率 **{{ $value }}%**超过 **80%**, 请及时处理!"
      description: "**{{ $labels.job }}**({{ $labels.instance }}) 服务器磁盘设备使用率 **{{ $value }}%恢复到预警值以下!"
- name: 实例存活报警
  rules:
  - alert: 实例存活报警
    expr: up == 0
    for: 30s

    labels:
      severity: emergency

    annotations:
      title: "节点宕机报警"
      serviceName: "{{ $labels.job }}"
      instance: "{{ $labels.instance }}"
      btn: "点击查看详情 :撇嘴:"
      link: "http://192.168.1.98:9090/targets" # prometheus地址
      template: "节点 **{{ $labels.job }}**({{ $labels.instance }}) 断联, 请及时处理!"	  
      description: "节点 **{{ $labels.job }}**({{ $labels.instance }}) 恢复连接!"	
- name: 网络流量预警  
  rules:  
  - alert: 网络入站流量异常预警  
    expr: rate(node_network_receive_bytes_total{device!~"lo.*"}[2m]) > 100000000  
    for: 2m  
    labels:  
      severity: warning  
    annotations:  
      title: "网络入站流量异常预警"  
      serviceName: "{{ $labels.job }}"
      instance: "{{ $labels.instance }}"  
      device: "{{ $labels.device }}"  
      value: "{{ $value }}"  
      btn: "点击查看详情 :冷汗:"  
      link: "http://escctv.hkeasyspeed.com/d/ov0oEgdik/network?orgId=1&refresh=5s&var-host={{ $labels.instance }}:9100&var-job=${serviceName}&var-device=${device}"  
      template: "异常情况 **{{ $labels.job }}**({{ $labels.instance }}) **{{ $labels.device }}** 网络入站流量为**{{ $value }} bytes/s**,超过100MB/s, 请检查是否有异常流量!"
      description: "**{{ $labels.job }}**({{ $labels.instance }}) **{{ $labels.device }}** 网络入站流量为**{{ $value }} bytes/s**,恢复到预警值以下!"
- name: 内存泄漏预警  
  rules:  
  - alert: 内存泄漏预警  
    expr: |  
      (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100) < 10  
    for: 10m  
    labels:  
      severity: critical  
    annotations:  
      title: "内存泄漏预警"  
      serviceName: "{{ $labels.job }}"
      instance: "{{ $labels.instance }}"  
      value: "{{ $value }}"  
      btn: "点击查看详情 :叹气:"  
      link: "http://escctv.hkeasyspeed.com/d/memory-leak-dashboard?orgId=1&var-host={{ $labels.instance }}"  
      template: "**{{ $labels.job }}**({{ $labels.instance }})  可用内存低于10%,当前可用内存比例: **{{ $value }}%**,可能存在内存泄漏,请及时处理!"
      description: "**{{ $labels.job }}**({{ $labels.instance }})  可用内存恢复到预警值以下,当前可用内存比例: **{{ $value }}%**"
- name: 系统响应时间预警  
  rules:  
  - alert: 系统响应时间预警  
    expr: |  
      histogram_quantile(0.99, sum(rate(http_server_request_duration_seconds_bucket[5m])) by (le, instance, job)) > 0.5  
    for: 5m  
    labels:  
      severity: warning  
    annotations:  
      title: "系统响应时间预警"  
      serviceName: "{{ $labels.job }}"
      instance: "{{ $labels.instance }}"  
      value: "{{ $value }}"  
      btn: "点击查看详情 :思考:"  
      link: "http://escctv.hkeasyspeed.com/d/system-response-time?orgId=1&var-service=${serviceName}&var-instance={{ $labels.instance }}"  
      template: "**{{ $labels.job }}**({{ $labels.instance }})  99%请求响应时间超过500ms,系统性能可能下降,请检查原因!当前99%请求响应时间: {{ $value }}秒"
      description: "**{{ $labels.job }}**({{ $labels.instance }})  99%请求响应时间恢复到预警值以下!当前99%请求响应时间: {{ $value }}秒"
- name: 数据库连接数预警  
  rules:  
  - alert: 数据库连接数预警  
    expr: |  
      mysql_global_status_threads_connected > 500  
    for: 5m  
    labels:  
      severity: warning  
    annotations:  
      title: "数据库连接数预警"  
      serviceName: "{{ $labels.job }}"
      instance: "{{ $labels.instance }}"  
      value: "{{ $value }}"  
      btn: "点击查看详情 :冷汗:"  
      link: "http://escctv.hkeasyspeed.com/d/database-connections?orgId=1&var-db={{ $labels.instance }}"  
      template: "**{{ $labels.job }}**({{ $labels.instance }})  数据库连接数已达到**${value}**,接近或超过预设上限,请检查数据库性能和连接池配置!"
      description: "**{{ $labels.job }}**({{ $labels.instance }})  数据库连接数是**${value}**,已恢复到预警值以下!"
- name: 磁盘I/O预警  
  rules:  
  - alert: 磁盘I/O负载预警  
    expr: 100 - (avg by(instance) (irate(node_disk_io_time_seconds_total{job="node-exporter",device!~"loop.*|ram.*"}[2m])) * 100) < 20  
    # 假设我们计算的是磁盘I/O时间占总时间的比例,低于20%可能表示磁盘I/O负载较重  
    for: 2m  
    labels:  
      severity: critical  
    annotations:  
      title: "磁盘I/O负载预警"  
      serviceName: "{{ $labels.job }}"
      instance: "{{ $labels.instance }}"  
      device: "{{ $labels.device }}"  
      value: "{{ $value }}"  
      btn: "点击查看详情 :皱眉:"  
      link: "http://your-monitoring-system.com/dashboard?orgId=1&var-host={{ $labels.instance }}"  
      template: "**{{ $labels.job }}**({{ $labels.instance }})  上 **{{ $labels.device }}** 磁盘的I/O负载较高,剩余可用I/O时间比例已低于 **20%**, 请及时处理!"
      description: "**{{ $labels.job }}**({{ $labels.instance }})  上 **{{ $labels.device }}** 磁盘的I/O负载恢复到预警值以下!当前剩余比例: {{ $value }}%!"

==============================  以下这个不使用了=====================

vi /opt/prom/prometheus/rules/hoststats-alert.rules

groups:
- name: hostStatsAlert

  rules:
  - alert: instanceDown
    expr: up == 0
    for: 5m
    labels:
      severity: node
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."

  - alert: diskFree
    expr: (1-(node_filesystem_free_bytes{fstype=~"ext4|xfs"} / node_filesystem_size_bytes{fstype=~"ext4|xfs"}) ) * 100 > 15
    for: 5m
    labels:
      severity: page
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."

 ========================= 以上这个不使用了=================

4.3 重启 prometheus

4.4 查看所有的告警

可以在Prometheus提供的页面上查看告警规则:
下面可以查看所有的告警规则:

下面这个可以看到告警状态

 

一个报警信息在生命周期内有下面3中状态:

  • inactive: 表示当前报警信息既不是firing状态也不是pending状态
  • pending: 表示在设置的阈值时间范围内被激活了
  • firing: 表示超过设置的阈值时间被激活了

5、部署prometheusAlert - 发送飞书告警

5.1 介绍

alertmanager 是告警处理模块,但是告警消息的发送方法并不丰富。如果需要将告警接入飞书,钉钉,微信等,还需要有相应的SDK适配。prometheusAlert就是这样的SDK,可以将告警消息发送到各种终端上。
prometheus Alert 是开源的运维告警中心消息转发系统,支持主流的监控系统 prometheus,日志系统 Graylog 和数据可视化系统 Grafana 发出的预警消息。通知渠道支持钉钉、微信、华为云短信、腾讯云短信、腾讯云电话、阿里云短信、阿里云电话等。
这里主要是配置飞书告警。

5.2 创建飞书机器人(略)

5.3 安装prometheusAlert

《部署prometheusAlert》

5.4 登录prometheusAlert

使用 账户prometheusalert 密码 prometheusalert登录prometheusAlert

6 、修改Alertmanager配置文件

6.1 修改alertmanager.yml

###### 在上述的基础上新加配置
route:
  routes:
    - receiver: 'web.hook'
      group_wait: 10s

  
receivers:
- name: 'web.hook'
  webhook_configs:
  - url: 'http://192.168.92.101:8088/prometheusalert?type=fs&tpl=prometheus-fs&fsurl=xxx'  
# url是prometheus-alert提供的固定格式。其中:
# type=fs表示为飞书
# tpl=prometheus-fs 表示是prometheus消息
# fsurl 为飞书机器人的webhook,就是创建飞书机器人拿到的webhook

最终文件是:

### 进行配置文件修改
global:
  resolve_timeout: 5m #处理超时时间,默认为5分钟
  smtp_from: 'xxx@qq.com'       # smtp_from:指定通知报警的邮箱
  smtp_smarthost: 'smtp.qq.com:25'        # smtp_smarthost: 使用email打开服务配置
  smtp_auth_username: xxx@qq.com'    # smtp_auth_username:邮箱用户名
  smtp_auth_password: xxxxxxxxxxxxj'    # 此处为邮箱授权码

route:
  group_by: ['alertname', 'item']  # 传入报警分组在一起的标签,如item=测试和alertname=Disk的多个报警将批处理为单个组
  group_wait: 30s  # 这个参数设置了在发送第一批警报之后,Alertmanager 等待新警报加入现有组的时间。此处 group_wait 被设置为 30 秒。如果在 30 秒内没有新的警报加入组,那么这个组的警报将被发送出去。
  group_interval: 300s  # 发送组警报的时间间隔
  repeat_interval: 4h  # 对同一个警报组的重复通知之间的时间间隔 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
  receiver: 'email'   # 发送警报的接收者的名称,以下receivers name的名称
  routes:
    - receiver: 'web.hook'
      group_wait: 10s  
       
# 定义模板
templates:
 - '/opt/alertmanager/template/*.tmpl'

receivers:

# 配置web.hook
- name: 'web.hook'
  webhook_configs:
  - url: 'http://PrometheusAlert的IP:6080/prometheusalert?type=fs&tpl=prometheus-fs&fsurl=飞书机器人地址'
# url是prometheus-alert提供的固定格式。其中:
# type=fs表示为飞书
# tpl=prometheus-fs 表示是prometheus消息
# fsurl 为飞书机器人的webhook,就是创建飞书机器人拿到的webhook

# 接收邮件的邮箱
- name: 'email'
  email_configs:
  - to: 'xxxxxxxx'

inhibit_rules: # 抑制规则
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance', 'prod']

6.2 配置完成后重启Alertmanager

7、飞书验证

7.1 查看报警

7.2 修改飞书模版的时区问题

 每台机器的时区没有问题,就修改这个模版 加上 GetCSTtime

开始时间:{{ GetCSTtime $v.startsAt}}

完整

{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}{{if eq $v.status "resolved"}}**[Prometheus恢复信息]({{$v.generatorURL}})**
*[{{$v.labels.alertname}}]({{$var}})*
告警级别:{{$v.labels.level}}
开始时间:{{ GetCSTtime $v.startsAt}}
结束时间:{{ GetCSTtime $v.endsAt}} 
故障主机IP:{{$v.labels.instance}}
**{{$v.annotations.description}}**{{else}}**[Prometheus告警信息]({{$v.generatorURL}})**
*[{{$v.labels.alertname}}]({{$var}})*
告警级别:{{$v.labels.level}}
开始时间:{{ GetCSTtime $v.startsAt}}
故障主机IP:{{$v.labels.instance}}
**{{$v.annotations.description}}**{{end}}{{ end }}
{{ $urimsg:=""}}{{ range $key,$value:=.commonLabels }}{{$urimsg =  print $urimsg $key "%3D%22" $value "%22%2C" }}{{end}}[*** 点我屏蔽该告警]({{$var}}/#/silences/new?filter=%7B{{SplitString $urimsg 0 -3}}%7D)

8、 修改告警模板

自定义模板可以在这个网址中找:https://github.com/feiyu563/PrometheusAlert/issues/30

{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
{{if eq $v.status "resolved"}}
**[Prometheus 恢复通知]({{$v.generatorURL}})**
告警名称:{{$v.labels.alertname}}
告警状态:{{$v.status}}
开始时间:{{TimeFormat $v.startsAt "2006-01-02 15:04:05"}}
结束时间:{{TimeFormat $v.endsAt "2006-01-02 15:04:05"}} 
实例地址:{{$v.labels.instance}}
主机名称:{{$v.labels.hostname}}
**{{$v.annotations.description}}**
{{else}}
**[Prometheus 报警通知]({{$v.generatorURL}})**
告警名称:{{$v.labels.alertname}}
告警状态:{{$v.status}} > {{$v.labels.severity}}
开始时间:{{TimeFormat $v.startsAt "2006-01-02 15:04:05"}}
结束时间:{{TimeFormat $v.endsAt "2006-01-02 15:04:05"}} 
实例地址:{{$v.labels.instance}}
主机名称:{{$v.labels.hostname}}
**{{$v.annotations.description}}**
{{end}}
{{ end }}

总结
以上是邮件和飞书发送告警的配置方法,微信、钉钉等类似。
可以先不配置飞书,先使用邮箱来做测试,等告警的整个流程理解之后再进行飞书等的测试
告警规则可以参考:https://samber.github.io/awesome-prometheus-alerts/rules,并根据自己的需要进行修改
告警信息的模板可以参考:https://github.com/feiyu563/PrometheusAlert/issues/30

9、告警的配置小结

9.1 从prometheus报警去找

从prometheus报警当中去找蓝色区域,就了解到你labels有哪些标签可使用

9.2 从prometheus设置的报警yml文件当中去找 

我使用的是这个,需要与我的报警设置配合

{{ $var := .externalURL}}{{ range $k,$v:=.alerts }}
{{if eq $v.status "resolved"}}
测试环境Prometheus 恢复通知
🟡【告警名称】{{$v.labels.alertname}}
🚨【告警级别】{{ $v.labels.severity}}
✅【告警状态】{{$v.status}}
🧭【开始时间】{{GetCSTtime $v.startsAt}}
🧭【结束时间】{{GetCSTtime $v.endsAt}}
🏷️【命名空间】 {{$v.annotations.serviceName}}
📡 【实例名称】  {{$v.annotations.instance}}
📝【告警详情】  {{$v.annotations.description}};
{{else}}
测试环境Prometheus 告警通知
🟡【告警名称】{{$v.labels.alertname}}
🚨【告警级别】{{ $v.labels.severity}}
🔥【告警状态】{{$v.status}}
🧭【开始时间】{{GetCSTtime $v.startsAt}}
🏷️【命名空间】 {{$v.annotations.serviceName}}
📡 【实例名称】 {{$v.annotations.instance}}
📝【告警详情】  {{$v.annotations.template}};
{{end}}
{{ end }}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值