下载安装
## 创建相关目录
mkdir -p /data/alertmanager/{bin,conf,logs,data,templates}
## 下载安装
wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
tar xvf alertmanager-0.21.0.linux-amd64.tar.gz -C /usr/local/
mv /usr/local/alertmanager-0.21.0.linux-amd64 /usr/local/alertmanager
anzhaugn配置文件说明:
全局配置(global):用于定义一些全局的公共参数,如全局的SMTP配置,Slack配置等内容;
模板(templates):用于定义告警通知时的模板,如HTML模板,邮件模板等;
告警路由(route):根据标签匹配,确定当前告警应该如何处理;
接收人(receivers):接收人是一个抽象的概念,它可以是一个邮箱也可以是微信,Slack或者Webhook等,接收人一般配合告警路由使用;
抑制规则(inhibit_rules):合理设置抑制规则可以减少垃圾告警的产生
group_by:定义分组规则。
group_wait:设置等待时间,如果在等待时间内当前group接收到了新的告警这些告警将会合并为一个通知向receiver发送。
group_interval:定义相同的Group之间发送告警通知的时间间隔。
repeat_interval:发送报警间隔,如果指定时间内没有修复,则重新发送报警。
match_re:设置match_re可以验证当前告警标签的值是否满足正则表达式的内容。
continue:continue的值为false,那么告警在匹配到第一个子节点之后就直接停止。如果continue为true,报警则会继续进行后续子节点的匹配
inhibit_rules 抑制规则说明:当已经发送的告警通知匹配到target_match和target_match_re规则,当有新的告警规则如果满足source_match或者定义的匹配规则,并且已发送的告警与新产生的告警中equal定义的标签完全相同,则启动抑制机制,新的告警不会发送。
告警通知文件
vim /usr/local/alertmanager/alertmanager.yml
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.qq.com:465' #smtpqq服务器
smtp_from: 'xxxxx@qq.com' #发邮件的邮箱
smtp_auth_username: 'xxxx@qq.com' #发邮件的邮箱用户名,也就是你的邮箱
smtp_auth_password: 'xxxxx' #发邮件的邮箱密码,这个需要到网易设置哪里开启下SMTP,这个服务能让你在本地客户端上收发邮件,密码要写开启服务后给你的密码,不然会没权限发送邮件,也可使用其他如qq邮箱
smtp_require_tls: false # 有些邮箱需要开启此配置,这里使用的是qq邮箱,仅做测试,不需要开启此功能
# 配置路由分组
route:
group_by: ['alertname'] # 路由分组
group_wait: 30s # 在组内等待所配置的时间,如果同组内,30秒内出现相同报警,在一个组内出现。
group_interval: 5s # 如果组内内容不变化,合并为一条警报信息,5m后发送。
repeat_interval: 1h # 发送报警间隔,如果指定时间内没有修复,则重新发送报警。
receiver: 'default' # 指定默认的接收器,告警发送是需要指定接收器的,接收器在receivers中配置,接收器可以是email、webhook、pagerduty、wechat等等。一个接收器可以有多种发送方式。
routes:
- receiver: 'email'
match_re:
severity: 'warning|error|critical'
# 配置子路由,子路由的属性继承于根路由(即上面的配置),在子路由中可以覆盖根路由的配置
routes:
- name: 'email'
- match_re: # 使用正则的方式匹配告警标签
severity: 'warning|error|critical' # 这里可以匹配出标签含有service=warning或service=error或service=critical的告警
receiver: 'default' # 指定接收器名
# 接收器指定发送人以及发送渠道
receivers:
- name: 'default' # 指定接收器为
email_configs:
- to: 'xxxx@qq.com' # 收邮件的邮箱,如果想发送多个人就以 ','做分割,写多个邮件人即可
send_resolved: true # 是否通知已解决的警报
# 抑制规则:抑制规则允许在另一个警报正在触发的情况下使一组告警静音。其实可以理解为告警依赖。比如一台数据库服务器掉电了,会导致db监控告警、网络告警等等,可以配置抑制规则如果服务器本身down了,那么其他的报警就不会被发送出来。
inhibit_rules:
#下面配置的含义:当有多条告警在告警组里时,并且他们的标签alertname,cluster,service都相等,如果severity: 'critical'的告警产生了,那么就会抑制severity: 'warning'的告警。
- source_match: # 源标签警报触发时抑制含有目标标签的警报,在当前警报匹配 status: 'critical'
severity: 'critical' # 这个是新的告警,下面warning通知过后就不会在通知了
target_match:
severity: 'warning' # 目标标签值正则匹配,可以是正则表达式如: ".*MySQL.*"
equal: ['alertname', 'dev', 'instance'] # 确保这个配置下的标签内容相同才会抑制,也就是说警报中必须有这三个标签值才会被抑制。
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.163.com:25'
smtp_from: 'xxx@163.com'
smtp_auth_username: 'xxx@163.com'
smtp_auth_password: 'xxx'
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5s
repeat_interval: 1h
receiver: 'default'
routes:
- receiver: 'email'
match_re:
severity: 'warning|error|critical'
receivers:
- name: 'default'
- name: 'email'
email_configs:
- to: 'xxx@qq.com'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname','dev','instance']
告警规则配置文件
#创建告警触发规则的文件存放目录
mkdir /etc/rules
#编写告警触发规则文件
vim /etc/rules/nodes.rules.yml
配置文件说明:
alert:告警规则的名称。
expr:基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件。
for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在等待期间新产生告警的状态为pending。
labels:自定义标签,允许用户指定要附加到告警上的一组附加标签。
annotations:用于指定一组附加信息,比如用于描述告警详细信息的文字等,annotations的内容在告警产生时会一同作为参数发送到Alertmanager。
groups:
- name: nodes
rules:
- alert: AvailableMemoryBelow30%
expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 30
for: 2m
labels:
severity: warning
annotations:
summary: Host memory usage is below 30% (instance {{ $labels.instance }})
description: "Node memory is filling up (< 30% left)\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
- alert: AvailableMemoryBelow20%
expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 20
for: 2m
labels:
severity: error
annotations:
summary: Host memory usage is below 20% (instance {{ $labels.instance }})
description: "Node memory is filling up (< 20% left)\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"
关联Prometheus
## 修改Prometheus的配置文件
vim /usr/local/prometheus/prometheus.yml
# 全局配置
global:
scrape_interval: 30s #将刮油间隔设置为每15秒一次。默认值为每1分钟,评估间隔:15秒#每15秒评估一次规则。默认值为每1分钟。scrape_timeout设置为全局默认值(10秒)。
# Alertmanager配置
alerting:
alertmanagers:
- static_configs:
- targets: ['Alertmanager机器ip:9093']
# 指定告警触发规则文件存放路径。 加载规则一次,并根据全局“求值间隔”定期求值。
rule_files:
- "/etc/rules/*.yml"
# - "first_rules.yml"
# # - "second_rules.yml"
配置systen启动
cat >> /lib/systemd/system/alertmanager.service <<EOF
[Service]
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml
[Install]
WantedBy=multi-user.target
[Unit]
Description=alertmanager
EOF
启动:
systemctl start alertmanager.service
systemctl enable alertmanager.service