玩转prometheus告警 alertmanger(二)之alertmanger 邮件 钉钉告警

目录

1. 概述

1.1 主要步骤

1.2 核心概念

2. 安装

3. alertmanger配置

3.1 配置说明:

3.2 配置告警通知


1. 概述

前置要求:需要先配置promehteus告警规则及在配置文件中配置alertmanger,详见:玩转prometheus告警 alertmanger(一)之prometheus告警规则_lv2的博客-CSDN博客

官方文档https://prometheus.io/docs/alerting/latest/alertmanager/

altermanager告警部分,主要负责管理接收prometheus推送过来的告警,通过分组、静默、抑制、聚合等处理,将告警通过路由发送到对应的接收器上,按不同的规则发送给不同的模块负责人,支持邮件、salck及webhook(对接企业微信/钉钉/飞书)方式发送告警通知。

1.1 主要步骤

  • 安装并设置altermanger(包括配置通知方式email/webhook/dingding/weixin等,邮件通知模版,路由分组等)
  • prometheus配置altermanger
  • prometheus配置告警规则,热重载规则(curl -X POST http://127.0.0.1:9090/-/reload)​​​​​​

 prometheus配置部分详见:玩转prometheus告警 alertmanger(一)之prometheus告警规则_lv2的博客-CSDN博客

1.2 核心概念

  • 分组

将类似性质的警报分类到单个通知中。这在较大的中断期间特别有用,因为许多系统同时发生故障,并且可能同时触发数百到数千个警报。

  • 抑制

抑制是一种概念,即在某些其他警报已触发时禁止显示某些警报的通知。

  • 静默

静默是一种在给定时间内简单地将警报静音的简单方法。静音是根据匹配器配置的,就像路由树一样。将检查传入警报是否与活动静默的所有相等或正则表达式匹配器匹配。如果他们这样做,则不会为该警报发送任何通知。 静默是在警报管理器的 Web 界面中配置的。

2. 安装

下载地址https://github.com/prometheus/alertmanager/releases

 安装方式有docker、二进制及源码等方式,这里是直接运行二进制文件

# 下载lastest版本
wget https://github.com/prometheus/alertmanager/releases/download/v0.24.0/alertmanager-0.24.0.linux-arm64.tar.gz

# 解压及安装
tar xf alertmanager-0.24.0.linux-amd64.tar.gz 
mv alertmanager-0.24.0.linux-amd64 /usr/local/alertmanager 

# 启动
/usr/local/alertmanager/alertmanager --config.file="/usr/local/alertmanager/alertmanager.yml" &

启动 alertmanger后,要在prometheus中配置alertmanger的接入地址

# vim /usr/local/prometheus/prometheus.yml


global:
# Alertmanager configuration
alerting:   # 增加alertmanager配置
  alertmanagers:
    - static_configs:
        - targets: ['localhost:9093']


# 热重载
 

curl -X POST http://127.0.0.1:9090/-/reload

3. alertmanger配置

配置文档https://prometheus.io/docs/alerting/latest/configuration/

3.1 配置说明:

示例配置文件:/usr/local/alertmanager/alertmanager.yml,如下

global: 
  ***
templates:
  - 'tmpl/*.tmpl'
route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1h
  receiver: 'web.hook'
receivers:
  - name: 'web.hook'
    webhook_configs:
      - url: 'http://127.0.0.1:5001/'
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']
  • global: 全局配置,设置报警解决后的超时时间、邮件/钉钉/微信配置等
  • route: 设置报警分发策略,按照深度优先从左向右顺序行匹配
  • receivers: 配置告警消息接受者
  • inhibit_rules: 抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)
  • templates: 邮箱、钉钉、微信等自定义模版路径

在实际生产中,会通过邮件+钉钉/微信/飞书的方式进行告警通知,具体如下

3.2 配置告警通知

注意:告警方式支持mail、webhook、钉钉及微信等,钉钉/微信等需要安装插件prometheus-webhook-dingtak才能使用

3.2.1 配置邮件通知

# vim /usr/local/alertmanager/alertmanager.yml

global:
  resolve_timeout: 5m
  smtp_from: 'test@qq.com'  # 发送者
  smtp_smarthost: 'smtp.exmail.qq.com:465' # smtp地址
  smtp_auth_username: 'test@qq.com'  # 邮箱帐号
  smtp_auth_password: 'xxxxxxxx' # 邮箱密码/客户端授权码
  smtp_require_tls: false   # 关闭tls
route:  # 设置报警的分发策略
  group_by: ['alertname']    # 分组名
  group_wait: 5s   # 当收到告警的时候,等待N秒看是否还有告警,如果有就一起发出去
  group_interval: 5s # 发送警告间隔时间
  repeat_interval: 5m  # 重复报警的间隔时间
  receiver: 'email'  # 告警接收人
receivers:   #接收人
- name: 'email'
  email_configs:
  - to: 'test@qq.com' #可以多人
    send_resolved: true  # 告警恢复通知
inhibit_rules: # 抑制规则
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']
                                        

配置好后重启alertmanger生效,默认通知邮件效果如下:

可以通过自定义邮件模版的方式进行美化 

3.2.2 配置邮件通知模版

步骤:

1)创建模版

2)引用模版

创建模版存放目录

# mkdir -p /usr/local/alertmanager/tmpl

创建邮件模版

# vim /usr/local/alertmanager/tmpl/email.tmpl


{{ define "email.html" }}
    {{ range .Alerts }}
<pre>
    ========start==========
    告警程序: prometheus_alert 
    告警级别: {{ .Labels.severity }} 
    告警类型: {{ .Labels.alertname }} 
    故障主机: {{ .Labels.instance }} 
    告警主题: {{ .Annotations.summary }} # Annotations这里根据prometheus规则中的实际字段填写
    告警详情: {{ .Annotations.description }}
    触发时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}  # 注意:.StartsAt.Format "2006-01-02 15:04:05"的参数一定不能乱填,这里定义的时间为go语言的诞生时间!!!如果填错时间会乱码。
    ========end==========
</pre>
    {{ end }}
{{ end }}

引用邮件模版

# vim /usr/local/alertmanager/alertmanager.yml



global:
  resolve_timeout: 5m
  smtp_from: 'test@qq.com'
  smtp_smarthost: 'smtp.exmail.qq.com:465'
  smtp_auth_username: 'test@qq.com'
  smtp_auth_password: 'xxxxxxxxx'
  smtp_require_tls: false
templates:
  - '/usr/local/alertmanager/tmpl/*.tmpl'  #增加templates配置
route:
  group_by: ['alertname'] 
  group_wait: 5s
  group_interval: 5s
  repeat_interval: 5m
  receiver: 'email'
receivers:
- name: 'email'
  email_configs:
  - to: 'test@qq.com'
    html: '{{ template "email.html" . }}'   #引用邮箱模版
    send_resolved: true 
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance'] 

重启alertmanger,效果如下:

 3.2.3 配置钉钉告警通知

alertmanger必须通过webhoo插件才能将告警发送到钉钉/微信/飞书,因此,需要先安装webhook插件,安装方式有二进制、docker和源码,这里直接运行二进制文件

# 下载,https://github.com/timonwong/prometheus-webhook-dingtalk/releases
wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-arm64.tar.gz 
tar xf prometheus-webhook-dingtalk-2.1.0.linux-arm64.tar.gz 
mv prometheus-webhook-dingtalk-2.1.0.linux-amd64 /usr/local/prometheus-webhook-dingtalk 
cd /usr/local/prometheus-webhook-dingtalk

用法

usage: prometheus-webhook-dingtalk [<flags>]

Flags:
  -h, --help                    # 查看帮助
      --web.listen-address=:8060  # 指定监听地址和端口,默认端口8060
      --web.enable-ui           # 启用web ui,查看配置及编写自定义模板时可预览效果
      --web.enable-lifecycle    Enable reload via HTTP request.
      --config.file=config.yml  # 指定配置文件
      --log.level=info          # 日志级别: [debug, info, warn, error]
      --log.format=logfmt       # 日志格式: [logfmt, json]
      --version                # 查看版本号

启动webhook dingtalk插件

# 启动
/usr/local/prometheus-webhook-dingtalk/prometheus-webhook-dingtalk --config.file=/usr/local/prometheus-webhook-dingtalk/config.yml --web.enable-ui &

配置钉钉

创建钉钉机器人

 复制钉钉机器人的webhook地址和安全码,配置prometheus-webhook-dingtalk

# cp /usr/local/prometheus-webhook-dingtalk/config.example.yml /usr/local/prometheus-webhook-dingtalk/config.yml
# vim /usr/local/prometheus-webhook-dingtalk/config.yml

## Targets, previously was known as "profiles"
targets:
  webhook1:   
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx #这里是机器人的webhook地址
    # 安全设置中的加签
    secret: SEC000000000000000000000
  • 可以配置多个webhook
  • 调用时通过targets进行区分,tagerget名自定义,如配置webhook1、webhook2、webhook3等机器人,想发送消息给webhook1的机器人,则调用url:http://localhost:8060/dingtalk/webhook1/send

默认的钉钉通知模版如下

可以自定义通知模版

 模板效果可以用过dingtalk插件的ui界面调试:

http://127.0.0.1:8060/ui/playgroundhttp://127.0.0.1:8060/ui/playground

自定义消息通知模版 

创建模板:vim /usr/local/alertmanager/tmpl/dingding.tmpl

{{ define "__subject" }}
[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}]
{{ end }}


{{ define "__alert_list" }}{{ range . }}
---
    **告警程序**: prometheus_alert 
    **告警级别**: {{ .Labels.severity }} 
    **告警类型**: {{ .Labels.alertname }} 
    **故障主机**: {{ .Labels.instance }} 
    **告警主题**: {{ .Annotations.summary }}
    **触发时间**: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}  
{{ end }}{{ end }}

{{ define "__resolved_list" }}{{ range . }}
---
    **告警程序**: prometheus_alert 
    **告警级别**: {{ .Labels.severity }} 
    **告警类型**: {{ .Labels.alertname }} 
    **故障主机**: {{ .Labels.instance }} 
    **告警主题**: {{ .Annotations.summary }}
    **触发时间**: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}  
    **恢复时间**: {{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
{{ end }}{{ end }}


{{ define "ops.title" }}
{{ template "__subject" . }}
{{ end }}

{{ define "ops.content" }}
{{ if gt (len .Alerts.Firing) 0 }}
**====侦测到{{ .Alerts.Firing | len  }}个故障====**
{{ template "__alert_list" .Alerts.Firing }}
---
{{ end }}

{{ if gt (len .Alerts.Resolved) 0 }}
**====恢复{{ .Alerts.Resolved | len  }}个故障====**
{{ template "__resolved_list" .Alerts.Resolved }}
{{ end }}
{{ end }}

{{ define "ops.link.title" }}{{ template "ops.title" . }}{{ end }}
{{ define "ops.link.content" }}{{ template "ops.content" . }}{{ end }}
{{ template "ops.title" . }}
{{ template "ops.content" . }}

查看模版效果

引用模版

# vim /usr/local/prometheus-webhook-dingtalk/config.yml


# 配置钉钉消息模板
templates:
  - /usr/local/alertmanager/tmpl/dingding.tmpl
targets:
  webhook1:
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxx
    # secret for signature
    secret: SECd4a3xxxxxxxxxxxxx
    message:
      title: '{{ template "ops.title" . }}'   # 引用模版
      text: '{{ template "ops.content" . }}'

alertmanger配置钉钉告警

# vim /usr/local/alertmanager/alertmanager.yml

global:
  resolve_timeout: 5m
  smtp_from: 'test@qq.com'
  smtp_smarthost: 'smtp.exmail.qq.com:465'
  smtp_auth_username: 'test@qq.com'
  smtp_auth_password: 'xxxxxxxxxx'
  smtp_require_tls: false
templates:
  - '/usr/local/alertmanager/tmpl/*.tmpl'
route:
  group_by: ['alertname']
  group_wait: 5s
  group_interval: 5s
  repeat_interval: 24h
  receiver: 'email'
receivers:
- name: 'email'
  email_configs:  # 发送到邮件
  - to: 'test@qq.com'
    html: '{{ template "email.to.html" . }}'
    send_resolved: true
  webhook_configs: # 发送到钉钉webhook1
  - url: 'http://localhost:8060/dingtalk/webhook1/send'
    send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

重启alertmanger,效果如下

 至此,关于alertmanger邮件+钉钉告警的配置就完成了

觉得有用就收藏下吧~

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、prometheus简介 Prometheus是一个开源的系统监控和告警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF维护管理的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,prometheus支持多种exporter采集数据,还支持通过pushgateway进行数据上报,Prometheus再性能上可支撑上万台规模的集群。 二、prometheus架构图 三、prometheus组件介绍 1.Prometheus Server: 用于收集和存储时间序列数据。 2.Client Library: 客户端库,检测应用程序代码,当Prometheus抓取实例的HTTP端点时,客户端库会将所有跟踪的metrics指标的当前状态发送到prometheus server端。 3.Exporters: prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到prometheus server端 4.Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,, slack等。 5.Grafana:监控仪表盘 6.pushgateway: 各个目标主机可上报数据到pushgatewy,然后prometheus server统一从pushgateway拉取数据。 四、课程亮点 五、效果图展示 六、讲师简介 先超(lucky):高级运维工程师、资深DevOps工程师,在互联网上市公司拥有多年一线运维经验,主导过亿级pv项目的架构设计和运维工作 主要研究方向: 1.云计算方向:容器 (kubernetes、docker),虚拟化(kvm、Vmware vSphere),微服务(istio),PaaS(openshift),IaaS(openstack)等2.系统/运维方向:linux系统下的常用组件(nginx,tomcat,elasticsearch,zookeeper,kafka等),DevOps(Jenkins+gitlab+sonarqube+nexus+k8s),CI/CD,监控(zabbix、prometheus、falcon)等 七、课程大纲

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值