繁体   English   中英

在发送给 Slack 的 Prometheus Alertmanager 消息中显示正确的集群名称

[英]Display correct cluster name in Prometheus Alertmanager messages to Slack

我已经通过 helm 在 k8s 上安装了 kube-prometheus 堆栈:

helm install prometheus prometheus-community/kube-prometheus-stack -n monitoring -f alertmanager-config.yaml

其中alertmanager-config.yaml如下所示:

alertmanager:
  config:
    global:
      resolve_timeout: 5m
    route:
      group_wait: 20s
      group_interval: 4m
      repeat_interval: 4h
      receiver: 'null'
      routes:
      - receiver: 'slack-k8s-admin'
    receivers:
      - name: 'null'
      - name: 'slack-k8s-admin'
        slack_configs:
         - api_url: 'https://hooks.slack.com/services/...'
           channel: '#k8s-monitoring'
           send_resolved: true
           icon_url: https://avatars3.githubusercontent.com/u/3380462
           title: '[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] Monitoring Event Notification'
           text: >-
             {{ range .Alerts }}
               *Alert:* {{ .Annotations.summary }} - `{{ .Labels.severity }}`
               *Description:* {{ .Annotations.description }}
               *Graph:* <{{ .GeneratorURL }}|:chart_with_upwards_trend:> *Runbook:* <{{ .Annotations.runbook }}|:spiral_note_pad:>
               *Details:*
               {{ range .Labels.SortedPairs }} • *{{ .Name }}:* `{{ .Value }}`
               {{ end }}
             {{ end }}

配置后我可以收到警报,但是它们从不告诉我它们来自哪个集群:

在此处输入图像描述

因为,我确实有几个集群应该发送到同一个频道,所以最好能收到哪个集群有问题的通知。

你知道我必须如何调整配置吗?

您可以为每个集群的 kube-prometheus-stack 配置添加唯一的外部标签:

prometheus:
  prometheusSpec:
    externalLabels:
      cluster: prod

你的警报会有这些标签

您可以按照其他答案中的指导从普罗米修斯的标签中读取集群名称。

另一种选择是为集群名称定义一个模板。

    receivers:
    - name: 'slack-notifications'
      slack_configs:
      - channel: '#lolcats'
        send_resolved: true
        text: '{{ template "slack.default-alert.text" . }}'
    - name: 'null'
    templates:
    - '/etc/alertmanager/config/*.tmpl'
  templateFiles:
    template_1.tmpl: |-
      {{ define "cluster" }}static-cluster-name{{ end }}

      {{ define "slack.default-alert.text" }}
      {{- $root := . -}}
        ... your template ...
        {{ template "cluster" $root }}
      {{ end }}
      {{ end }}

如果您使用的是 prometheus-stack helm chart,则可以使用 Helm 中的占位符代替static-cluster-name文本:

{{ define "cluster" }}{{ .ExternalURL | reReplaceAll ".*alertmanager\\.(.*)" "$1" }}{{ end }}

后者将读取先前在.ExternalURL中定义的 Helm 值 .ExternalURL。 当然也可以使用您用来生成这些清单的任何工具的占位符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM