Prometheus告警简介

告警能力在Prometheus的架构中被划分成两个独立的部分。如下所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告警规则进行计算,如果满足告警触发条件就会向Alertmanager发送告警信息。

grafana添加dingding报警 grafana 告警规则详解_docker


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

告警名称:用户需要为告警规则命名,当然对于命名而言,需要能够直接表达出该告警的主要内容
告警规则:告警规则实际上主要由PromQL进行定义,其实际意义是当表达式(PromQL)查询结果持续多长时间(During)后出发告警

在Prometheus中,还可以通过Group(告警组)对一组相关的告警进行统一定义。当然这些定义都是通过YAML文件来统一管理的。

Alertmanager作为一个独立的组件,负责接收并处理来自Prometheus Server(也可以是其它的客户端程序)的告警信息。Alertmanager可以对这些告警信息进行进一步的处理,比如当接收到大量重复告警时能够消除重复的告警信息,同时对告警信息进行分组并且路由到正确的通知方,Prometheus内置了对邮件,Slack等多种通知方式的支持,同时还支持与Webhook的集成,以支持更多定制化的场景。

例如,目前Alertmanager还不支持钉钉,那用户完全可以通过Webhook与钉钉机器人进行集成,从而通过钉钉接收告警信息。同时AlertManager还提供了静默和告警抑制机制来对告警通知行为进行优化。

分组

分组机制可以将详细的告警信息合并成一个通知。在某些情况下,比如由于系统宕机导致大量的告警被同时触发,在这种情况下分组机制可以将这些被触发的告警合并为一个告警通知,避免一次性接受大量的告警通知,而无法对问题进行快速定位。

例如,当集群中有数百个正在运行的服务实例,并且为每一个实例设置了告警规则。假如此时发生了网络故障,可能导致大量的服务实例无法连接到数据库,结果就会有数百个告警被发送到Alertmanager。

而作为用户,可能只希望能够在一个通知中中就能查看哪些服务实例收到影响。这时可以按照服务所在集群或者告警名称对告警进行分组,而将这些告警内聚在一起成为一个通知。

告警分组,告警时间,以及告警的接受方式可以通过Alertmanager的配置文件进行配置。

抑制

抑制是指当某一告警发出后,可以停止重复发送由此告警引发的其它告警的机制。

例如,当集群不可访问时触发了一次告警,通过配置Alertmanager可以忽略与该集群有关的其它所有告警。这样可以避免接收到大量与实际问题无关的告警通知。

抑制机制同样通过Alertmanager的配置文件进行设置。

静默

静默提供了一个简单的机制可以快速根据标签对告警进行静默处理。如果接收到的告警符合静默的配置,Alertmanager则不会发送告警通知。

静默设置需要在Alertmanager的Werb页面上进行设置。

一、环境准备

grafana添加dingding报警 grafana 告警规则详解_grafana添加dingding报警_02

二、安装

1.Prometheus安装

使用docker安装 在docker-hub搜索需要的镜像

docker pull prom/prometheus

配置相关配置文件 在本机opt目录下 创建

mkdir /opt/prometheus/

grafana添加dingding报警 grafana 告警规则详解_docker_03


prometheus.yml 文件配置

vim prometheus.yml

grafana添加dingding报警 grafana 告警规则详解_linux_04


例子

global:
  scrape_interval:     15s # 默认抓取间隔, 15秒向目标抓取一次数据。
  external_labels:
    monitor: 'codelab-monitor'
# 这里表示抓取对象的配置
scrape_configs:
    #这个配置是表示在这个配置内的时间序例,每一条都会自动添加上这个{job_name:"prometheus"}的标签  - job_name: 'prometheus'
    scrape_interval: 5s # 重写了全局抓取间隔时间,由15秒重写成5秒
    static_configs:
      - targets: ['localhost:9090']
global:
  scrape_interval:     60s
  evaluation_interval: 60s
 
scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']
        labels:
          instance: prometheus

规则文件配置 *.rules / *.yml

grafana添加dingding报警 grafana 告警规则详解_linux_05

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

启动

docker run -d -p 9090:9090 \

-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \

-v /opt/prometheus/rules.yml:/etc/prometheus/rules.yml \

prom/prometheus

可以看到

grafana添加dingding报警 grafana 告警规则详解_linux_06


grafana添加dingding报警 grafana 告警规则详解_linux_07


打开 http://localhost:9090

grafana添加dingding报警 grafana 告警规则详解_配置文件_08

2.Grafana安装

拉取镜像

docker pull grafana/grafana

创建此文件夹 记录日志

grafana添加dingding报警 grafana 告警规则详解_linux_09


启动

docker run -d \
  -p 3000:3000 \
  --name=grafana \
  -v /opt/grafana-storage:/var/lib/grafana \
  grafana/grafana
3.AlertManager安装

拉取

docker pull prom/alertmanager

创建配置文件夹 同1

grafana添加dingding报警 grafana 告警规则详解_docker_10


alertmanager.yml文件配置 根据自己需要灵活配置

vim /opt/alertmanager/alertmanager.yml
# 配置如下
global:
  resolve_timeout: 5m

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'ops_notify'

  routes:
  - receiver: ops_notify
    group_wait: 10s
    match_re:
      alertname: '实例存活告警|磁盘使用率告警'

  - receiver: info_notify
    group_wait: 10s
    match_re:
      alertname: '内存使用率告警|CPU使用率告警'

receivers:
- name: 'ops_notify'
  webhook_configs:
  - url: 'http://localhost:8060/dingtalk/ops_dingding/send'
    send_resolved: true

- name: info_notify
  webhook_configs:
  - url: http://localhost:8060/dingtalk/info_dingding/send
    send_resolved: true

inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match: 
      severity: 'warning' 
    equal: ['alertname', 'dev', 'instance']
注意

在Prometheus中需要配置正确的AlertManager端口

启动
/bin/alertmanager\
-config.file=/etc/alertmanager/alertmanager.yml --storage.path=/alertmanager" \
prom/alertmanager:latest
4.Prometheus-WebHook-Dingtalk 安装

可以采用docker方式安装 这里我采用普通安装方式

cd /opt/
export VER="0.3.0"
wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v${VER}/prometheus-webhook-dingtalk-${VER}.linux-amd64.tar.gz
tar -zxf prometheus-webhook-dingtalk-${VER}.linux-amd64.tar.gz
mv prometheus-webhook-dingtalk-${VER}.linux-amd64 /opt/alertmanager/prometheus-webhook-dingtalk
 
#使用方法:prometheus-webhook-dingtalk --ding.profile=钉钉接收群组的值=webhook的值
 
vim /usr/lib/systemd/system/prometheus-webhook-dingtalk.service
[Unit]
Description=prometheus-webhook-dingtalk
After=network-online.target
 
[Service]
Restart=on-failure
ExecStart=/opt/alertmanager/prometheus-webhook-dingtalk/prometheus-webhook-dingtalk \
          --ding.profile=ops_dingding=https://oapi.dingtalk.com/robot/send?access_token=省略一串字符 \
          --ding.profile=info_dingding=https://oapi.dingtalk.com/robot/send?access_token=同样省略了一串字符
 
[Install]
WantedBy=multi-user.target

启动

./prometheus-webhook-dingtalk --ding.profile=webhook=https://oapi.dingtalk.com/robot/send?access_token={自己的token}  --template.file=/opt/prometheus-webhook-dingtalk-0.3.0.linux-amd64/default.tmpl

效果截图

grafana添加dingding报警 grafana 告警规则详解_配置文件_11