首页 > 解决方案 > Prometheus 警报管理器未发送警报

问题描述

我正在与 Prometheus 在 Kubernetes 上合作,并尝试将警报发送到 slack。问题是警报正在触发,但没有发送到松弛状态。我正在使用 Prometheus 1.18.1 和 Kubernetes 1.9。

现在我只是试图发送内置的“DeadMansSwitch”警报,我可以在 UI 中看到它正在触发。我的 alertmanager.yaml(在 prometheus-operator/contrib/kube-prometheus/assets/alertmanager 下)如下所示:

global:
  resolve_timeout: 5m
  slack_api_url: 'https://hooks.slack.com/services/AAABBBCCC/DDDEEEFFF/GGGHHHIII’
route:
  group_by: ['job']
  group_wait: 1s
  group_interval: 1s
  repeat_interval: 1s
  receiver: ‘slack’
  routes:
  - match:
       alertname: DeadMansSwitch
    receiver: ‘slack’
receivers:
- name: ‘slack’
   slack_configs:
   - channel: ‘#channel-name’

AlertManager UI 上的配置显示如下:

global:
  resolve_timeout: 5m
  smtp_require_tls: true
  pagerduty_url: https://events.pagerduty.com/v2/enqueue
  hipchat_api_url: https://api.hipchat.com/
  opsgenie_api_url: https://api.opsgenie.com/
  wechat_api_url: https://qyapi.weixin.qq.com/cgi-bin/
  victorops_api_url: https://alert.victorops.com/integrations/generic/20131114/alert/
route:
  receiver: "null"
  group_by:
  - job
  routes:
  - receiver: "null"
    match:
      alertname: DeadMansSwitch
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 12h
receivers:
- name: "null"
templates: []

问题:
- AlertManager UI 上的配置与我在 alertmanager.yaml 文件中的配置不同。这个配置(在 UI 中)来自哪里?
- 在 alertmanager.yaml 中设置接收器是否不足以发送警报?我在这里错过了什么吗?
- 我是否在错误的 yaml 文件中进行了更改?

标签: kubernetesprometheus-alertmanager

解决方案


tl;dr = yaml 的格式如此错误,以至于我对它的解析感到震惊。


它是由两位无效的 YAML 引起的:缩进和“智能撇号”的使用;你有:

receivers:
- name: ‘slack’
   slack_configs:

但应该是:

receivers:
- name: 'slack'
  slack_configs:

否则在 YAML 中,它会name变成一个具有属性的对象slack_configs,而不是包含两个属性name和的匿名对象slack_configs

您在发布的配置中有一个“引用”字符串的每个地方slack,您都使用了智能撇号,从 YAML 的角度来看,它使字符串文字"\u2018slack\u2019"而不是您的意思(这是一个单独的问题,为什么您将字符串引用到开头,因为它与5mor没有任何不同DeadMansSwitch

您还有一个正常的 ascii 撇号引导slack_api_url:但一个智能撇号关闭该字符串。

无限方便的remarshal项目包含yaml2json非常适合发现类似的奇怪 YAML 主义


推荐阅读