Prometheus+alertmanager实现告警的简单验证

发布时间 2023-07-06 22:53:53作者: 济南小老虎

Prometheus+alertmanager实现告警的简单验证


背景

学习源自: http://www.mydlq.club/article/126/
上午没搞定, 中午睡不着,继续学习处理. 

发现最恶心的有点事 alertmanager的  --cluster.listen-address --web.listen-address 两个参数
很多资料里面只写了第一个参数, 没写第二个参数. 导致我端口冲突(测试kafka私用)
无法正常使用, 浪费了至少 1h 的时间. 还是需要多查看 -h 以及一些帮助文档的. 

服务启动设置.

cd /prometheus/xxxx
nohup ./prometheus --config.file=prometheus.yml --storage.tsdb.retention.time=168h  --web.listen-address=:19090  --web.enable-lifecycle >/dev/null 2>&1 & 

nohup ./alertmanager --web.listen-address=":19093" --cluster.listen-address="0.0.0.0:19094" --config.file=alertmanager.yml --storage.path="/prometheus/alertdata/" --data.retention=120h >/dev/null 2>&1 & 

Alertmanager 预警邮件模板

vim mail.temp

{{ define "email.to" }}380235180@qq.com{{ end }}
{{ define "email.title" }}来自济南小老虎的报警{{ end }}
{{ define "email.to.html" }}
{{ range .Alerts }}
<p>==========<strong>告警通知</strong>==========</p>
<strong>告警程序:</strong> prometheus_alert<br>
<strong>告警级别:</strong> {{ .Labels.severity }}<br>
<strong>告警类型:</strong> {{ .Labels.alertname }}<br>
<strong>告警实例:</strong> {{ .Labels.instance }}<br>
<strong>告警信息:</strong> {{ .Annotations.summary }}<br>
<strong>告警描述:</strong> {{ .Annotations.description }}<br>
<strong>当前状态:</strong> {{ .Status }}<br>
<strong>触发时间:</strong> {{ .StartsAt.Format "2023-01-01 15:04:05" }}<br>
<strong>监控界面地址:</strong> <a href="{{ .GeneratorURL }}">点击跳转</a><br>
{{ end }}
{{ end }}

Alertmanager 预警自己的配置文件

vim alertmanager.yml
# 全局配置
global:
  ## 在没有报警的情况下声明为已解决的时间
  resolve_timeout: 5m
  ## ===配置邮箱===
  ## 配置邮箱 SMTP 服务器地址和端口;
  smtp_smarthost: 'smtp.qq.com:25'
  ## 配置发件人邮箱
  smtp_from: '380235180@qq.com'
  ## 配置发件人邮箱账户
  smtp_auth_username: '380235180@qq.com'
  ## 配置发件人邮箱密码 (这里指的是邮箱授权码,不是登录密码)
  smtp_auth_password: 'xxxxxxxx'
  ## 配置是否使用 TLS 加密
  smtp_require_tls: false

# 自定义邮件通知模板,注意当前目录下可以这样设置. 
templates:
  - '*.temp'

# 告警路由配置
route:
  ## 配置用于分组的标签
  group_by: ['alertname', 'cluster']
  ## 配置同一组告警等待时间。
  ## 用于配置接收到某组中的告警信息后,并不会立即发出告警信息,
  ## 而是等待指定时间,如果有相同组的告警信息,则一起发送告警
  group_wait: 30s
  ## 两组告警的间隔时间
  group_interval: 10m
  ## 重复告警的间隔时间,减少相同邮件的发送频率。
  ## 如果一个报警信息已经发送成功了,等待 repeat_interval 时间来重新发送他们
  ## 但是如果告警在 resolve_timeout 时间内没有重复发送,表示问题已经解决,则
  ## 到 repeat_interval 时间后就不会重新发送
  repeat_interval: 30m
  ## 配置默认接收者,如果一个报警没有被一个 route 匹配,则发送给默认的接收器
  receiver: 'email'
  ## 配置指定组的消息由对应哪个接收者进行处理
  routes:
  - receiver: 'email'
    group_wait: 30s
    ### 配置匹配标签,只有匹配的标签才会使用当前配置中指定的接收者进行处理
    match:
      alertname: email-test

# 告警接收者配置(大部分参数值都是引入模板中定义的变量)
receivers:
- name: 'email'
  email_configs:
    ## 设置接收告警的邮箱,这里既可以直接写接收者邮箱,也可以引入模板中定义的变量
  - to: '{{ template "email.to" }}'
    ## 设置邮箱标题
    headers: { Subject: '{{ template "email.title" }}【告警状态: {{ .Status }}】' }
    ## 设置邮箱内容
    html: '{{ template "email.to.html" .}}'
    ## 是否通知已解决的告警
    send_resolved: true

prometheus的设置

修改配置文件
vim prometheus.yml

############ 添加配置 AlertManager 服务器地址 ###################
alerting:
  alertmanagers:
  - static_configs:
    - targets: ['127.0.0.1:19093']

############ 指定告警规则文件路径位置 ###################
rule_files:
  - "*-rule.yml"

prometheus 设置告警规则

vim email-rule.yml

## 告警规则配置如下,其中告警条件 up > -1 是必然满足的,
## 必定会触发 Prometheus 告警状态为 Firing。
groups:
- name: Instances
  rules:
  - alert: InstanceDown
    expr: up > -1
    for: 1m
    labels:
      severity: page
      ## 配置用于分组的标签
      alertname: email-test
    annotations:
      description: '{{ $labels.instance }} 实例的 {{ $labels.job }} 任务宕机已经超过 1 分钟.'
      summary: '实例 {{ $labels.instance }} 宕机'

动态刷新

curl -XPOST http://127.0.0.1:19093/-/reload
curl -XPOST http://127.0.0.1:19090/-/reload

说明

网上资料挺多的, 可以简单实现 .但是很多写法还是不熟悉, 需要再次验证.