运维监控系列(15)-Alertmanager添加163邮箱、钉钉、微信告警通知功能

163邮箱

可用通过邮件方式进行告警通知的发送,接着上篇文档,我们配置发送邮件告警方式。

1. 设置163邮箱

发送邮件,需要smtp邮件服务器,首先需要对网易邮箱进行设置。

首先登陆163邮箱,进入邮箱中心设置。 
然后开启POP3/SMTP服务,这里需要扫描二维码发送短信验证。
 
开通成功后,会显示一个授权密码,Alertmanager发送邮件,需要使用这个密码,而不是163邮箱的登录密码。
 

2. alertmanager.yml配置文件添加邮件通知

global中添加smtp相关配置。

# 全局配置,包括报警解决后的超时时间、SMTP 相关配置、各种渠道通知的 API 地址等等。
global:
  # 告警超时时间
  resolve_timeout: 5m
  # 发送者邮箱地址
  smtp_from: 'xx@163.com' 
  # 邮箱smtp服务器地址及端口  
  smtp_smarthost: 'smtp.163.com:25'  
  # 发送者邮箱账号
  smtp_auth_username: 'xx@163.com'  
  # 发送者邮箱密码,这里填入第一步中获取的授权码
  smtp_auth_password: 'wWIXMAZCNBMW'
  # 是否使用tls 
  smtp_require_tls: false
  smtp_hello: '163.com'
# 路由配置,设置报警的分发策略,它是一个树状结构,按照深度优先从左向右的顺序进行匹配。
route:
  # 用于将传入警报分组在一起的标签。
  # 基于告警中包含的标签,如果满足group_by中定义标签名称,那么这些告警将会合并为一个通知发送给接收器。
  group_by: ['alertname']
  # 发送通知的初始等待时间
  group_wait: 30s
  # 在发送有关新警报的通知之前需要等待多长时间 
  group_interval: 5m
  # 如果已发送通知,则在再次发送通知之前要等待多长时间,通常约3小时或更长时间
  repeat_interval: 30s
  # 接受者名称
  receiver: '163.email'
# 配置告警消息接受者信息,例如常用的 email、wechat、slack、webhook 等消息通知方式
receivers:
- name: '163.email'
  email_configs:
  # 配置接受邮箱地址
  - to : 'xxx@163.com'

3. 测试

重启Alertmanager,查看控制台,已接收到Nacos告警通知。

 

查看163邮箱,发现接受到了邮件。
 
点看邮件,可以看到详细信息。
 

4. 配置邮件模板

在第三步,成功接收到了邮件,但是格式比较乱,这里可以使用邮件模板,Alertmanager 带有默认模板,可以自定义。后面的钉钉和微信都是可以自定义模板的,步骤差不多,就不赘述了。

Alertmanager 的通知模板基于Go 模板系统,具体支持哪些变量请参照官网说明

首先我们在Alertmanager主目录下创建一个templates文件夹,用户存放模板文件,然后创建一个email.tmpl文件,写入以下内容:

{
   
     {
   
      define "email.html" }}
{
   
     {
   
      range .Alerts }}
告警程序: prometheus_alert <br>
告警级别: {
   
     {
   
      .Labels.severity }} 级 <br>
告警类型: {
   
     {
   
      .Labels.alertname }} <br>
故障主机: {
   
     {
   
      .Labels.instance }} <br>
告警主题: {
   
     {
   
      .Annotations.summary }} <br>
告警详情: {
   
     {
   
      .Annotations.description }} <br>
触发时间: {
   
     {
   
      .StartsAt.Format "2019-08-04 16:58:15" }} <br>
{
   
     {
   
      end }}
{
   
     {
   
      end }}

然后在alertmanager.yml中添加模板扫描,及邮件使用模板。

# 配置自定义模板位置
templates:
  - 'templates/*.tmpl'
# 配置告警消息接受者信息,例如常用的 email、wechat、slack、webhook 等消息通知方式
receivers:
- name: '163.email'
  email_configs:
  # 配置接受邮箱地址
  - to : 'xx@163.com'
    html: '{
   
     { template "email.html" . }}'
    # 邮件主题信息 
    headers: {
   
     Subject: "[WARN] 报警邮件 {
   
     { .CommonLabels.instance }} {
   
     { .CommonAnnotations.summary }}"}  

重启Alertmanager,稍后查看邮件。
 

钉钉告警

1. 创建钉钉机器人

参考钉钉开发官网添加钉钉机器人,并记录好点前的Webhook地址。

添加机器人时的安全设置,这里选择加签,将生成的秘钥复制出来。
 
最后生成一个Webhook。

 

2. 安装prometheus-webhook-dingtalk

alertmanager的webhook集成了钉钉报警,所以他是本来就有的。但是钉钉对格式要求很严格,一会还需要使用插件进行格式转换。

prometheus-webhook-dingtalk是Prometheus AlertManager WebHooks生成钉钉通知工具。

下载系统对应的安装包。
 
到安装包位置,将config.yml.example重命名为config.yml,删除掉全部默认配置,添加以下内容:

targets:
  ding_webhook:
    # 钉钉webhook地址
    url: https://oapi.dingtalk.com/robot/send?access_token=a8a5c0ecea3a027de77812df0bcc0fd0d5c73cfaebebecbd35
    # 第一步中获取到的加签秘钥
    secret: SEC8bd856c89e0635798828a0fa8ff1d26403df25fd925657

启动prometheus-webhook-dingtalk.exe程序,查看打印日志,可以看到图中1为Alertmanager提供了Webhook地址,2为启动端口。
 

3. 配置Alertmanager

修改alertmanager.yml配置文件,添加路由和接受者配置,注意url填写钉钉插件提供的webhook地址,而不是钉钉直接提供的那个webhook。

route:
  #设置默认接收人
  receiver: 'webhook'
  #组告警等待时间。也就是告警产生后等待10s,如果有同组告警一起发出
  group_wait: 10s
  #两组告警的间隔时间
  group_interval: 10s
  #重复告警的间隔时间,减少相同微信告警的发送频率
  repeat_interval: 30s
  #采用哪个标签来作为分组依据
  group_by: [alertname]
  routes:
  - receiver: webhook
    group_wait: 10s
# 配置自定义模板位置
templates:
  - 'templates/*.tmpl'
# 配置告警消息接受者信息,例如常用的 email、wechat、slack、webhook 等消息通知方式
receivers:
- name: 'webhook'
  webhook_configs:
  # 钉钉插件提供的webhook地址
  - url: http://localhost:8060/dingtalk/ding_webhook/send
    #警报被解决之后是否通知
    send_resolved: true

然后启动Alertmanager。关闭Nacos,然后发现成功推送了钉钉告警信息。
 

微信告警

1. 注册企业微信

注册地址,没有的可以随便填个公司名注册一个。

注册完成后在应用管理菜单中,点击创建应用。
 
添加应用信息
 
创建成功后,查看Secret,这里会发送到企业微信,然后再复制到电脑上来。。。。对应api_secret配置项。
 

2. Alertmanager添加wechat通知

注册了企业微信,添加应用之后就可以添加微信通知配置了。

官网说明中的配置如下:
 
企业微信官方API文档参数说明如下:
 

结合这些说明,添加如下配置就可以了(不要被百度那些水文误导了。。)

route:
  #设置默认接收人
  receiver: 'wechat'
  #组告警等待时间。也就是告警产生后等待10s,如果有同组告警一起发出
  group_wait: 10s
  #两组告警的间隔时间
  group_interval: 10s
  #重复告警的间隔时间,减少相同微信告警的发送频率
  repeat_interval: 30s
  #采用哪个标签来作为分组依据
  group_by: [alertname]
# 配置自定义模板位置
templates:
  - 'templates/*.tmpl'
# 配置告警消息接受者信息,例如常用的 email、wechat、slack、webhook 等消息通知方式
receivers:
- name: 'wechat'
  wechat_configs:
  - send_resolved: true
    # 创建应用的 AgentId
    agent_id: 100xx
    # 企业 id,可以在企业微信管理后台,我的企业 - 企业 ID 查看
    corp_id: 'd1f14ffea0a01a'
    # 应用的 Secret
    api_secret: 'ncqlL0egmjFTjFlPKKycLOvARwesqB4'
    # 指定需要接收告警的用户,@all表示全部
    to_user: '@all'

3. 测试

重启Alertmanager,稍等片刻,就发现手机企业微信收到了告警通知消息。。。
 

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: