Prometheus AlertManager的使用(邮件和微信告警)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Prometheus AlertManager的使用(邮件和微信告警)相关的知识,希望对你有一定的参考价值。

1.主机的准备工作

1.时间同步

yum install ntpdate -y
ntpdate ntp1.aliyun.com
hwclock -w
crontab -e
sed -i s/SELINUX=enforcing/SLINUX=disabled/g /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

2.AlertManager部署配置

下载 alertmanager-0.24.0.linux-amd64.tar.gz 并配置

二进制包下载解压后即可使用,官网地址:​​https://prometheus.io/download/​

1.上传下载的alertmanager-0.24.0.linux-amd64.tar.gz到、/user/local
cd
2.解压缩
tar zxvf alertmanager-0.24.0.linux-amd64.tar.gz -C /usr/local
3.改名
mv /usr/local/alertmanager-0.24.0.linux-amd64 /usr/local/alertmanager
4.查看版本信息
/usr/local/alertmanager/alertmanager --version
显示如下
alertmanager, version 0.24.0 (branch: HEAD, revision: f484b17fa3c583ed1b2c8bbcec20ba1db2aa5f11)
build user: root@265f14f5c6fc
build date: 20220325-09:31:33
go version: go1.17.8
platform: linux/amd64
5.启动alertmanage服务
/usr/local/alertmanager/alertmanager --config.file="/usr/local/alertmanager/alertmanager.yml" &

#查看端口有9093 9094表示服务启动成功
netstat -tnpl | grep alertmanager
或者
ss -tnpl | grep alertmanager
#查看进程
ps -ef | grep alertmanager

#关闭进程

pkill alertmanager

6.设置Alertmanager开机启动

vi /usr/lib/systemd/system/alertmanager.service
#编辑如下 注意:ExecStart=为你自己的alertmanager 路径 --web.external-url为你自己的IP地址

[Unit]
Description=AlertManager Server Service daemon
Wants=network-online.target
After=network-online.target

[Service]
User=root
Group=root
Type=Simple
Restart=on-failure
ExecStart=/usr/local/alertmanager/alertmanager \\
--config.file "/usr/local/alertmanager/alertmanager.yml" \\
--storage.path="/usr/local/alertmanager/data" \\
--data.retention=120h \\
--alerts.gc-interval=30m \\
--web.external-url "http://10.10.201.172:9093"
--web.listen-address=":9093"

[Install]
WantedBy=multi-user.target

7.设置开机启动
刷新一下
systemctl daemon-reload
加入启动服务
systemctl enable alertmanager.service
开启服务
systemctl start alertmanager.service
查看服务
systemctl status alertmanager.service

查看进程
ps -ef | grep alertmanager

#浏览器打开​​http://10.10.201.172:9093/#/alerts​

如下完成安装

Prometheus

3.配置alertmanager 以163邮箱为例

global:全局配置,主要配置告警方式,如邮件、webhook等。

1.备份一份alertmanager.yml 防止改错
cp /usr/local/alertmanager/alertmanager /usr/local/alertmanager/alertmanager.yml.bak
2.修改alertmanager.yml 已163邮箱为例
vim /usr/local/alertmanager/alertmanager.yml
RHOQINPITXPEMVYX
如下

# global:全局配置,主要配置告警方式,如邮件、webhook等。
global:
resolve_timeout: 5m # 超时,默认5min
smtp_smarthost: smtp.163.com:465 # 这里为 QQ 邮箱 SMTP 服务地址,官方地址为 smtp.qq.com 端口为 465 或 587,同时要设置开启 POP3/SMTP 服务。
smtp_from: cheneeglei120228@163.com
smtp_auth_username: cheneeglei120228@163.com
smtp_auth_password: RHOQINPITXPEMVYX # 这里为第三方登录 QQ 邮箱的授权码,非 QQ 账户登录密码,否则会报错,获取方式在 QQ 邮箱服务端设置开启 POP3/SMTP 服务时会提示。
smtp_require_tls: false # 是否使用 tls,根据环境不同,来选择开启和关闭。如果提示报错 email.loginAuth failed: 530 Must issue a STARTTLS command first,那么就需要设置为 true。着重说明一下,如果开启了 tls,提示报错 starttls failed: x509: certificate signed by unknown authority,需要在 email_configs 下配置 insecure_skip_verify: true 来跳过 tls 验证。

templates: # # 模板
- /usr/local/alertmanager/alert.tmp

# route:用来设置报警的分发策略。Prometheus的告警先是到达alertmanager的根路由(route),alertmanager的根路由不能包含任何匹配项,因为根路由是所有告警的入口点。
# 另外,根路由需要配置一个接收器(receiver),用来处理那些没有匹配到任何子路由的告警(如果没有配置子路由,则全部由根路由发送告警),即缺省
# 接收器。告警进入到根route后开始遍历子route节点,如果匹配到,则将告警发送到该子route定义的receiver中,然后就停止匹配了。因为在route中
# continue默认为false,如果continue为true,则告警会继续进行后续子route匹配。如果当前告警仍匹配不到任何的子route,则该告警将从其上一级(
# 匹配)route或者根route发出(按最后匹配到的规则发出邮件)。查看你的告警路由树,https://www.prometheus.io/webtools/alerting/routing-tree-editor/,
# 将alertmanager.yml配置文件复制到对话框,然后点击"Draw Routing Tree"
route:
group_by: [alertname] # 用于分组聚合,对告警通知按标签(label)进行分组,将具有相同标签或相同告警名称(alertname)的告警通知聚合在一个组,然后作为一个通知发送。如果想完全禁用聚合,可以设置为group_by: [...]
group_wait: 30s # 当一个新的告警组被创建时,需要等待group_wait后才发送初始通知。这样可以确保在发送等待前能聚合更多具有相同标签的告警,最后合并为一个通知发送。
group_interval: 2m # 当第一次告警通知发出后,在新的评估周期内又收到了该分组最新的告警,则需等待group_interval时间后,开始发送为该组触发的新告警,可以简单理解为,group就相当于一个通道(channel)。
repeat_interval: 10m # 告警通知成功发送后,若问题一直未恢复,需再次重复发送的间隔。
receiver: email # 配置告警消息接收者,与下面配置的对应。例如常用的 email、wechat、slack、webhook 等消息通知方式。
routes: # 子路由
- receiver: wechat
match: # 通过标签去匹配这次告警是否符合这个路由节点;也可以使用 match_re 进行正则匹配
severity: Disaster # 标签severity为Disaster时满足条件,使用wechat警报

receivers: # 配置报警信息接收者信息。
- name: email # 警报接收者名称
email_configs:
- to: template "email.to" # 接收警报的email(这里是引用模板文件中定义的变量)
html: template "email.to.html" . # 发送邮件的内容(调用模板文件中的)
# headers: Subject: " .CommonLabels.instance .CommonAnnotations.summary " # 邮件标题,不设定使用默认的即可
send_resolved: true # 故障恢复后通知

- name: wechat
wechat_configs:
- corp_id: wwd76d598b5fad5097 # 企业信息("我的企业"--->"CorpID"[在底部])
to_user: @all # 发送给企业微信用户的ID,这里是所有人
# to_party: 接收部门ID
agent_id: 1000004 # 企业微信("企业应用"-->"自定应用"[Prometheus]--> "AgentId")
api_secret: DY9IlG0Bdwawb_ku0NblxKFrrmMwbLIZ7YxMa5rCg8g # 企业微信("企业应用"-->"自定应用"[Prometheus]--> "Secret")
message: template "email.to.html" . # 发送内容(调用模板)
send_resolved: true # 故障恢复后通知

inhibit_rules: # 抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)。
- source_match:
severity: critical
target_match:
severity: warning
equal: [alertname, dev, instance]

验证一下:

#修改好配置文件后,可以使用amtool工具检查配置
/usr/local/alertmanager/amtool check-config /usr/local/alertmanager/alertmanager.yml
显示
Checking /usr/local/alertmanager/alertmanager.yml SUCCESS
Found:
- global config
- route
- 1 inhibit rules
- 2 receivers
- 1 templates
SUCCESS
正确完成

显示如下

Prometheus

下面是alertmanager.yml的一些说明 QQ邮箱为例

# global:全局配置,主要配置告警方式,如邮件、webhook等。
global:
resolve_timeout: 5m # 超时,默认5min
smtp_smarthost: smtp.qq.com:465 # 这里为 QQ 邮箱 SMTP 服务地址,官方地址为 smtp.qq.com 端口为 465 或 587,同时要设置开启 POP3/SMTP 服务。
smtp_from: 916719080@qq.com
smtp_auth_username: 916719080@qq.com
smtp_auth_password: lojdeopbholobgah # 这里为第三方登录 QQ 邮箱的授权码,非 QQ 账户登录密码,否则会报错,获取方式在 QQ 邮箱服务端设置开启 POP3/SMTP 服务时会提示。
smtp_require_tls: false # 是否使用 tls,根据环境不同,来选择开启和关闭。如果提示报错 email.loginAuth failed: 530 Must issue a STARTTLS command first,那么就需要设置为 true。着重说明一下,如果开启了 tls,提示报错 starttls failed: x509: certificate signed by unknown authority,需要在 email_configs 下配置 insecure_skip_verify: true 来跳过 tls 验证。

templates: # # 模板
- /usr/local/alertmanager/alert.tmp

# route:用来设置报警的分发策略。Prometheus的告警先是到达alertmanager的根路由(route),alertmanager的根路由不能包含任何匹配项,因为根路由是所有告警的入口点。
# 另外,根路由需要配置一个接收器(receiver),用来处理那些没有匹配到任何子路由的告警(如果没有配置子路由,则全部由根路由发送告警),即缺省
# 接收器。告警进入到根route后开始遍历子route节点,如果匹配到,则将告警发送到该子route定义的receiver中,然后就停止匹配了。因为在route中
# continue默认为false,如果continue为true,则告警会继续进行后续子route匹配。如果当前告警仍匹配不到任何的子route,则该告警将从其上一级(
# 匹配)route或者根route发出(按最后匹配到的规则发出邮件)。查看你的告警路由树,https://www.prometheus.io/webtools/alerting/routing-tree-editor/,
# 将alertmanager.yml配置文件复制到对话框,然后点击"Draw Routing Tree"
route:
group_by: [alertname] # 用于分组聚合,对告警通知按标签(label)进行分组,将具有相同标签或相同告警名称(alertname)的告警通知聚合在一个组,然后作为一个通知发送。如果想完全禁用聚合,可以设置为group_by: [...]
group_wait: 30s # 当一个新的告警组被创建时,需要等待group_wait后才发送初始通知。这样可以确保在发送等待前能聚合更多具有相同标签的告警,最后合并为一个通知发送。
group_interval: 2m # 当第一次告警通知发出后,在新的评估周期内又收到了该分组最新的告警,则需等待group_interval时间后,开始发送为该组触发的新告警,可以简单理解为,group就相当于一个通道(channel)。
repeat_interval: 10m # 告警通知成功发送后,若问题一直未恢复,需再次重复发送的间隔。
receiver: email # 配置告警消息接收者,与下面配置的对应。例如常用的 email、wechat、slack、webhook 等消息通知方式。
routes: # 子路由
- receiver: wechat
match: # 通过标签去匹配这次告警是否符合这个路由节点;也可以使用 match_re 进行正则匹配
severity: Disaster # 标签severity为Disaster时满足条件,使用wechat警报

receivers: # 配置报警信息接收者信息。
- name: email # 警报接收者名称
email_configs:
- to: template "email.to" # 接收警报的email(这里是引用模板文件中定义的变量)
html: template "email.to.html" . # 发送邮件的内容(调用模板文件中的)
# headers: Subject: " .CommonLabels.instance .CommonAnnotations.summary " # 邮件标题,不设定使用默认的即可
send_resolved: true # 故障恢复后通知

- name: wechat
wechat_configs:
- corp_id: wwd76d598b5fad5097 # 企业信息("我的企业"--->"CorpID"[在底部])
to_user: @all # 发送给企业微信用户的ID,这里是所有人
# to_party: 接收部门ID
agent_id: 1000004 # 企业微信("企业应用"-->"自定应用"[Prometheus]--> "AgentId")
api_secret: DY9IlG0Bdwawb_ku0NblxKFrrmMwbLIZ7YxMa5rCg8g # 企业微信("企业应用"-->"自定应用"[Prometheus]--> "Secret")
message: template "email.to.html" . # 发送内容(调用模板)
send_resolved: true # 故障恢复后通知

inhibit_rules: # 抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)。
- source_match:
severity: critical
target_match:
severity: warning
equal: [alertname, dev, instance]

4、关联Prometheus服务端与Alertmanager组件

Alertmanager是独立的组件,告警信息是通过Prometheus服务端推送过来的,所以需要在服务端Prometheus中关联Alertmanager组件并添加告警规则文件。

注意:在Prometheus服务器上设置我的是10.10.201.86

1.#配置prometheus关联Alertmanager
vi /usr/local/prometheus/prometheus.yml
修改- alertmanager 改为你自己的

# - alertmanager:9093
- 10.10.201.172:9093

# rule_files:下面添加一行

- "rules/*.yml"

如下

Prometheus






以上是关于Prometheus AlertManager的使用(邮件和微信告警)的主要内容,如果未能解决你的问题,请参考以下文章

linux(centos8):prometheus使用alertmanager发送报警邮件(prometheus 2.18.1/alertmanager 0.20.0)

Prometheus+alertmanager告警配置-2

Prometheus配合Alertmanager报警系统

Prometheus配置alertmanager告警邮件通知

2, Prometheus之部署Alertmanager

小姐姐带你入门Alertmanager与Prometheus告警规则