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. Spring WebFlux 简介

    本文基于 Spring Boot 2.6.0 基于之前提到的 Reactor 的出现,使得编写响应式程序成为可能.为此,Spring 的开发团队决定添加有关 Reactor 模型的网络层.这样做的话将 ...

  2. ClickHouse(21)ClickHouse集成Kafka表引擎详细解析

    目录 Kafka表集成引擎 配置 Kerberos 支持 虚拟列 资料分享 参考文章 Kafka表集成引擎 此引擎与Apache Kafka结合使用. Kafka 特性: 发布或者订阅数据流. 容错存 ...

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

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

  4. 一起学习ML和DL中常用的几种loss函数

    摘要:本篇内容和大家一起学习下机器学习和深度学习中常用到的几种loss函数. 本文分享自华为云社区<[MindSpore易点通]网络实战之交叉熵类Loss函数>,作者:Skytier . ...

  5. 火出边际的Serverless,你居然还不了解?

    摘要:图灵奖获得者David A. Patterson和Spark共同创始人Ion Stoica,在19年伯克利的会议上发布Serverless将是下一代默认的计算范式. 本文分享自华为云社区< ...

  6. 复杂 A/B 实验如何设计?火山引擎 DataTester 帮你落地!

    数字化转型时代,越来越多企业将目光聚焦于"数据驱动增长"的实践上,A/B 实验则在其中扮演着愈加重要的角色. A/B 实验又称对照试验,但并非人们字面认知的"抛出 A 和 ...

  7. module 'numpy' has no attribute 'int'.

    原因:np.int 在 NumPy 1.20 中已弃用,在 NumPy 1.24 中已删除 AttributeError: module 'numpy' has no attribute 'int'. ...

  8. Mac下Homebrew替换镜像

    替换git和homebrew镜像源 一.git加速 查找域名对应的地址 nslookup github.com nslookup github.global.ssl.fastly.Net 修改host ...

  9. STM32CubeMX教程15 ADC - 多重ADC转换

    1.准备材料 开发板(正点原子stm32f407探索者开发板V2.4) STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK ...

  10. Docker 与 Linux Cgroups:资源隔离的魔法之旅

    这篇文章主要介绍了 Docker 如何利用 Linux 的 Control Groups(cgroups)实现容器的资源隔离和管理. 最后通过简单 Demo 演示了如何使用 Go 和 cgroups ...