prometheus配置altermanager告警

一.告警简介

1.工作流程

prometheus收集监测的信息,通过prometheus.yml 文件中定义 rules 文件,rules 里包含告警信息
prometheus 把告警信息 push 给 altermanager,alertmanager 里定义收件人和发件人
altermanager 发送文件到邮箱或微信

2.告警生命周期

定期采集监控数据
定期扫描告警规则,发现告警发给 alertmanager,prometheus 页面能看到 alert ,状态为 pending
多次发送到 alertmanager,持续时长超过告警告警规则的 for 的 alert,prometheus 页面看到状态为 firing,准备发送
firing 状态的 alert 等待 group_interval 时间聚合发送
恢复正常后,警报状态重新变回 inactive

3.告警等级

Inactive: 什么都没发生
Pending:已触发阈值,但未满足告警持续时间
Firing:已触发阈值,并满足for定义的持续时间。告警发送给接受者

4.通知方式

webhook:web回调或者http服务的推送API接口
wechat:通过微信 API发送
sns:短信
Pushover :通过Pushover API发送
email:电子邮件

二. AlertManager组件

1.特性

prometheus是组件化工具,prometheus server只负责产生告警,并不会处理告警。 AlertManager组件就是用来处理和消费告警

Alertmanager定义告警机制,通过Slack,Email,wechat等发送警报

1.1 分组

当系统停机时,可能会成百上千的报警同时生成,这个时候就需要将这些告警信息分组了
分组:是指当出现问题时,Altermanager会收到一个单一的通知将同类型/同一种影响的短信合并为一条来发送

1.2. 抑制

抑制:是指当报警发出后,停止重复发送初始化警告引发其他错误的警告的机制
例如当警报被触发,通知整个性能不可达,可以配置Alertmanager忽略由该警报触发而产生的所有其他警报,这可以防止通知多个或多个问题不相关的其他警报。

1.3.沉默

沉默:是指在特定时间内不要发送告警信息,比如设置23点-08点不发送任何告警信息

三、二进制安装altermanager

下载官网

Download | Prometheus

(1)创建工作目录

mkdir -pv /softwares

(2)解压altermanager

tar xf alertmanager-0.25.0.linux-amd64.tar.gz -C /softwares

(3)通知规则---邮件的方式-不使用模板

[root@xiaosun alertmanager-0.25.0.linux-amd64]# cat alertmanager.yml 
global:
  resolve_timeout: 5m
  smtp_from: '1692****5@qq.com'   #发件人邮箱
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_auth_username: '1692****5@qq.com'   #发件人用户名
  smtp_auth_password: 'aicgt*****hia'      #邮箱授权码
  smtp_require_tls: false
  smtp_hello: 'qq.com'
route:
  group_by: ['alertname']
  group_wait: 5s
  group_interval: 5s
  repeat_interval: 5m
  receiver: 'email'
receivers:
- name: 'email'
  email_configs:
  - to: '1692****5@qq.com'   #收件人邮箱
    send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']
smtp_smarthost: 这里为 QQ 邮箱 SMTP 服务地址,官方地址为 smtp.qq.com 端口为 465 或 587,同时要设置开启 POP3/SMTP 服务。
smtp_auth_password: 这里为第三方登录 QQ 邮箱的授权码,非 QQ 账户登录密码,否则会报错,获取方式在 QQ 邮箱服务端设置开启 POP3/SMTP 服务时会提示。
smtp_require_tls: 是否使用 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 验证。

AlertManager 配置自定义邮件模板

具测试 模板并不生效

[root@xiaosun alertmanager-0.25.0.linux-amd64]#  vim template/email.tmpl
{{ define "email.to.html" }}
{{ range .Alerts }}
=========start==========<br>
告警程序: prometheus_alert<br>
告警级别: {{ .Labels.severity }} 级<br>
告警类型: {{ .Labels.alertname }}<br>
故障主机: {{ .Labels.instance }}<br>
告警主题: {{ .Annotations.summary }}<br>
触发时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} <br>
=========end==========<br>
{{ end }}
{{ end }}

这里定义的时间为go 语言的诞生时间!!!切记不能乱填

 {{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}

调用模板

global:
.....
  smtp_hello: 'qq.com'
 # 调用模板
templates:
  - '/softwares/alertmanager-0.25.0.linux-amd64/template/email.tmpl'
route:
  group_by: ['alertname']
....

(4)运行altermanager服务

启动脚本

cat > /usr/lib/systemd/system/alertmanager.service  << 'EOF'
[Unit]
Description=alertmanager
[Service]
Type=simple
ExecStart=/softwares/alertmanager-0.25.0.linux-amd64/alertmanager  --storage.path=/softwares/alertmanager-0.25.0.linux-amd64/data --config.file=/softwares/alertmanager-0.25.0.linux-amd64/alertmanager.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start alertmanager
systemctl status alertmanager

3、配置prometheus推送给altermanager:

(1)修改prometheus的配置文件

[root@xiaosun prometheus-2.37.6.linux-amd64]# vim prometheus.yml 
...
alerting:
  alertmanagers:
    - static_configs:
        - targets:
            - 10.0.0.108:9093

rule_files:
    - "/softwares/prometheus-2.37.6.linux-amd64/rule/*.yml"
在实际环境中,告警规则肯定有很多,比如对服务器异常进行告警,就有宕机、CPU使用率超过100%、内存使用率超过80%、硬盘使用率超过80%等等
最好创建一个文件夹,针对每个监控对象,创建一个配置文件。
告警规则配置在独立的文件中,文件格式为yml,并在prometheus.yml文件的rule_files模块中进行引用,prometheus启动时,会在rule_files定义的文件或目录下查找规则配置文件并加载

(2)编写prometheus的规则文件

[root@xiaosun prometheus-2.37.6.linux-amd64]# mkdir rule 
# 相关的规则设置定义在一个group下。在每一个group中我们可以定义多个告警规则(rule)
groups:
# name:组名。报警规则组名称
- name: alters
  # rules:定义规则
  rules:
  # alert:告警规则的名称
  - alert: NodeMemoryUsage 
  
    # expr:基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件。
    expr: 100 - (node_memory_MemFree_bytes+node_memory_Cached_bytes+node_memory_Buffers_bytes) / node_memory_MemTotal_bytes * 100 > 20
    
    # for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在等待期间新产生告警的状态为pending。
    for: 1m
    
    # labels:自定义标签,允许用户指定要附加到告警上的一组附加标签。
    labels:
      # severity: 指定告警级别。有三种等级,分别为warning、critical和emergency。严重等级依次递增。
      severity: emergency

    # annotations: 附加信息,比如用于描述告警详细信息的文字等
    # annotations的内容在告警产生时会一同作为参数发送到Alertmanager。
    annotations:
      # summary描述告警的概要信息
      # description用于描述告警的详细信息。
      summary: "内存使用过高"
      description: "{{ $labels.instance }} 内存使用大于 80% (当前值: {{ $value }})"
例子
[root@xiaosun prometheus-2.37.6.linux-amd64]# vim rule/rules.yml
groups:
- name: container-runtime
  rules:
  - alert: container-10.0.0.108
    expr: up{instance="10.0.0.108:9100", job="node_exporter_108"} == 0
    for: 15s
    annotations:
      summary: "{{ $labels.instance }} 已停止运行超过 15s!"

  - alert: container-容器挂啦-2023
    expr: up{instance="10.0.0.109:9100", job="node_exporter_109"} == 0
    for: 5s
    annotations:
      summary: "Duang~ {{ $labels.instance }} 已停止运行超过 15s!"

(3)重启prometheus server服务

[root@xiaosun prometheus-2.37.6.linux-amd64]# systemctl restart prometheus
posted @ 2023-05-18 17:15  买定灬离手  阅读(1335)  评论(0编辑  收藏  举报