Prometheus Alertmanager Slack Конфигурация: send_resolved как гибкое значение - PullRequest
0 голосов
/ 01 октября 2019

Я хочу отправить уведомление о разрешении, чтобы оно ослабло на основании предупреждения. Поэтому я создал аннотацию («разрешить») для каждого оповещения, которая должна определять, следует ли отправлять разрешенное уведомление.

Вот как выглядят мои оповещения:

        - alert: JobsFailing
          expr: rate(failed_jobs_submitter{job="my_job"}[10m]) > 0
          for: 5m
          labels:
            severity: slack_critical
            service: my_service
          annotations:
            identifier: 'my_service_jobs_failing'
            description: 'Jobs are failing'
            resolve: true

Это мой alertmanager.yaml:

    global:
      resolve_timeout: 5m
      slack_api_url: 'https://hooks.slack.com/services/...'
      http_config:
        proxy_url: 'some_proxy'

    templates:
      - /etc/config/notifications.tpl

    route:
      receiver: 'default-receiver'
      group_wait: 5s
      group_interval: 1m
      repeat_interval: 6h
      routes:
      - receiver: slack_critical
        match:
          severity: slack_critical

    receivers:
    - name: default-receiver

    - name: slack_critical
      slack_configs:
      - channel: '#alert_channel'
        username: "Alert"
        icon_emoji: ":monkey:"
        send_resolved: {{ .Annotations.resolve }}
        title: '{{ template "custom_title" . }}'
        text: '{{ template "custom_slack_message" . }}'

Я попытался использовать строку вместо логического значения для .Annotations.resolve

Я попытался использовать шаблон:

{{ define resolve_alert }}{{ if eq .Annotations.resolve "true"}}{{ else }}{{ if eq .Annotations.resolve "false" }}{{ end }}

и

send_resolved: {{ template resolve_alert . }}

Я пробовал предложения if:

{{ if eq .Annotations.resolve true }}send_resolved: true{{else}}send_resolved: false{{end}}
send_resolved: {{ if or .Annotations.resolve | default false }}

Я ожидаю, что слабая конфигурация подберет значение .Annotations.resolve и отправит разрешенное сообщениепровисать в соответствии со значением, указанным в предупреждении. Что я получаю при использовании .Annotations.resolve:

level=error ts=2019-10-01T09:08:12.284Z caller=coordinator.go:124 component=configuration msg="Loading configuration file failed" file=/etc/config/alertmanager.yml err="yaml: unmarshal errors:\n  line 28: cannot unmarshal !!map into bool"

Что я получаю при использовании шаблона:

level=error ts=2019-09-30T14:39:29.294Z caller=coordinator.go:124 component=configuration msg="Loading configuration file failed" file=/etc/config/alertmanager.yml err="yaml: line 27: did not find expected key"

Любой вклад очень ценится ...

1 Ответ

0 голосов
/ 01 октября 2019

send_resolved - логическое значение, а не изменяемая строка. Вам нужна метка, и когда у одного маршрута есть один получатель, а у другого - другой маршрут, каждый из которых имеет свое логическое значение.

Невозможно направлять оповещения только на основе аннотаций. этикетки.

...