部署Alertmanager对prometheus监控检测飞书报警通知

告警效果

部署Alertmanager对prometheus监控检测飞书报警通知_第1张图片

一、编写alertmanager.yml

创建个目录存放alertmanager.yml文件

mkdir -p /data/alertmanager
vi alertmanager.yml
route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 30s
  repeat_interval: 1m
  receiver: 'web.hook'
receivers:
  - name: 'web.hook'
    webhook_configs:
      - url: 'http://192.168.170.110:8080//alert/card'
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

挂载存放配置文件的目录
映射端口

docker run -d -p 9093:9093 --name=alertmanager --restart=always \
-v /data/alertmanager/:/etc/alertmanager/ \
prom/alertmanager

http://服务器地址:9093访问alertmanager web界面,默认首页就是显示是否检测到告警,可以查看状态和配置

部署Alertmanager对prometheus监控检测飞书报警通知_第2张图片

二、修改prometheus配置

 vi /data/prometheus/prometheus.yml 

将注释去掉,启用Alertmanager
指定你部署的Alertmanager地址:端口
还有指定你存放的告警配置文件目录,这里指定rules下所有的yml配置文件

mkdir -p /data/prometheus/rules

注意:创建的rules目录是和prometheus.yml配置处于同一级,当然可以根据自身存放的位置修改rule_files指定即可。

部署Alertmanager对prometheus监控检测飞书报警通知_第3张图片

三、飞书告警推送

编写告警规则
前面指定了告警目录位置,告警规则文件名称任意放在rules下的所有yml文件都会生效

vi /data/prometheus/rules/alert.yml

详细如下

# 相关的规则设置定义在一个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=192.168.170.110:9100&var-job=${serviceName}"
      template: "**${serviceName}**(${instance}) 内存使用率已经超过阈值 **80%**, 请及时处理!\n\n当前值: ${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=192.168.170.110:9100&var-job=${serviceName}"
      template: "**${serviceName}**(${instance}) 服务器磁盘设备使用率超过 **70%**, 请及时处理!\n\n当前值: ${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.170.110:9090/targets"
      template: "节点 **${serviceName}**(${instance}) 断联, 请及时处理!"

启用飞书告警容器
使用javafamily在docker公共仓库开源分享的prometheus-webhook-feishu
FEISHU_TOKEN:token是webhook最后那一段值

docker run -d --name prom-alert-feishu -p 8080:8080 --restart=always \
-e FEISHU_TOKEN=xxxxxxxxxxxxxx \
javafamily/prometheus-webhook-feishu:2.3.2-SNAPSHOT

注意:确认你的alertmanager配置的webhook地址是你部署prometheus-webhook-feishu的地址和端口(/data/alertmanager/alertmanager.yml)

部署Alertmanager对prometheus监控检测飞书报警通知_第4张图片

你可能感兴趣的:(prometheus,运维,prometheus,飞书,数学建模,alertmanager,grafana)