Добавление полей Slack в уведомления о Slack в диспетчере предупреждений Prometheus

В новой версии диспетчера предупреждений Prometheus добавлена ​​поддержка раздела fields во вложенных файлах Slack. Я пытаюсь настроить шаблон go для циклического создания полей для каждой метки предупреждения. После тестирования конфигурации я получил синтаксическую ошибку «не могу прочитать неявную пару сопоставления; пропущено двоеточие». Кто-нибудь пробовал то же самое и получилось? Спасибо большое. Моя конфигурация ниже:

global:
  resolve_timeout: 5m
templates:
- '/etc/alertmanager/template/*.tmpl'
route:
  # All alerts in a notification have the same value for these labels.
  group_by: ['alertname', 'instance', 'pod']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h
  receiver: 'slack-test'
  routes:
  # Go spam channel
  - match:
      alertname: DeadMansSwitch
    receiver: 'null'
- name: 'slack-test'
  slack_configs:
  - channel: '#alert'
    api_url: 'https://hooks.slack.com/services/XXXXX/XXXX/XXXX'
    username: 'Prometheus Event Notification'
    color: '{{ if eq .Status "firing" }}danger{{ else }}good{{ end }}'
    title: '[`{{ .Labels.severity }}`] Server alert'
    text: |-
      {{ range .Alerts }}
        {{ .Annotations.message }}
      {{ end }}
    short_fields: true
    fields:
    {{ range .Labels.SortedPairs }}
      title:{{ .Name }}
      value:`{{ .Value }}`
    {{ end }}
    send_resolved: true
  #email_configs:
  #- to: 'your_alert_email_address'
  #  send_resolved: true
- name: 'null'

Пробовал это тоже не работает.

    fields:
    {{ range .Labels.SortedPairs }}
     - title: {{ .Name }}
       value: `{{ .Value }}`
    {{ end }}

person Whispererli    schedule 12.02.2019    source источник


Ответы (1)


Проблема в том, что вы используете шаблон go внутри файла конфигурации, но prometheus поддерживает создание шаблонов go только внутри значений конфигурации. Заголовок и значение имеют тип tmpl_string, что означает, что они представляют собой строку, которая является шаблоном перехода. https://prometheus.io/docs/alerting/configuration/#field_config

верный

 fields:
   title: '{{ if (true) }}inside the title VALUE{{ end }}'
   value: 'foo'

неверный

 fields:
   {{ if (true) }}outside the config values
   title: 'inside the title VALUE'
   value: 'foo'
  {{ end }}
person Derek Rada    schedule 23.08.2019