alertmanager告警

黄沈浪
2023-12-01

下载安装

## 创建相关目录
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
 类似资料: