Управление Grafana IRM в Grafana Cloud с помощью Terraform
Узнайте, как использовать Terraform для управления ресурсами Grafana IRM. В этом руководстве показано, как подключить интеграцию, настроить политики эскалации и добавить расписания дежурств с помощью Terraform.
Чтобы проиллюстрировать использование IRM в нескольких командах, в руководстве приведены примеры с двумя командами: Devs и SREs.
Кроме того, оно включает необходимые шаги для настройки Slack для IRM.
Note
Grafana IRM поддерживает конфигурацию на основе Terraform для ограниченного набора ресурсов, в первую очередь связанных с функциональностью OnCall. Эти ресурсы используют в Terraform соглашение об именовании
grafana_oncall_. Остальные компоненты IRM пока нельзя настроить через Terraform.
Прежде чем начать
Прежде чем начать, убедитесь, что у вас есть следующее:
- Учётная запись Grafana Cloud, как описано в разделе Get started
- Установленный на вашем компьютере Terraform
- Права администратора в вашем экземпляре Grafana
- (Необязательно) Права администратора в вашем рабочем пространстве Slack, если вы планируете интегрировать Slack с Grafana IRM
Note
Все приведённые ниже файлы конфигурации Terraform следует сохранить в одном каталоге.
Подключение Slack к Grafana IRM
Прежде чем включать настройки Slack в вашу конфигурацию Terraform, необходимо сначала настроить интеграцию Slack с Grafana IRM.
Чтобы подключить ваше рабочее пространство Slack к Grafana IRM, обратитесь к документации Slack integration for Grafana IRM.
Настройка провайдера Grafana
Эта конфигурация Terraform настраивает провайдер Grafana для обеспечения необходимой аутентификации при управлении ресурсами Grafana IRM.
Вы можете использовать конфигурацию, аналогичную описанной в разделе Creating and managing a Grafana Cloud stack using Terraform, чтобы настроить сервисную учётную запись и токен.
-
Создайте сервисную учётную запись и токен в Grafana. Чтобы создать новые, обратитесь к разделу Service account tokens.
-
Создайте файл с именем
main.tfи добавьте в него следующее:terraform { required_providers { grafana = { source = "grafana/grafana" version = ">= 3.15.3" } } } provider "grafana" { alias = "oncall" url = "<Stack-URL>" auth = "<Service-account-token>" oncall_url = "<OnCall-URL>" } -
Замените следующие значения полей:
<Stack-URL>на URL вашего стека Grafana<Service-account-token>на созданный вами токен сервисной учётной записи<OnCall-URL>на URL API, указанный на вкладке Admin & API страницы Settings IRM
Note
Если сервисная учётная запись имеет нужные разрешения, эта конфигурация провайдера также позволяет управлять другими ресурсами Grafana.
Аутентификация с помощью токенов API OnCall (устарело)
Токены API OnCall устаревают. Существующие токены продолжат работать, однако для всей новой аутентификации API мы рекомендуем использовать токены сервисных учётных записей Grafana Cloud.
Чтобы использовать существующий токен API OnCall:
-
Войдите в ваш экземпляр Grafana Cloud
-
Выберите Alerts & IRM > IRM
-
Нажмите Settings, а затем выберите Admin & API
-
Найдите раздел Grafana IRM API
-
Просмотрите, скопируйте или отзовите существующие OnCall API tokens
-
Создайте файл с именем
main.tfи добавьте в него следующее:terraform { required_providers { grafana = { source = "grafana/grafana" version = ">= 2.9.0" } } } provider "grafana" { alias = "oncall" oncall_access_token = "<OnCall-API-Token>" oncall_url = "<OnCall-URL>" } -
Замените следующие значения полей:
<OnCall-API-Token>на ваш существующий токен API OnCall<OnCall-URL>на URL API, указанный на вкладке Admin & API страницы Settings IRM
Добавление расписаний дежурств
Эта конфигурация Terraform настраивает два расписания дежурств, SREs и Devs, используя ресурс grafana_oncall_schedule для определения расписаний в Grafana IRM.
Кроме того, эта конфигурация включает каналы Slack для получения уведомлений о расписаниях дежурств каждой команды.
Чтобы узнать больше об управлении расписаниями дежурств, обратитесь к документации по расписаниям дежурств.
-
Создайте два новых календаря в вашем сервисе календарей: один для
Devs, другой дляSREs -
Найдите и сохраните секретные iCal-URL. Например, в календаре Google эти URL можно найти в разделе Settings > Settings for my calendars > Integrate calendar
-
Создайте файл с именем
schedule.tfи добавьте в него следующее:# Name of the Slack channel to notify about on-call schedules for Devs data "grafana_oncall_slack_channel" "Devs" { provider = grafana.oncall name = "<Devs-channel-name>" } # Name of the Slack channel to notify about on-call schedules for SREs data "grafana_oncall_slack_channel" "SREs" { provider = grafana.oncall name = "<SREs-channel-name>" } resource "grafana_oncall_schedule" "schedule_Devs" { provider = grafana.oncall name = "Devs" type = "ical" ical_url_primary = "<secret-iCal-URL-for-devs-calendar>" slack { channel_id = data.grafana_oncall_slack_channel.Devs.slack_id } } resource "grafana_oncall_schedule" "schedule_SREs" { provider = grafana.oncall name = "SREs" type = "ical" ical_url_primary = "<secret-iCal-URL-for-SREs-calendar>" slack { channel_id = data.grafana_oncall_slack_channel.SREs.slack_id } } -
Замените следующие значения полей:
<Devs-channel-name>на имя канала Slack для уведомлений о расписаниях дежурств дляDevs<SREs-channel-name>на имя канала Slack для уведомлений о расписаниях дежурств дляSREs<secret-iCal-URL-for-devs-calendar>на секретный iCal-URL, созданный на первом шаге для календаряDevs<secret-iCal-URL-for-SREs-calendar>на секретный iCal-URL, созданный на первом шаге для календаряSREs
Добавление цепочек эскалации
Эта конфигурация Terraform создаёт две цепочки эскалации с именами SREs и Devs в Grafana IRM, используя grafana_oncall_escalation_chain (Resource).
Конфигурация также добавляет в каждую цепочку эскалации следующие три шага, используя grafana_oncall_escalation (Resource):
- Уведомить пользователей из расписания дежурств
- Подождать 5 минут
- Уведомить канал Slack по умолчанию
-
Создайте файл с именем
escalation-devs.tfи добавьте в него следующее:resource "grafana_oncall_escalation_chain" "Devs" { provider = grafana.oncall name = "Devs" } // Notify users from on-call schedule resource "grafana_oncall_escalation" "notify_schedule_step_Devs" { provider = grafana.oncall escalation_chain_id = grafana_oncall_escalation_chain.Devs.id type = "notify_on_call_from_schedule" notify_on_call_from_schedule = grafana_oncall_schedule.schedule_Devs.id position = 0 } // Wait step for 5 Minutes resource "grafana_oncall_escalation" "wait_step_Devs" { provider = grafana.oncall escalation_chain_id = grafana_oncall_escalation_chain.Devs.id type = "wait" duration = 300 position = 1 } // Notify default Slack channel step resource "grafana_oncall_escalation" "notify_step_Devs" { provider = grafana.oncall escalation_chain_id = grafana_oncall_escalation_chain.Devs.id type = "notify_whole_channel" important = true position = 2 } -
Создайте файл с именем
escalation-sre.tfи добавьте в него следующее:resource "grafana_oncall_escalation_chain" "SREs" { provider = grafana.oncall name = "SREs" } // Notify users from on-call schedule resource "grafana_oncall_escalation" "notify_schedule_step_SREs" { provider = grafana.oncall escalation_chain_id = grafana_oncall_escalation_chain.SREs.id type = "notify_on_call_from_schedule" notify_on_call_from_schedule = grafana_oncall_schedule.schedule_SREs.id position = 0 } // Wait step for 5 Minutes resource "grafana_oncall_escalation" "wait_step_SREs" { provider = grafana.oncall escalation_chain_id = grafana_oncall_escalation_chain.SREs.id type = "wait" duration = 300 position = 1 } // Notify default Slack channel step resource "grafana_oncall_escalation" "notify_step_SREs" { provider = grafana.oncall escalation_chain_id = grafana_oncall_escalation_chain.SREs.id type = "notify_whole_channel" important = true position = 2 }
Подключение интеграции к Grafana IRM
Эта конфигурация Terraform подключает Alertmanager к Grafana IRM, используя grafana_oncall_integration (Resource).
Она также добавляет цепочку эскалации Devs в качестве маршрута по умолчанию для оповещений.
-
Создайте файл с именем
integrations.tfи добавьте в него следующее:resource "grafana_oncall_integration" "AlertManager" { provider = grafana.oncall name = "AlertManager" type = "alertmanager" default_route { escalation_chain_id = grafana_oncall_escalation_chain.Devs.id } } -
Чтобы настроить Alertmanager, обратитесь к документации Alertmanager integration for Grafana OnCall.
Настройка маршрута для определения поведения эскалации при уведомлениях о группах оповещений
Эта конфигурация Terraform настраивает маршрут к интеграции Alertmanager, используя grafana_oncall_route (Resource).
Этот маршрут гарантирует, что уведомления об оповещениях с \"namespace\" *: *\"ops-.*\" в полезной нагрузке эскалируются в цепочку эскалации SREs.
Создайте файл с именем routes.tf и добавьте в него следующее:
resource "grafana_oncall_route" "route_SREs" {
provider = grafana.oncall
integration_id = grafana_oncall_integration.AlertManager.id
escalation_chain_id = grafana_oncall_escalation_chain.SREs.id
routing_regex = "\"namespace\" *: *\"ops-.*\""
position = 0
}
Применение конфигурации Terraform
В терминале выполните следующие команды из каталога, в котором находятся все файлы конфигурации.
-
Инициализируйте рабочий каталог, содержащий файлы конфигурации Terraform.
terraform init -
Просмотрите изменения, которые внесёт Terraform.
terraform plan -
Примените файлы конфигурации.
terraform apply
Проверка
После применения изменений в конфигурациях Terraform можно проверить следующее:
-
В Grafana IRM созданы два новых расписания с именами
DevsиSREs:![Расписания дежурств Devs и SREs]()
-
В Grafana IRM создана новая цепочка эскалации с именем
SREs:![Цепочка эскалации SREs]()
-
В Grafana IRM создана новая цепочка эскалации с именем
Devs:![Цепочка эскалации Devs]()
-
Добавлена и настроена интеграция Alertmanager с политиками эскалации:
![Интеграция Alertmanager для эскалации SREs]()
Итог
В этом руководстве вы узнали, как использовать Terraform для управления Grafana IRM: подключили интеграцию, настроили политики эскалации и настроили расписания дежурств.
Чтобы узнать больше об управлении Grafana Cloud с помощью Terraform, обратитесь к документации провайдера Grafana.



