Управление Fleet Management в Grafana Cloud с помощью Terraform
Узнайте, как создавать коллекторы и конвейеры Grafana Fleet Management в Grafana Cloud с помощью Terraform. В этом руководстве показано, как создать политику доступа и токен для Fleet Management и Grafana Alloy, коллектор с удалёнными атрибутами, а также конвейер для профилирования Alloy.
Прежде чем начать
Прежде чем начать, убедитесь, что у вас есть следующее:
- Учётная запись Grafana Cloud, как описано в разделе Get started
- Установленный на вашем компьютере Terraform
- Установленный на вашем компьютере Alloy
- Права администратора в вашем экземпляре Grafana
Note
Все приведённые ниже файлы конфигурации Terraform следует сохранить в одном каталоге.
Настройка провайдера для Grafana Cloud
Эта конфигурация Terraform настраивает провайдер Grafana для обеспечения необходимой аутентификации при взаимодействии с Cloud API.
grafana_cloud_stack (Data Source) используется для получения ID пользователя и URL вашего экземпляра.
-
Создайте политику доступа и токен Grafana Cloud. Чтобы создать новые, обратитесь к разделу Grafana Cloud Access Policies. Добавьте ваш стек в список realms (
realms). Области действия (scopes), необходимые для примеров в этом руководстве:accesspolicies:readaccesspolicies:writeaccesspolicies:deletestacks:read
-
Создайте файл с именем
cloud-provider.tfи добавьте следующий блок кода:terraform { required_providers { grafana = { source = "grafana/grafana" version = ">= 3.19.0" } } } provider "grafana" { alias = "cloud" cloud_access_policy_token = "<CLOUD_ACCESS_POLICY_TOKEN>" } data "grafana_cloud_stack" "stack" { provider = grafana.cloud slug = "<STACK_SLUG>" } -
Замените следующие значения полей:
<CLOUD_ACCESS_POLICY_TOKEN>на токен политики доступа, созданный на первом шаге<STACK_SLUG>на slug вашего стека, то есть поддомен, по которому доступен ваш экземпляр Grafana Cloud:https://<STACK_SLUG>.grafana.net
Создание политики доступа и токена для Fleet Management
Эта конфигурация Terraform создаёт следующее:
- Политику доступа с именем
fleet-management-policyс областями действияfleet-management:readиfleet-management:write, используяgrafana_cloud_access_policy(Resource) - Токен с именем
fleet-management-token, используяgrafana_cloud_access_policy_token(Resource)
-
Создайте файл с именем
fm-access-policy.tfи добавьте следующий блок кода:resource "grafana_cloud_access_policy" "fm_policy" { provider = grafana.cloud name = "fleet-management-policy" region = data.grafana_cloud_stack.stack.region_slug scopes = [ "fleet-management:read", "fleet-management:write" ] realm { type = "stack" identifier = data.grafana_cloud_stack.stack.id } } resource "grafana_cloud_access_policy_token" "fm_token" { provider = grafana.cloud name = "fleet-management-token" region = grafana_cloud_access_policy.fm_policy.region access_policy_id = grafana_cloud_access_policy.fm_policy.policy_id }
Настройка провайдера для Fleet Management
Эта конфигурация Terraform настраивает провайдер Grafana для обеспечения необходимой аутентификации при взаимодействии с API Fleet Management.
-
Создайте файл с именем
fm-provider.tfи добавьте следующий блок кода:locals { fm_id = data.grafana_cloud_stack.stack.fleet_management_user_id fm_token = grafana_cloud_access_policy_token.fm_token.token fm_url = data.grafana_cloud_stack.stack.fleet_management_url } provider "grafana" { alias = "fm" fleet_management_auth = "${local.fm_id}:${local.fm_token}" fleet_management_url = local.fm_url }
Создание коллектора Fleet Management
Эта конфигурация Terraform создаёт коллектор с удалённым атрибутом, используя grafana_fleet_management_collector (Resource).
Эта конфигурация только предварительно регистрирует коллектор. Чтобы коллектор зарегистрировался в Fleet Management и ему были назначены удалённые атрибуты, необходимо выполнить шаг Запуск Alloy.
-
Создайте файл с именем
fm-collector.tfи добавьте следующий блок кода:resource "grafana_fleet_management_collector" "fm_collector" { provider = grafana.fm id = "prod_collector" remote_attributes = { "env" = "PROD" } enabled = true }
Создание конвейера Fleet Management
Эта конфигурация Terraform создаёт конвейер для профилирования Alloy с сопоставителем (matcher) для коллектора, объявленного на предыдущем шаге, используя grafana_fleet_management_pipeline (Resource).
Конвейер записывает профили в Grafana Cloud Profiles.
-
Создайте файл с именем
profiling.alloy.tftplи добавьте следующее содержимое:// This pipeline scrapes pprof Go profiles from Alloy and sends them to Pyroscope. // // It requires the following environment variables to be set where Alloy is running: // Required: // * GCLOUD_RW_API_KEY: The Grafana Cloud API key with write access to Pyroscope. // Optional: // * ALLOY_ADDRESS: The address Alloy listens on. Defaults to 127.0.0.1:12345. pyroscope.scrape "alloy" { targets = [ { "__address__" = coalesce( sys.env("ALLOY_ADDRESS"), "127.0.0.1:12345", ), "service_name" = "alloy", }, ] forward_to = [pyroscope.write.grafana_cloud.receiver] profiling_config { profile.process_cpu { enabled = true } profile.memory { enabled = true } profile.mutex { enabled = true } profile.block { enabled = true } profile.goroutine { enabled = true } } } pyroscope.write "grafana_cloud" { endpoint { url = "${profiles_url}" basic_auth { username = "${profiles_id}" password = sys.env("GCLOUD_RW_API_KEY") } } } -
Создайте файл с именем
fm-pipeline.tfи добавьте следующий блок кода:locals { profiles_id = data.grafana_cloud_stack.stack.profiles_user_id profiles_url = data.grafana_cloud_stack.stack.profiles_url } resource "grafana_fleet_management_pipeline" "pipeline" { provider = grafana.fm name = "profiling" contents = templatefile( "profiling.alloy.tftpl", { profiles_id = local.profiles_id, profiles_url = local.profiles_url, }, ) matchers = [ "env=\"PROD\"" ] enabled = true }
Создание политики доступа и токена для Alloy
Эта конфигурация Terraform создаёт следующее:
- Политику доступа с именем
alloy-policyс областью действияset:alloy-data-write, используяgrafana_cloud_access_policy(Resource) - Токен с именем
alloy-token, используяgrafana_cloud_access_policy_token(Resource)
-
Создайте файл с именем
alloy-access-policy.tfи добавьте следующий блок кода:resource "grafana_cloud_access_policy" "alloy_policy" { provider = grafana.cloud name = "alloy-policy" region = data.grafana_cloud_stack.stack.region_slug scopes = [ "set:alloy-data-write" ] realm { type = "stack" identifier = data.grafana_cloud_stack.stack.id } } resource "grafana_cloud_access_policy_token" "alloy_token" { provider = grafana.cloud name = "alloy-token" region = grafana_cloud_access_policy.alloy_policy.region access_policy_id = grafana_cloud_access_policy.alloy_policy.policy_id } output "alloy_token" { value = grafana_cloud_access_policy_token.alloy_token.token sensitive = true }
Создание файла конфигурации для Alloy
Эта конфигурация Terraform создаёт файл конфигурации Alloy с блоком remotecfg для Fleet Management, используя local_file (Resource).
-
Создайте файл с именем
config.alloy.tftplи добавьте следующее содержимое:remotecfg { id = "${collector_id}" url = "${fm_url}" poll_frequency = "60s" basic_auth { username = "${fm_id}" password = sys.env("GCLOUD_RW_API_KEY") } } -
Создайте файл с именем
alloy-config.tfи добавьте следующий блок кода:resource "local_file" "alloy_config" { filename = "<ALLOY_CONFIG_PATH>" content = templatefile( "config.alloy.tftpl", { collector_id = "prod_collector", fm_id = local.fm_id, fm_url = local.fm_url, }, ) directory_permission = "0644" file_permission = "0644" } -
Замените следующие значения полей:
<ALLOY_CONFIG_PATH>на путь, по которому должен быть записан файл конфигурации Alloy, напримерconfig.alloy
Применение конфигурации Terraform
В терминале выполните следующие команды из каталога, в котором находятся все файлы конфигурации.
-
Инициализируйте рабочий каталог, содержащий файлы конфигурации Terraform:
terraform init -
Просмотрите изменения Terraform:
terraform plan -
Примените конфигурацию:
terraform apply
Запуск Alloy
Чтобы узнать, как запустить или перезапустить Alloy, обратитесь к разделу Run Grafana Alloy.
Note
Чтобы удалённая конфигурация из этого примера работала, в среде, где запущен Alloy, должна быть задана переменная
GCLOUD_RW_API_KEY.
-
Выполните следующую команду, чтобы просмотреть токен Alloy:
terraform output -raw alloy_token -
Присвойте переменной среды
GCLOUD_RW_API_KEYзначение из первого шага. -
Запустите Alloy.
Проверка
После применения изменений в конфигурациях Terraform и запуска Alloy вы должны увидеть следующее:
-
Коллектор добавлен на вкладку Inventory tab в Fleet Management:
-
Конвейер добавлен на вкладку Remote configuration tab в Fleet Management:
-
Профили Alloy экспортируются в Grafana Cloud Profiles:
Итог
В этом руководстве вы создали политику доступа и токен для Fleet Management и Alloy, коллектор с удалёнными атрибутами и конвейер для профилирования Alloy — всё с помощью Terraform.
Чтобы узнать больше об управлении Grafana Cloud с помощью Terraform, обратитесь к документации провайдера Grafana.