概述

通过之前的文章 - Prometheus Alertmanager 生产配置趟过的坑总结, 我们已经知道 AlertManager 作为告警平台,是非常强大的,可以去重 (deduplicating),分组 (grouping),并将它们路由 (routing) 到正确的接收器 (receiver) 集成,如电子邮件,微信,或钉钉。它还负责处理警报的静默/屏蔽 (silencing)、定时发送/不发送 (Mute) 和抑制 (inhibition) 问题。

正常的 AlertManager 处理告警流程,是要经过 Alerts -> Route -> Receivers 这么一个步骤的

  1. Alerts 里带了一些标签,如 env, team, job 等
  2. 根据提前编辑好的 Route, 对 alerts 进行路由,比如 env=prod 的发给哪些 receiver, team=db 的发给哪些人。..
  3. 在 Receivers 里已经提前录入了这些需要处理 prod,处理 db 告警的 receivers 邮箱。告警这样发给对应的收件人。

但是,假如我在 Alerts 里自带收件人信息(如邮箱),能不能直接使用?而不需要再录入所有的 receivers。

答案当然是可以!通过模板(template)实现这个需求。Let's GO!

模板(Template)简介

AlertManager 模板最初的目的是为了对告警的消息做定制化的。

比如同样的 Alerts,我:

  • 通过 SMS 发送,期望是纯文本格式;
  • 通过 email 发送,期望是 HTML 格式;
  • 通过钉钉、企微发送,期望是 Markdown 格式;
  • 而且在这些渠道中,
    • 标题是不同的排列组合
    • 告警内容也是不同的段落格式和用词(比如通过钉钉、企微会加入更多的 emoji)

AlertManager 模板是和 Prometheus 模板一样,使用的同样是 Go template。当然,具体的数据和函数会有细微的区别,因为在这里主要处理的是告警而非单个告警。

示例如下:

receivers:
- name: emergency
slack_configs:
- api_url: https://hooks.slack.com/services/XXXXXXXX
channel: '#emergency'
title: 'Alerts in {{ .GroupLabels.cluster }} {{ .GroupLabels.env }}!'

AlertManager 进阶

除了模板化 txt 字段,通知的定义(比如:发给谁)也可以被模板化。通常每个 team 都有自己的路由树,以及相对应的收件人(receivers)。如果另一个团队(不是监控团队,也不是运维团队,而是测试等团队)想要发送给自己团队告警,他们需要从头到尾设置 label、设置匹配其团队 labels 的路由树、把团队内的收件人信息配置到 AlertManager 的 receiver 里。

那如果你是监控团队,你用 AlertManager 做了个告警平台提供给外部团队甚至客户使用,每次都得这么搞会有“亿点点”麻烦。

该怎么办呢?

解决方案

解决方案就是:

  • Label
  • AlertManager 通知模板

首先,直接在 Label 里提供相关的接收人信息,然后通过 AlertManager 的模板,将 receiver -> to 写上对应的模板即可。

具体演示如下:

方案演示

首先,是包含收件人信息 label 的 alerts,如下:

[
{
"labels": {
"alertname": "<requiredAlertName>",
"<labelname>": "<labelvalue>",
"email_to": "foo@example.com,bar@example.com",
...
},
"annotations": {
"<labelname>": "<labelvalue>",
},
"startsAt": "<rfc3339>",
"endsAt": "<rfc3339>",
"generatorURL": "<generator_url>"
},
...
]

每个 alert 都提供 email_to 这样的 label。

然后,在 AlertManager 中,可以设置如下 routereceiver, 如下:

global:
smtp_smarthost: 'localhost:25'
smtp_from: 'smtp@example.com'
route:
group_by: [email_to, alertname]
receiver: customer_email
receivers:
- name: customer_email
email_configs:
- to: '{{ .GroupLabels.email_to }}'
headers:
subject: 'Alert: {{ .GroupLabels.alertname }}'

注意,group_by 必须包括 email_to label,这样它才算 .GroupLabels. 下的一员。

当有 alerts 来时,如 "email_to": "foo@example.com,bar@example.com", 会 route 到 customer_email, 其收件人是 {{ .GroupLabels.email_to }}, 会被模板化为: foo@example.com,bar@example.com, 告警邮件自然就会发过去。

完成!

本文由博客一文多发平台 OpenWrite 发布!

Prometheus AlertManager 生产实践-直接根据 to_email label 发 alert 到对应邮箱的更多相关文章

  1. [k8s]prometheus+alertmanager二进制安装实现简单邮件告警

    本次任务是用alertmanaer发一个报警邮件 本次环境采用二进制普罗组件 本次准备监控一个节点的内存,当使用率大于2%时候(测试),发邮件报警. k8s集群使用普罗官方文档 环境准备 下载二进制h ...

  2. prometheus学习系列九: Prometheus AlertManager使用

    在Prometheus的报警系统中,是分为2个部分的, 规则是配置是在prometheus中的, prometheus组件完成报警推送给alertmanager的, alertmanager然后管理这 ...

  3. Prometheus(五):Prometheus+Alertmanager 配置企业微信报警

    此处默认已安装Prometheus服务,服务地址:192.168.56.200  一.设置企业微信 1.1.企业微信注册(已有企业微信账号请跳过) 企业微信注册地址:https://work.weix ...

  4. Prometheus(四):Prometheus+Alertmanager 配置邮件报警

    此处默认已安装Prometheus服务,服务地址:192.168.56.200  一.安装Alertmanager 此处采用源码编译的方式安装.首先下载alertmanager的软件包,下载地址:ht ...

  5. Prometheus + AlertManager 邮件报警

    安装 wget https://github.com/prometheus/alertmanager/releases/download/v0.13.0/alertmanager-0.13.0.lin ...

  6. jmx_prometheus_javaagent+prometheus+alertmanager+grafana完成容器化java监控告警(二)

    一.拓扑图 二.收集数据 2.1前期准备 创建共享目录,即为了各节点都创建该目录,有两个文件,做数据共享 /home/target/prom-jvm-demo 1.下载文件 jmx_prometheu ...

  7. Prometheus+alertmanager告警配置-2

    prometheus 告警 prometheus 通过alertmanager进行告警 实现监控告警的步骤: 在prometheus中定义告警规则rule_files alertmanager配置告警 ...

  8. 使用 Prometheus Alertmanager 模块发送 Doris 异常信息至钉钉报警群

    基础环境 1.Prometheus 版本:2.22.2 下载地址: https://github.com/prometheus/prometheus/releases/download/v2.22.2 ...

  9. istio prometheus预警Prometheus AlertManager

    1.安装alertmanager kubectl create -f 以下文件 alertmanager-templates.yaml.configmap.yaml.deployment.yaml.s ...

  10. prometheus学习系列十: Prometheus AlertManager配置文件说明

    alertmanager配置文件说明 alertmanager是通过命令行标记和配置文件配置的,命令行标记配置不可变的系统参数,配置文件定义抑制规则.通知路由和通知接收器.可以通过官方提供的routi ...

随机推荐

  1. 【App Service for Windows】为 App Service 配置自定义 Tomcat 环境

    问题描述 当在App Service for Windows环境中所列出的Tomcat Version 没有所需要的情况下,如何实现自定义Tomcat 环境呢? 问题解答 第一步: 从官网下载要使用的 ...

  2. 【Azure 应用服务】App Service多个部署槽(Slot)之间,设置Traffic百分比后,如何来判断请求是由那一个槽(Slot)来进行处理呢?

    问题描述 当我们部署应用到App Service后,为了实现对生成的最小影响,通常是把新版本部署在一个预生产的槽中,然后进行验证.另一方面,为了进行A/B验证,需要把生成槽的流量,切入一部分到预生产槽 ...

  3. 结构化思维助力Prompt创作:专业化技术讲解和实践案例

    结构化思维助力Prompt创作:专业化技术讲解和实践案例 最早接触 Prompt engineering 时, 学到的 Prompt 技巧都是: 你是一个 XX 角色- 你是一个有着 X 年经验的 X ...

  4. opencv库图像基础1-python

    opencv库图像基础-python 基本操作 图片颜色通道 非灰度图的颜色通道是红绿蓝,在opencv中默认是BGR的顺序 argparse模块 argparse 库是 Python 标准库中用于命 ...

  5. 003-Java程序流程控制

    3. Java程序流程控制(重点) 程序的三种控制结构 3.1 分支结构 if, switch 3.1.1 if if 分支 根据条件(真或假)来决定执行某段代码. if分支应用场景 if 第一种形式 ...

  6. 设计原则 --- SOLID

    引言 SOLID是五个常见的面向对象设计原则的缩写,其目的是帮助开发者设计易于维护和扩展的软件系统 其中包含单一职责原则(SRP),开闭原则(OCP),里氏替换原则(LSP),接口隔离原则(ISP), ...

  7. 协议SPI:四线同步全双工 W25Qxx

    SPI传输速度快80M,富家子弟最简单最快速完成 SCK-时钟 MOSI主机输出(DO),从机输入 MISO(DI) SS Slave Select(CS Chip Select)从机选择线,低电平有 ...

  8. Git: Host key verification failed(主机密钥验证失败)

    换了新电脑Y7000 10750H,之前的项目提示这个,本以为删个什么文件,搜了一阵,没找到答案. 简单粗暴的方法就是再git clone一下,就ok了,这点很不爽.暂时先这么解决了.

  9. Android Studio 下载jcenter依赖失败问题及解决

    优先国内的镜像下载即可 我用的华为和阿里云的国内镜像 google() maven { url 'https://jitpack.io' } maven { url 'http://maven.ali ...

  10. JDK1.8版本java字符串常量池里存的是String对象还是引用?

    转载自http://t.csdn.cn/iD9LD 先下结论:对象! 众所周知,JDK1.8版本中,String常量池已经从方法区中的运行时常量池分离到堆中了,那么在堆中的String常量池里存的是S ...