Импорт data source-managed правил в Grafana-managed правила

Вы можете конвертировать существующие правила оповещений из источников данных, таких как Mimir, Loki и Prometheus, в Grafana-managed правила оповещений. Это позволяет вам эксплуатировать и управлять этими правилами с помощью Grafana Alerting.

Это руководство объясняет два метода импорта data source-managed правил:

Импорт правил — безопасная операция: исходные data source-managed правила остаются нетронутыми в их исходном расположении. Во время импорта правила конвертируются в Grafana-managed правила с сохранением их конфигурации и поведения.

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

Как это работает

Когда вы используете любой из методов импорта, data source-managed правила копируются в другую папку как Grafana-managed правила.

Исходные data source-managed правила остаются нетронутыми в их исходном расположении.

Скопированные правила конвертируются в Grafana-managed правила, сохраняя их поведение за счёт использования эквивалентных Grafana-managed возможностей. Во время конвертации применяются следующие настройки:

  • Уникальные UID

    Вновь созданным правилам присваиваются уникальные UID. Если вы не хотите, чтобы UID генерировался автоматически, вы можете указать его с помощью метки __grafana_alert_rule_uid__.

  • Смещение запроса

    К каждому правилу применяется смещение запроса. Например, смещение 1m корректирует временной диапазон запроса до To: now-1m.

    Смещение запроса правила берётся из значения query_offset в конфигурации группы правил. Если оно пустое, по умолчанию используется настройка rule_query_offset, которая по умолчанию равна 1m.

  • Конвертация запросов правил

    Для правил оповещений добавляются выражения prometheus_math и threshold для сохранения поведения Prometheus при отсутствии данных, гарантируя, что оповещение остаётся в состоянии Normal, когда query не возвращает данных.

  • Missing series evaluations to resolve

    Настройка Missing series evaluations to resolve устанавливается в 1, чтобы воспроизвести поведение вытеснения оповещений Prometheus.

  • Метки группы правил

    Метки, определённые на уровне группы правил, добавляются как метки к каждому импортированному правилу в группе.

  • Последовательное вычисление

    Импортированные правила вычисляются последовательно внутри каждой группы правил, повторяя поведение Prometheus. Это отличается от нативных Grafana-managed правил оповещений, где порядок вычисления не навязывается. Подробнее см. в разделе стратегии вычисления.

  • Совместимость функций

    Опция limit группы правил и функция query внутри шаблонов правил оповещений в настоящее время не поддерживаются в Grafana-managed правилах. Если присутствует опция limit, импорт завершается с ошибкой. Однако правила с query в шаблонах импортируются.

Note

Правила с меткой __grafana_origin не включаются в импорт правил. Эти правила обычно создаются такими приложениями, как Kubernetes Monitoring, Synthetic Monitoring, и другими плагинами Grafana.

Импорт правил с помощью Grafana Alerting

Вы можете использовать пользовательский интерфейс Grafana Alerting для импорта правил из следующих источников:

  • Подключённые источники данных Mimir и Loki с включённым API ruler
  • YAML-файлы правил Prometheus

Импортированные этим методом правила доступны для редактирования в интерфейсе. Как и обычные Grafana-managed правила, вы позже можете экспортировать их для провижининга.

Перед началом

Чтобы использовать Grafana Alerting для миграции правил, вам нужны следующие разрешения RBAC:

  • Alerting: Rules Writer, Set provisioning status.

  • Datasources: Reader.

  • Folders: Creator.

    Разрешение Folders необязательно и нужно только если вы хотите создавать новые папки для вашего целевого пространства имён. Если у вашей учётной записи нет разрешений на просмотр пространства имён, инструмент создаёт новое.

Чтобы конвертировать data source-managed правила оповещений в Grafana managed оповещения:

  1. Перейдите в Alerting > Alert rules.

  2. Перейдите в раздел Data source-managed alert rules и нажмите Import to Grafana-managed rules.

  3. Выберите Import source, из которого хотите импортировать правила:

    • Выберите Existing data source-managed rules, чтобы импортировать правила из подключённых источников данных Mimir или Loki с включённым API ruler.
    • Выберите Prometheus YAML file, чтобы импортировать правила, загрузив YAML-файл правил Prometheus.
  4. В выпадающем списке Data source выберите источник данных, к которому будут обращаться импортированные правила оповещений.

  5. (Необязательно) В Additional settings выберите целевую папку или назначьте новую папку для импорта правил.

    Если вы импортируете правила в существующую папку, не выбирайте папку с существующими правилами оповещений, так как их можно перезаписать.

  6. (Необязательно) Выберите Namespace и/или Group, чтобы определить, какие правила импортируются.

  7. (Необязательно) Включите Pause imported alerting rules.

    Приостановка останавливает вычисление правил оповещений и не создаёт экземпляров оповещений для вновь созданных Grafana-managed правил оповещений.

  8. (Необязательно) Включите Pause imported recording rules.

    Приостановка останавливает поведение вычисления правил оповещений для вновь созданных Grafana-managed правил оповещений.

  9. (Необязательно) В Target data source раздела Recording rules вы можете выбрать источник данных, в который импортированные recording-правила будут записывать метрики. По умолчанию это источник данных, выбранный в выпадающем списке Data source.

  10. Нажмите Import.

    Предпросмотр показывает правила, которые будут импортированы. Если ваша целевая папка содержит папки с теми же именами, что и импортируемые, отображается предупреждение, чтобы сообщить вам об этом. Вы можете изучить предупреждение, чтобы увидеть список папок, которые могут быть перезаписаны.

    Нажмите Yes, import, чтобы импортировать правила.

Импорт правил с помощью инструментов командной строки

Вы также можете использовать инструменты командной строки для импорта data source-managed правил как Grafana-managed правил: используйте mimirtool для правил Mimir и Prometheus и cortextool для правил Loki.

Оба инструмента предоставляют команды rules для импорта групп правил. Например:

  • rules load может импортировать группы правил из файлов.
  • rules sync может читать файлы правил и применяет только различия по сравнению с существующими Grafana-managed правилами. Это полезно для автоматизированных рабочих процессов и конвейеров.

По умолчанию правила, импортированные с помощью API или инструментов командной строки, являются Provisioned и не редактируются в интерфейсе. Чтобы сделать их редактируемыми, включите заголовок X-Disable-Provenance.

Перед началом

Вам нужно установить mimirtool или cortextool (версии 0.11.3 или выше).

Вам нужна сервисная учётная запись со следующими разрешениями RBAC:

  • Alerting: Rules Reader, Rules Writer, Set provisioning status.
  • Datasources: Reader.
  • Folders: Creator, Reader, Writer.

Вам нужен токен сервисной учётной записи с вашей сервисной учётной записью. Подробнее см. в разделе сервисные учётные записи и токены сервисных учётных записей.

mimirtool

Чтобы конвертировать и импортировать их в экземпляр Grafana, вы можете использовать команду mimirtool rules load:

Bash
MIMIR_ADDRESS=<GRAFANA_BASE_URL>/api/convert/ \
MIMIR_AUTH_TOKEN=<SERVICE_ACCOUNT_TOKEN> \
MIMIR_TENANT_ID=1 \
mimirtool rules load rule_file.yaml \
  --extra-headers "X-Grafana-Alerting-Datasource-UID=<DATASOURCE_UID_QUERY_TARGET>"

Эта команда импортирует правила оповещений Prometheus, определённые в rule_file.yaml, как Grafana-managed правила оповещений. Важно знать, что:

  1. При использовании конечной точки <GRAFANA_BASE_URL>/api/convert/ mimirtool взаимодействует с Grafana, а не с экземпляром Mimir. В этом случае MIMIR_TENANT_ID всегда должен быть установлен в 1.
  2. Заголовок X-Grafana-Alerting-Datasource-UID настраивает источник данных, к которому будут обращаться импортированные правила оповещений. Используйте несколько флагов --extra-headers, чтобы добавить другие необязательные заголовки.

Аналогично, команда rules sync может импортировать и обновлять Grafana-managed правила оповещений.

Bash
MIMIR_ADDRESS=<GRAFANA_BASE_URL>/api/convert/ \
MIMIR_AUTH_TOKEN=<SERVICE_ACCOUNT_TOKEN> \
MIMIR_TENANT_ID=1 \
mimirtool rules sync rule_file.yaml \
  --extra-headers "X-Grafana-Alerting-Datasource-UID=<DATASOURCE_UID_QUERY_TARGET>" \
  --concurrency 1

Флаг --concurrency должен быть установлен в 1, так как значение по умолчанию 8 может вызывать ошибки API.

Эта команда sync читает правила из файла, сравнивает их с существующими Grafana-managed правилами в экземпляре и применяет только различия — создавая, обновляя или удаляя правила по необходимости.

output
## Sync Summary: 0 Groups Created, 1 Groups Updated, 0 Groups Deleted

Дополнительные сведения о других командах и опциях Mimirtool см. в документации Mimirtool и документации Mimir HTTP Rule API.

cortextool

Для правил оповещений Loki используйте cortextool (версии 0.11.3 или выше) с флагом --backend=loki. Например:

Bash
CORTEX_ADDRESS=<GRAFANA_BASE_URL>/api/convert/ \
CORTEX_AUTH_TOKEN=<SERVICE_ACCOUNT_TOKEN> \
CORTEX_TENANT_ID=1 \
cortextool rules load loki_rules.yaml \
  --extra-headers "X-Grafana-Alerting-Datasource-UID=<LOKI_DATASOURCE_UID_QUERY_TARGET>" \
  --backend=loki

Необязательные заголовки

Дополнительные заголовки конфигурации для более детального контроля импорта включают следующее:

X-Disable-Provenance

Когда этот заголовок установлен в true:

  • Импортированные правила не помечаются как провижиненные.
  • Затем их можно редактировать в интерфейсе Grafana.
  • Они исключаются из операций GET и DELETE на конечных точках /api/convert.

Не включайте этот заголовок при использовании команды rules sync, так как она полагается на операции GET и DELETE для обнаружения и обновления существующих правил.

X-Grafana-Alerting-Alert-Rules-Paused

Установите в true, чтобы импортировать правила оповещений в приостановленном состоянии.

X-Grafana-Alerting-Recording-Rules-Paused

Установите в true, чтобы импортировать recording-правила в приостановленном состоянии.

X-Grafana-Alerting-Datasource-UID

UID источника данных, который использовать для запросов правил оповещений.

Если не указан в заголовке, Grafana использует настроенное значение по умолчанию из unified_alerting.prometheus_conversion.default_datasource_uid. Если ни заголовок, ни опция конфигурации не предоставлены, запрос завершается с ошибкой.

X-Grafana-Alerting-Target-Datasource-UID

UID целевого источника данных для recording-правил. Если не указан, используется значение из X-Grafana-Alerting-Datasource-UID.

X-Grafana-Alerting-Folder-UID

Введите UID целевой папки назначения для импортированных правил.

X-Grafana-Alerting-Notification-Settings

JSON-кодированный объект AlertRuleNotificationSettings, позволяющий задать точку контакта для правил оповещений.

Совместимые конечные точки

Перечисленные в этом разделе конечные точки API поддерживаются в Grafana и используются mimirtool и cortextool, как показано ранее. Эти конечные точки совместимы с Mimir HTTP API.

В этих конечных точках “namespace” соответствует названию папки в Grafana.

Конечные точки POST можно использовать для импорта data source–managed правил оповещений. Они принимают запросы как в YAML, так и в JSON. Если тип носителя не указан, подразумевается YAML.

Конечная точка Метод Резюме Эквивалент Mimir
POST /convert/prometheus/config/v1/rules Создание или обновление нескольких групп правил в нескольких пространствах имён. Требует X-Grafana-Alerting-Datasource-UID. Нет
POST /convert/prometheus/config/v1/rules/:namespaceTitle Создание или обновление одной группы правил в пространстве имён. Требует X-Grafana-Alerting-Datasource-UID. Set rule group

Конечные точки GET и DELETE работают только с провижиненными и импортированными правилами оповещений. Все конечные точки GET поддерживают как JSON, так и YAML форматы ответов в зависимости от заголовка Accept: используйте application/json для ответов JSON или application/yaml для ответов YAML. YAML — формат по умолчанию, когда заголовок Accept не указан.

Конечная точка Метод Резюме Эквивалент Mimir
GET /convert/prometheus/config/v1/rules Получить все импортированные группы правил во всех пространствах имён. List rule groups
GET /convert/prometheus/config/v1/rules/:namespaceTitle Получить импортированные группы правил в конкретном пространстве имён. Get rule groups by namespace
GET /convert/prometheus/config/v1/rules/:namespaceTitle/:group Получить импортированную группу правил в конкретном пространстве имён. Get rule group
DELETE /convert/prometheus/config/v1/rules/:namespaceTitle Удалить все импортированные правила оповещений в пространстве имён. Delete namespace
DELETE /convert/prometheus/config/v1/rules/:namespaceTitle/:group Удалить конкретную импортированную группу правил. Delete rule group

Создание или обновление нескольких групп правил

POST /convert/prometheus/config/v1/rules

Создаёт или обновляет несколько групп правил в нескольких пространствах имён. Эта конечная точка ожидает запрос с картой названий пространств имён в массивы групп правил и возвращает 202 при успехе.

Эта конечная точка не имеет эквивалента в Mimir и является специфичной для Grafana для массовых операций.

Пример тела запроса
YAML
namespace1:
  - name: MyGroupName1
    rules:
      - alert: MyAlertName1
        expr: up == 0
        labels:
          severity: warning
namespace2:
  - name: MyGroupName2
    rules:
      - alert: MyAlertName2
        expr: rate(http_requests_total[5m]) > 0.1
        labels:
          severity: critical