1

我有一个 kubernetes 集群,我正在使用 Prometheus 进行监控和警报。Prometheus 警报管理器会不断重复警报,直到它们处于活动状态。我想将我的警报管理器配置为仅向 slack 发送一次警报并仅在警报状态发生变化时重复警报

我尝试仅在特定时间生成警报,如下所示

(kube_pod_container_status_restarts_total > 3) * ((time() % 86400 / 3600 > bool 3) == bool (time() % 86400 / 3600 < bool 4))

但这对我不起作用

Prometheus 服务器配置如下:

prometheus-server.yml

alert: PodRestartAlert
        expr: kube_pod_container_status_restarts_total >3
        for: 5m
        labels:
          severity:
        annotations:
          description: ""
          summary: 'The pods that are restarted more than 3 times'

Alertmanager 配置如下:

global:
      slack_api_url: "http://"
    receivers:
    - name: default-receiver
      slack_configs:
      - channel: '#abc'
        text: Prometheus Alert generated
    route:
      group_by:
      - alertname
      - datacenter
      - app
      group_interval: 5m
      receiver: default-receiver
      repeat_interval: 0

我正在尝试实现以下目标:

如果最初有 10 个 pod 重新启动超过 3 次,那么它应该只向 slack 抛出一次警报

如果在一两天后重新启动的 Pod 数量增加到 20 个 Pod,那么警报管理器应该只发出一次警报以松弛该 Pod

关于我可以尝试或改变的任何建议都会有很大帮助

提前致谢!

4

1 回答 1

0

您可以使用slack_configs.title来创建通用消息,并且它们slack_configs.text的范围是触发/解决警报,因此您可以在单个 Slack 消息中接收多个相同类型的警报。

此外,请确保设置slack_configs.send_resolved: true为收到有关已解决警报的通知。

例如:

alertmanager:
  config:
    global:
      resolve_timeout: 5m
    route:
      group_by:
        - alertname
        - datacenter
        - app
      group_wait: 30s
      group_interval: 5m
      repeat_interval: 12h
      receiver: 'default-receiver'
    receivers:
    - name: 'default-receiver'
      slack_configs:
      - channel: '#abc'
        send_resolved: true
        title: '[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] Monitoring Event Notification'
        text: |-
          {{ range .Alerts }}
            *Alert:* {{ .Labels.alertname }} - `{{ .Labels.severity }}`
            *Description:* {{ .Annotations.summary }}
            *Graph:* <{{ .GeneratorURL }}|:chart_with_upwards_trend:> *Runbook:* <{{ .Annotations.runbook_url }}|:spiral_note_pad:>
            *Details:*
            {{ range .Labels.SortedPairs }} • *{{ .Name }}:* `{{ .Value }}`
            {{ end }}
          {{ end }}

上面的示例还通过.Labels.SortedPairs,创建了一个完整的“详细信息: ”部分,其中包含所有涉及触发警报的内容。

警报应如下所示: slack_alert_example


延伸阅读:

于 2019-04-24T02:26:33.203 回答