Создать прометей-оператор `PrometheusRule` (CRD) из необработанного файла правил Prometheus?

Файл правил Prometheus, подобный этому:

groups:
- name: ./example.rules
  rules:
  - alert: ExampleAlert
    expr: vector(1)

Оператору prometheus-оператора Kubernetes требуется дополнительный уровень данных конфигурации yaml, и он выглядит следующим образом:

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  creationTimestamp: null
  labels:
    prometheus: example
    role: alert-rules
  name: prometheus-example-rules
spec:
  groups:
  - name: ./example.rules
    rules:
    - alert: ExampleAlert
      expr: vector(1)

С файлами, использующими прежний, необработанный формат правил Prometheus, я могу использовать Prometheus promtool для запуска модульных тестов. (см. ссылку 3 ниже)

С файлами, использующими последний, расширенный формат PrometheusRule, я могу использовать kubectl apply -f prometheus_rule_file.yaml для загрузки правил в мою установку prometheus-operator.

Я хочу писать и поддерживать правила в одном из этих форматов файлов и иметь возможность использовать один и тот же файл правил как с системой модульного тестирования promtool, так и для загрузки того же правила в установку prometheus-operator. Я не вижу простого способа сделать это.

Есть ли способ создать правило, использующее необработанный формат правила Prometheus, и загрузить его в Prometheus-operator PrometheusRule без поддержки отдельного избыточного файла yaml и без написания настраиваемого инструмента для его преобразования?

  1. https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/ < / а>
  2. https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/alerting.md
  3. https://prometheus.io/docs/prometheus/latest/configuration/unit_testing_rules/ < / а>

person clay    schedule 08.08.2019    source источник


Ответы (1)


Для работы с helm я создал отдельную диаграмму и поместил файлы правил вместе с файлами диаграмм. Это означает, что вам нужно развернуть их независимо и, возможно, именно это вы и собираетесь.

Шаги

  1. Создайте штурвал: helm create prometheus-rules
  2. Создайте каталог rules и поместите в него файлы правил Prometheus.
  3. Удалите все ненужные файлы yaml в templates/ каталоге
  4. Создайте новый файл шаблона templates/prometheus-rules.yaml
  5. Вставьте пример ниже:
    apiVersion: v1
    kind: List
    items:
    {{- $root := .Files }}
    {{- range $path, $bytes := $root.Glob "rules/**.yaml" }}
      - apiVersion: "monitoring.coreos.com/v1"
        kind: PrometheusRule
        metadata:
          name: prometheus-rules-{{ $path | base }}
          labels:
            app: prometheus-operator
        spec:
          groups:
    {{ $root.Get $path | indent 8 }}
    {{- end}}

ПРИМЕЧАНИЕ: одна сложная вещь - следить за значением prometheus.prometheusSpec.ruleSelectorNilUsesHelmValues при установке диаграммы оператора прометея. Он будет загружать только правила с теми же метками, которые были установлены во время prometheus-operator. Вы можете обойти это, установив для него значение false при установке prometheus-operator. См. логику ruleSelector. Больше подробностей.

person Pavel    schedule 13.08.2019
comment
@PathSeeker Не могли бы вы поделиться полным образцом файла предупреждений Helm. - person bibincatchme; 10.08.2020
comment
@bibincatchme Конечно, вы можете увидеть мой полный пример здесь: github.com/pesarkhobeee/The-EKS-the-Prometheus-and-the-Wizard/ - person PathSeeker; 15.08.2020
comment
Этот файл yaml выдает мне ошибку, Ошибка: ошибка синтаксического анализа YAML на prometheus-custom-rules / templates / prometheus-rules.yaml: ошибка преобразования YAML в JSON: yaml: строка 14: не удалось найти ожидаемый ':' - person Rad4; 03.09.2020