Как правильно настроить правила предупреждений yaml для Prometheus / Alertmanager

Так как у меня ужасное время настраивать правила предупреждений для Prometheus Alertmanager, возможно, кто-нибудь подскажет мне правильное направление.

Вот правила, которые я сейчас пытаюсь реализовать (взяты прямо из: https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/)

rules.yml:

groups:
- name: example
  rules:

  # Alert for any instance that is unreachable for >5 minutes.
  - alert: InstanceDown
    expr: up == 0
    for: 5m
    labels:
      severity: page
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."

  # Alert for any instance that has a median request latency >1s.
  - alert: APIHighRequestLatency
    expr: api_http_request_latencies_second{quantile="0.5"} > 1
    for: 10m
    annotations:
      summary: "High request latency on {{ $labels.instance }}"
      description: "{{ $labels.instance }} has a median request latency above 1s (current value: {{ $value }}s)"

с проверкой конфигурации amtool и promtool я получаю следующую ошибку:

Checking '/etc/prometheus/rules.yml'  FAILED: yaml: unmarshal errors:
  line 1: field groups not found in type config.plain

amtool: error: failed to validate 1 file(s)

Мое первое предположение было бы неправильным отступом или какой-то другой ошибкой синтаксиса yaml. Однако я пробовал использовать несколько правил предупреждений, а также разные файлы и редакторы (в настоящее время я использую nano). Yaml также был проверен с помощью нескольких линтеров yaml. Но пока что у меня всегда были ошибки в строке показанной.

Любая помощь или предложение приветствуются!

prometheus, version 2.22.2 (branch: HEAD, revision: de1c1243f4dd66fbac3e8213e9a7bd8dbc9f38b2)
  go version:       go1.15.5
  platform:         linux/amd64
alertmanager, version 0.21.0 (branch: HEAD, revision: 4c6c03ebfe21009c546e4d1e9b92c371d67c021d)
  go version:       go1.14.4

линтеры yaml:

https://codebeautify.org/yaml-validator

https://onlineyamltools.com/validate-yaml

проверенные правила оповещения:

https://onlineyamltools.com/validate-yaml

https://grafana.com/blog/2020/02/25/step-by-step-guide-to-setting-up-prometheus-alertmanager-with-slack-pagerduty-and-gmail/

https://rakeshjain-devops.medium.com/prometheus-alerting-most-common-alert-rules-e9e219d4e949.

https://github.com/vegasbrianc/prometheus/blob/master/prometheus/alert.rules


person schmandkind    schedule 16.01.2021    source источник


Ответы (1)


Демаршал groups не выполняется, потому что это должен быть список:

groups:
- name: GroupName
  rules:
  - alert: ...

См. документацию о правилах записи, которая аналогична правила оповещения.


ОБНОВЛЕНИЕ после исправления сообщения

Ваш файл кажется правильным. Командная строка:

promtool check rules /etc/prometheus/rules.yml

Я полагаю, вы использовали эту команду для проверки config, а не rules.

Обратите внимание, что amtool проверяет конфигурацию AlertManager, а не Prometheus.

person Michael Doubez    schedule 18.01.2021
comment
спасибо за комментарий, кажется, я разместил неправильный rule.yml (пробовал несколько). Сообщение теперь отредактировано и содержит файл rule.yml, который я сейчас проверяю. Просто скопируйте и вставьте из документа правил предупреждений, но я все равно получаю ту же ошибку: / - person schmandkind; 18.01.2021
comment
Большое вам спасибо, вы сделали мой день! Ошибка действительно была в правилах проверки! Что меня все еще немного сбивает с толку, я попытался загрузить данный rules.yml, не проверив его сначала с помощью promtool (но все тот же файл), и служба Prometheus не смогла правильно загрузить файл? - person schmandkind; 19.01.2021
comment
Без точной ошибки я не могу сказать. rules.yml файл включен в prometheus.yml файл, поэтому ошибки не было в этом файле. - person Michael Doubez; 20.01.2021