http://www.mydlq.club/article/126/

文章目录

!版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。


系统环境:

  • AlertManager 版本: 0.24.0
  • Prometheus 版本: 2.35.0

参考地址:

示例地址:


系列文章目录


一、邮箱告警说明

在之前的文章中写过一篇 《Kubernetes 部署告警工具 AlertManager》 的文章,介绍过 AlertManager 是一个专门用于实现告警的工具,可以实现接收 Prometheus 或其它应用发出的告警信息,并且支持多种告警方式,比如 邮件企业微信SlackWebHook 等,而今天就介绍下如何实现通过 AlertManager 发送告警邮件。

二、创建邮箱模板文件

配置 AlertManager 发送告警邮件之前,需要提前创建发送告警的 email 模板 (非必须),模板文件中的样式和内容就是我们收到的告警邮件的样式和内容。这里本人将在目录 /etc/alertmanager 下创建邮箱模板文件 email.tmpl,命令如下:

$ vi /etc/alertmanager/email.tmpl
 
BASH

写入如下邮件模板内容:

{{ define "email.to" }}xxxxxx@163.com{{ end }}
{{ define "email.title" }}来自超级小豆丁的测试告警{{ end }}
{{ define "email.to.html" }}
{{ range .Alerts }}
<p>==========<strong>告警通知</strong>==========</p>
<strong>告警程序:</strong> prometheus_alert<br>
<strong>告警级别:</strong> {{ .Labels.severity }}<br>
<strong>告警类型:</strong> {{ .Labels.alertname }}<br>
<strong>告警实例:</strong> {{ .Labels.instance }}<br>
<strong>告警信息:</strong> {{ .Annotations.summary }}<br>
<strong>告警描述:</strong> {{ .Annotations.description }}<br>
<strong>当前状态:</strong> {{ .Status }}<br>
<strong>触发时间:</strong> {{ .StartsAt.Format "2006-01-02 15:04:05" }}<br>
<strong>监控界面地址:</strong> <a href="{{ .GeneratorURL }}">点击跳转</a><br>
{{ end }}
{{ end }}
 
TMPL

三、AlertManager 添加邮箱告警配置

3.1 AlertManager 中添加告警配置

接下来将在 AlertManager 配置文件中,添加邮箱告警参数,并且使用上面配置的告警邮箱模板,AlertManager 配置文件的内容如下:

# 全局配置
global:
## 在没有报警的情况下声明为已解决的时间
resolve_timeout: 5m
## ===配置邮箱===
## 配置邮箱 SMTP 服务器地址和端口;
smtp_smarthost: 'smtp.163.com:25'
## 配置发件人邮箱
smtp_from: 'xxxxxx@163.com'
## 配置发件人邮箱账户
smtp_auth_username: 'xxxxxx@163.com'
## 配置发件人邮箱密码 (这里指的是邮箱授权码,不是登录密码)
smtp_auth_password: 'ABCDEFG***'
## 配置是否使用 TLS 加密
smtp_require_tls: false # 自定义邮件通知模板
templates:
- '/etc/alertmanager/*.tmpl' # 告警路由配置
route:
## 配置用于分组的标签
group_by: ['alertname', 'cluster']
## 配置同一组告警等待时间。
## 用于配置接收到某组中的告警信息后,并不会立即发出告警信息,
## 而是等待指定时间,如果有相同组的告警信息,则一起发送告警
group_wait: 30s
## 两组告警的间隔时间
group_interval: 10m
## 重复告警的间隔时间,减少相同邮件的发送频率。
## 如果一个报警信息已经发送成功了,等待 repeat_interval 时间来重新发送他们
## 但是如果告警在 resolve_timeout 时间内没有重复发送,表示问题已经解决,则
## 到 repeat_interval 时间后就不会重新发送
repeat_interval: 30m
## 配置默认接收者,如果一个报警没有被一个 route 匹配,则发送给默认的接收器
receiver: 'email'
## 配置指定组的消息由对应哪个接收者进行处理
routes:
- receiver: 'email'
group_wait: 30s
### 配置匹配标签,只有匹配的标签才会使用当前配置中指定的接收者进行处理
match:
alertname: email-test # 告警接收者配置(大部分参数值都是引入模板中定义的变量)
receivers:
- name: 'email'
email_configs:
## 设置接收告警的邮箱,这里既可以直接写接收者邮箱,也可以引入模板中定义的变量
- to: '{{ template "email.to" }}'
## 设置邮箱标题
headers: { Subject: '{{ template "email.title" }}【告警状态: {{ .Status }}】' }
## 设置邮箱内容
html: '{{ template "email.to.html" .}}'
## 是否通知已解决的告警
send_resolved: true
 
YAML

3.2 使 AlertManager 重新加载配置

为了使 AlertManager 邮箱配置生效,我们可以使用 curl 命令执行 AlertManager 的重新加载配置接口 /-/reload,使 AlertManager 重新加载配置文件,命令如下:

$ curl -XPOST http://192.168.2.11:30903/-/reload
 
BASH

注: 本人 AlertManager 地址为 http://192.168.2.11:30903

到此 AlertManager 的配置邮箱告警完成,接下来要进行测试,验证 AlertMnager 中的配置是否可以正常发送告警邮件。

四、发送告警信息进行测试

4.1 模拟触发告警

为了方便测试 AlertManager 是否可以正常发送邮箱邮件,这里本人选择直接调用 AlertManager 中的发送告警接口,模拟发生告警信息,这样就可以直接触发 AlertManager 发生告警邮件。

如下内容,里面是自定义的 JSON 格式的告警请求数据,需要我们在 Bash 中执行下面命令:

data='[
{
"labels": {
"alertname": "alert-test",
"instance": "test-service",
"job": "test-job",
"severity": "page"
},
"annotations": {
"summary": "测试一下",
"description": "测试告警邮件."
},
"generatorURL": "http://www.mydlq.club"
}
]'
 
BASH

然后使用 curl 工具,执行 POST 请求,调用 AlertManager 告警 API 接口来触发告警,操作如下:

$ curl -H "Content-Type:application/json" \
-X POST \
-d "$data" \
http://192.168.2.11:30903/api/v2/alerts
 
BASH

4.2 观察是否接收到告警邮件

等到上面 curl 命令触发告警成功后,等待一小段时间,观察是否接收到如下样式的告警邮件内容:

如果接收到该告警邮件,则说明 AlertManager 配置的告警邮箱参数没有问题,并且在配置的 route.repeat_interval 时间内 (本人上面 AlertManager 配置的是 5 分钟) 如果没有再次发生告警信息,就会触发告警恢复,同样也会发送告警恢复的邮件进行通知,接收到的邮件内容如下:

如果通过了上面的测试,那么接下来就需要在 Prometheus 中去配置告警规则了。Prometheus 告警规则主要是用于支持用户自定义配置触发告警的条件,满足条件后 Prometheus 就会调用 AlertManager 告警接口触发告警,然后通过 AlertManager 中的告警配置发送指定类型的告警。

五、配置 Prometheus 告警参数

5.1 创建 Prometheus 告警规则文件

/etc/prometheus 文件夹下创建 Prometheus 告警规则文件 email-rules.yaml,命令如下:

$ vi /etc/prometheus/email-rules.yaml
 
BASH

写入如下告警规则内容:

## 告警规则配置如下,其中告警条件 up > -1 是必然满足的,
## 必定会触发 Prometheus 告警状态为 Firing。
groups:
- name: Instances
rules:
- alert: InstanceDown
expr: up > -1
for: 1m
labels:
severity: page
## 配置用于分组的标签
alertname: email-test
annotations:
description: '{{ $labels.instance }} 实例的 {{ $labels.job }} 任务宕机已经超过 1 分钟.'
summary: '实例 {{ $labels.instance }} 宕机'
 
YAML

5.2 Prometheus 中添加告警配置

接下来需要在 Prometheus 配置文件中添加 AlertManager 地址,以及添加 Prometheus 告警规则文件地址,Prometheus 配置文件中待添加的内容如下:

############ 添加配置 AlertManager 服务器地址 ###################
alerting:
alertmanagers:
- static_configs:
- targets: ["http://192.168.2.11:30903"] ############ 指定告警规则文件路径位置 ###################
rule_files:
- /etc/prometheus/*-rule.yml
 
YAML

5.3 使 Prometheus 重新加载配置

接下来就需要使新修改的 Prometheus 配置文件生效,有两种方式:

  • (1)、调用 Prometheus 的管理接口 /-/reload,使 Prometheus 重新加载配置;
  • (2)、直接重启 Prometheus 应用,使其重新加载配置文件;

第一种方式需要 Prometheus 启动时添加参数 --web.enable-lifecycle 参数,才可以调用 Prometheus 的重加载配置接口重新加载配置,如果满足则可用执行如下命令:

$ curl -XPOST http://192.168.2.11:30900/-/reload
 
BASH

当然,如果启用 Prometheus 时没有添加该参数,则必须重启 Prometheus 才能使其重新加载配置。等到配置生效后,接下来我们需要打开 Prometheus UI 界面,观察告警规则状态。

六、观察告警流程是否正常

6.1 观察 Prometheus 告警规则状态

打开 Prometheus 的 Alerts 界面,可以观察到告警信息已经触发,如下图所示:

6.2 观察是否成功接收到告警邮件

然后我们等待一小段时间,观察是否可以收到如下样式的告警邮件:

如果成果收到该邮件,则说明 Prometheus 和 AlertManager 邮件配置没有问题,否则需要自行验证下哪部分没有执行成功。

---END---

[转帖]AlertManager 配置邮箱告警的更多相关文章

  1. grafana配置邮箱告警

    [root@localhost grafana]# cd /etc/grafana/ [root@localhost grafana]# vim grafana.ini 注意:发件邮件要开启smtp服 ...

  2. Prometheus 监控报警系统 AlertManager 之邮件告警

    转载自:https://cloud.tencent.com/developer/article/1486483 文章目录1.Prometheus & AlertManager 介绍2.环境.软 ...

  3. Zabbix三种邮箱告警配置

    环境 环境 IP地址 主机名 需要安装的应用 系统版本 服务端 192.168.23.140 zabbix lamp zabbix_server zabbix_agent CentOS 8 客户端 1 ...

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

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

  5. Alertmanager配置概述

    Alertmanager主要负责对Prometheus产生的告警进行统一处理,因此在Alertmanager配置中一般会包含以下几个主要部分: 全局配置(global):用于定义一些全局的公共参数,如 ...

  6. Nagios 邮箱告警的方式太OUT了!

    一般来讲,在安装完 Nagios 后,我们做的第一件最正确的事,就是设置它的邮件通知,对吧.因为如果没有这一步骤的话,你怎么能够知道什么时候会出现问题呢? 伴随着成功的初始安装,你即将是你司唯一一个能 ...

  7. zabbix的自动发现、自定义添加监控项目、配置邮件告警

    1.zabbix的自动发现这里的自动发现,所显示出来的是规则的上自动了现 然后 可以对其内容进行相关的配制,如时间或周期 注意:对于单个主机的规则,可以自行添加或删除, 但对于已经添加好了的规则,若需 ...

  8. [elk]elastalert邮箱告警

    本次要完成以下任务: 1.源码包安装elasticalert 2.配置邮箱报警 原则: 先很快的通过alert报警发一份邮件,其次了解alert配置文件各个选项 源码安装elasticalert 参考 ...

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

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

  10. zabbix入门之配置邮件告警

    zabbix入门之配置邮件告警 邮件环境搭建 使用本地邮箱账号发送邮件 zabbix-server 端安装 mailx .sendmail或者psotfix 服务,系统默认安装好了postfix #安 ...

随机推荐

  1. mx master 的国产平替 keychron m6 使用体验

    背景 之前在 Mac 系统用mx master3遇到的问题 这篇文章中提到过三点问题,前两点在更换了驱动软件,升级了 macOS 系统之后都解决了,但第三点自动休眠的问题一直无法解决,于是一直想找一个 ...

  2. Docker、pre-commit 导致的 git commit 报错:找不到 python 3.8

    到这个问题的原因可能有很多,这里只是记录下针对我遇到这这跟题的原因及解决方法 问题描述 执行 git commit 命令,报错 /usr/bin/env: 'python3.8': No such f ...

  3. Spring源码学习笔记4——BeanFactoryPostProcessor执行

    一丶BeanFactoryPostProcessor是什么 Spring留给我们的一个扩展接口,在BeanDefinition加载注册完之后,并执行一些前置操作(笔记3)之后会反射生产所有的BeanF ...

  4. 手把手教您在PyCharm中连接云端资源进行代码调试

    摘要:ModelArts提供了一个PyCharm插件工具PyCharm ToolKit,协助用户完成代码上传.提交训练作业.将训练日志获取到本地展示等,用户只需要专注于本地的代码开发即可. 本文分享自 ...

  5. 带你了解VXLAN网络中报文的转发机制

    摘要:本节以集中式VXLAN网络(手工方式建立VXLAN隧道)为例,分别介绍相同子网内.不同子网间是如何进行通信的.在了解转发机制的前提下,我们先来看下VXLAN网关有哪些种类. VXLAN二层网关与 ...

  6. 关于Spring注解开发教程,打包全送你

    摘要:spring是我们web开发中必不可少的一个框架,基于传统的xml方式配置bean总觉得太过繁琐,从spring2.5之后注解的出现可以大大简化我们的配置. 本文分享自华为云社区<如何高效 ...

  7. Redisson:这么强大的实现分布式锁框架,你还没有?

    摘要:Redisson框架十分强大,基于Redisson框架可以实现几乎你能想到的所有类型的分布式锁. 本文分享自华为云社区<[高并发]你知道吗?大家都在使用Redisson实现分布式锁了!!& ...

  8. Scala Http请求工具类

    import java.io.IOException import java.util import org.apache.http.client.ClientProtocolException im ...

  9. 总结vue3 的一些知识点:MySQL 排序

    MySQL 排序 我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据. 如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段 ...

  10. vue3.0 学习使用记录

    vue学习 在最近的一次项目中,前端js框架里使用了vue.vue的编程思想比较新颖,用起来也感觉高效便捷.由于个人原因,做完这个项目之后可能就接触不到前端的内容了,所以记录这个项目中对vue的学习和 ...