Prometheus将数据采集和报警分成了两个模块。报警规则配置在Prometheus Servers上,然后发送报警信息到AlertManger,然后我们的AlertManager就来管理这些报警信息,包括 silencinginhibition,聚合报警信息过后通过 email、PagerDuty、HipChat、Slack 等方式发送消息提示。

部署完学习过程中也就明白了 Alertmanager 在监控当中的位置。

部署 Alertmanager

部署方式和 Prom 也几乎一样,下载一个命令+配置文件,指定配置文件运行即可

下载安装包链接:https://prometheus.io/download/#alertmanager

mkdir /opt/monitoring/alert && cd $_
wget https://github.com/prometheus/alertmanager/releases/download/v0.24.0/alertmanager-0.24.0.linux-amd64.tar.gz
tar zxf alertmanager-0.24.0.linux-amd64.tar.gz
mv alertmanager-0.24.0.linux-amd64 alertmanage && cd $_

使用 systemd 管理服务启停

$ vim /usr/lib/systemd/system/alertmanager.service
[Unit]
Descriptioin=alertmanager

[Service]
# 这里注意命令和配置文件所在位置
ExecStart=/opt/monitoring/alert/alertmanager \
          --config.file=/opt/monitoring/alert/alertmanager/alertmanager.yml
ExecReload=/bin/kill -HUP  $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

修改配置文件: https://prometheus.io/docs/alerting/latest/configuration/

$ vim /opt/monitoring/alert/alertmanager/alertmanager.yml
# 最上方添加
global:
  # 如果告警之后5分钟内没有再次告警或者更新告警,则被认为已解决
  resolve_timeout: 5m
  # 邮箱服务器配置
  smtp_from: 841597730@qq.com
  smtp_smarthost: smtp.qq.com:465
  smtp_auth_username: '841597730@qq.com'
  smtp_auth_password: 'xxxxxxxxxxxxxxxx'    # 邮箱授权码

# 配置路有树,触发告警后的处理
route:
  group_by: ['alertname']    # 根据告警规则组名进行分组,这里也可以是指标的某个标签
  group_wait: 30s            # 分组内第一个告警等待时间,时间内有第二个告警则合并发送
  group_interval: 5m         # 该分组内的告警间隔
  repeat_interval: 5m        # 重复告警发送间隔
  receiver: 'googlemail'         # 接收方,与下方receivers.name对应

# 还可以继续添加routes进行分组发送告警
  routes:
  - receiver: 'backend-wechat'
    group_wait: 10s
    match_re:        # 带有以下标签指标的告警将被发送到receivers.name为backend-wechat
      service: java

# 告警接收人
receivers:
  - name: 'googlemail'
    email_configs:
      - to: 'mupeifeiyi@gmail.com'
  - name: 'backend-wechat'
    email_configs:
      - to: 'mupeifeiyi@gmail.com'

启动服务并开机自启

systemctl enable --now alertmanager

可以直接访问 http://192.168.1.11:9093 进入 alertmanager 的 web 界面

prom_alert

Prom 与 Alert 的通信

在 Prometheus 的配置文件中添加 Alertmanager 的接收告警地址

alerting:
  alertmanagers:
    - static_configs:
        - targets:
          - 192.168.1.11:9093
# 指定告警规则文件的存放位置
rule_files:
  - "rules/*.yml"

编写告警规则

告警规则是在 prom 所在的位置写的,也是有 prom 来加载的

$ mkdir /opt/monitoring/prometheus/rules && cd $_
$ vim test.yml
groups:
- name: test    # 与alertmanager的分组alertname对应
  rules:
  # 任何实例5分钟内无法访问发出告警
  - alert: 实例无法访问          # 告警规则名称
    expr: up == 0           # 基于PromQL的触发条件
    for: 1m                 # 条件持续满足1分钟触发
    labels:                 # 自定义标签,与prom标签无关
      test: 2
    annotations:            # 告警信息
      summary: "{{ $labels.instance }} 无法访问"
      description: "{{ $labels.instance }} 持续5分钟无法访问"

# 此处的$labels后面接的都是prom中指标的标签

重启 prom

访问 prom 告警规则界面,查看规则, http://ip:9090/rules

模拟告警

停掉一台节点的 node_exporter

prom 告警界面将变为以下内容,可以看到告警规则中自定义的标签也会出现在符合规则的节点

image-20220828161525946

告警收敛

告警太多,会导致运维人员对告警的麻木,总感觉看了之后没用,或者一些比较不重要的告警,不利于重要故障的处理。

alert 可以对告警收敛合并发送,避免大量的告警个数产生

group 分组

默认启用分组功能,默认也是通过 alertname 的标签来分组,alertname 也会是告警实例的指标标签,也可以使用其他的指标

配合 group_intervalrepeat_interval 两个配置进行告警分组的收敛。

告警抑制

抑制规则在 alertmanager 中配置

inhibit_rules:
  - source_match:    
      # 在prom告警规则中自定义的标签,告警等级
      level: 'high'   # 告警级别
    target_match:     # 抑制告警级别,具有以下标签的告警将被忽略
      level: 'warning'
    equal: ['instance']

以上的抑制表示,当具有 level 为 high 的告警触发后,忽略 level 为 warning 的告警,且这个规则是在具有同样的 alertname 和 instance 的指标下才会触发这种抑制规则。

示例:instance 表示的是主机ip,一台主机宕机后,主机上的所有端口都会报警,这种情况下,只需要报警主机宕机即可,其他端口报警都可忽略。

告警静默

特定时间静音提醒的机制

访问 alert 的 ui 界面,http://ip:9093/#/silences,进行配置即可

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0