prometheus配置告警分发到不同的钉钉群

场景

假如我现在对一个MQ集群监控,设置告警,有如下两条规则:

  - alert: "RocketMQ,xxx_consumer出现消息积压"
    expr: sum by(group, topic) (rocketmq_group_diff{group="xxx_consumer",topic="xxx"}) > 1000
    for: 1m
    labels:
      severity: busi
    annotations:
      description: '消费组xxx_consumer消费xxx的消息时出现消息积压,积压量已超过1000'
      summary: 'RocketMQ, xxx_consumer出现消息积压'
  - alert: "broker节点挂了"
    expr: count(rocketmq_broker_disk_ratio{cluster="XXXCluster"}) < 4
    for: 0m
    labels:
      severity: warning
    annotations:
      description: 'broker节点个数少于4个了'
      summary: 'broker节点挂了'

上面2条规则如下:

  1. 规则一:业务组的某个消费组(核心业务),不能出现消息积压,超过1000条就告警通知他们
  2. 规则二:我们的MQ集群某个业务挂了,我们自己要及时收到告警

现在实际情况是这样,如果规则一告警,必须要及时通知到相对应的业务组的告警的钉钉群里,同时也要通知到我们自己的钉钉群。规则二告警只通知我们自己的群,业务侧不关心。即:有些告警需要同时分发到多个群,有些只发送给某个群。

注意上面的严重程度(serverity)配置,注意用这个来区分,规则一是:busi,规则2是:warning。

配置示例如下

alertmanager的配置

global:
  resolve_timeout: 5m
  smtp_from: from@email.com
  smtp_smarthost: smtp.net:port
  smtp_auth_username: from@email.com
  smtp_auth_password: PASS
  smtp_require_tls: false
route:
  receiver: 'email'
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 10m
  routes:
  - receiver: 'our'
    group_wait: 10s
    match_re:
       severity: warning
  - receiver: 'other'
    group_wait: 10s
    match_re:
       severity: busi

templates:
  - '*.html'
receivers:
- name: 'email'
  email_configs:
  - to: 'xuxd@email.com'
    send_resolved: false
    html: '{{ template "default-monitor.html" . }}'
    headers: { Subject: "[WARN] 报警邮件" } #邮件主题
- name: 'our'
  webhook_configs:
  - url: http://127.0.0.1:8060/dingtalk/our/send
- name: 'other'
  webhook_configs:
  - url: http://127.0.0.1:8060/dingtalk/our/send
  - url: http://127.0.0.1:8060/dingtalk/other/send

global:设置默认的邮箱配置,如果没有匹配的接收者就采用邮件通知

route:除了email这个全局配置的接收者外,下面的routes指定了两个特定的接收者,一个接收者叫“our”,匹配warning级别的;另一个叫“other”,匹配busi级别的,这两个级别在最前面的规则里定义,不是什么特定关键字,就是自己随便定义的一个标记

receivers:这里指定了上面定义的接收者的配置,email指定邮件发给谁;“our”指定dingtalk的发送url,注意这个uri的末尾,send前用的"our";“other”下面指定了两个url,区别就是url末尾的send前面,一个是“our”,另一个是"other"

下面顺便贴一下我用的邮件模板(文件名:default-monitor.html),模板格式是一个table:

{{ define "default-monitor.html" }}
<table>
    <tr><td>报警名</td><td>描述</td><td>开始时间</td></tr>
    {{ range $i, $alert := .Alerts }}
        <tr><td>{{ index $alert.Labels "alertname" }}</td><td>{{ index $alert.Annotations "description" }}</td><td>{{ $alert.StartsAt }}</td></tr>
    {{ end }}
</table>
{{ end }}

prometheus-webhook-dingtalk配置

## Customizable templates path
templates:
   - /home/user/monitor/alert/prometheus-webhook-dingtalk-1.4.0.linux-amd64/template/template.tmpl

## Targets, previously was known as "profiles"
targets:
  our:
    url: https://oapi.dingtalk.com/robot/send?access_token=xxxx
    secret: xxx_secret
  other:
    url: https://oapi.dingtalk.com/robot/send?access_token=xxx_other
    secret: xxx_other_secret

targets下有两个,分别是"our"和"other",这里对应上面alertmanager配置的url里的"our"和"other。access_token和secret是钉钉群添加机器小助手生成的。

 

这样配置,如果规则一告警,就是alertmanager的name为other的receiver来发送告警通知,发送到我们的钉钉群和业务侧钉钉群。如果是规则二告警,通过our发送,便只发送到我们的钉钉群。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Prometheus是一个开源的监控系统,可以用于收集、存储和查询各种指标数据。而钉钉是一款流行的即时通讯工具,可以用于发送告警通知。下面是配置Prometheus钉钉告警的步骤: 1. 首先,你需要在钉钉中创建一个机器人。打开钉钉工作台,选择你要接收告警通知的组,点击设置,然后选择机器人管理,创建一个自定义机器人,并获取到机器人的Webhook地址。 2. 在Prometheus配置文件`prometheus.yml`中添加以下内容: ```yaml alerting: alertmanagers: - static_configs: - targets: - localhost:9093 rule_files: - "path/to/your/rules/*.rules" alertmanager_configs: - static_configs: - targets: - "钉钉机器人的Webhook地址" ``` 3. 创建一个告警规则文件,例如`alert.rules`,并将以下内容添加到文件中: ```yaml groups: - name: example rules: - alert: HighErrorRate expr: job:request_error_rate > 0.5 for: 5m labels: severity: critical annotations: summary: "High error rate detected" description: "The error rate is above 0.5 for the last 5 minutes." ``` 这个例子中定义了一个告警规则,当请求错误率超过0.5时,将触发告警,并发送到钉钉机器人。 4. 启动Prometheus和Alertmanager,并确保Prometheus能够加载告警规则文件。你可以通过访问Prometheus的Web界面来验证规则是否生效。 5. 当触发告警时,Prometheus会将告警发送给Alertmanager,然后Alertmanager会将告警发送给配置钉钉机器人,从而实现钉钉告警
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不识君的荒漠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值