Terraform으로 Grafana Cloud의 Fleet Management 관리
Terraform으로 Grafana Cloud의 Fleet Management 관리
Terraform을 사용해 Grafana Cloud에서 Grafana Fleet Management 컬렉터와 파이프라인을 만드는 방법을 배워요. 이 가이드는 Fleet Management 및 Grafana Alloy를 위한 접근 정책(access policy)과 토큰, 원격 속성(remote attributes)이 있는 컬렉터, Alloy 프로파일링을 위한 파이프라인을 만드는 방법을 보여줘요.
출처: 문서
본문
시작하기 전에
시작하기 전에 다음을 준비하세요:
- Get started에 표시된 Grafana Cloud 계정
- 머신에 설치된 Terraform
- 머신에 설치된 Alloy
- Grafana 인스턴스의 관리자(Administrator) 권한
참고
다음의 모든 Terraform 구성 파일은 같은 디렉터리에 저장해야 해요.
Grafana Cloud용 프로바이더 구성
이 Terraform 구성은 Cloud API와 상호작용할 때 필요한 인증을 제공하도록 Grafana 프로바이더를 구성해요.
grafana_cloud_stack(Data Source)은 인스턴스의 사용자 ID와 URL 세부 정보를 검색하는 데 사용돼요.
-
Grafana Cloud 접근 정책(access policy)과 토큰을 만드세요. 새로 만들려면 Grafana Cloud Access Policies 문서를 참고하세요. 스택을 realms 목록에 추가하세요. 이 가이드의 예시에 필요한 스코프(scopes)는 다음과 같아요:
-
accesspolicies:read -
accesspolicies:write -
accesspolicies:delete -
stacks:read -
cloud-provider.tf라는 파일을 만들고 다음 코드 블록을 추가하세요:
terraform {
required_providers {
grafana = {
source = "grafana/grafana"
version = ">= 3.19.0"
}
}
}
provider "grafana" {
alias = "cloud"
cloud_access_policy_token = ""
}
data "grafana_cloud_stack" "stack" {
provider = grafana.cloud
slug = ""
}
-
다음 필드 값을 바꾸세요:
-
cloud_access_policy_token을 첫 단계에서 만든 접근 정책 토큰으로 -
slug을 Grafana Cloud 인스턴스가 제공되는 서브도메인인 스택 슬러그로:https://<slug>.grafana.net
Fleet Management용 접근 정책과 토큰 만들기
이 Terraform 구성은 다음을 생성해요:
-
fleet-management:read및fleet-management:write스코프를 가진fleet-management-policy라는 접근 정책(grafana_cloud_access_policy리소스 사용) -
fleet-management-token이라는 토큰(grafana_cloud_access_policy_token리소스 사용) -
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 구성은 Fleet Management API와 상호작용할 때 필요한 인증을 제공하도록 Grafana 프로바이더를 구성해요.
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(리소스)를 사용해 원격 속성이 있는 컬렉터를 만들어요.
이 구성은 컬렉터를 사전 등록(pre-register)만 해요. 컬렉터가 Fleet Management에 등록되고 원격 속성이 할당되려면 Run 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 구성은 grafana_fleet_management_pipeline(리소스)를 사용해 이전 단계에서 선언한 컬렉터에 대한 매처(matcher)가 있는 Alloy 프로파일링용 파이프라인을 만들어요.
파이프라인은 프로파일을 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 구성은 다음을 생성해요:
-
set:alloy-data-write스코프를 가진alloy-policy라는 접근 정책(grafana_cloud_access_policy리소스 사용) -
alloy-token이라는 토큰(grafana_cloud_access_policy_token리소스 사용) -
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 구성은 local_file(리소스)을 사용해 Fleet Management용 remotecfg 블록이 있는 Alloy 구성 파일을 만들어요.
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 = ""
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"
}
-
다음 필드 값을 바꾸세요:
-
filename을 Alloy 구성 파일이 기록되어야 할 경로로(예:config.alloy)
Terraform 구성 적용
터미널에서 모든 구성 파일이 있는 디렉터리에서 다음 명령을 실행하세요.
- Terraform 구성 파일이 포함된 작업 디렉터리 초기화:
terraform init
- Terraform 변경 사항 미리 보기:
terraform plan
- 구성 적용:
terraform apply
Alloy 실행
Alloy를 시작하거나 다시 시작하는 방법은 Grafana Alloy 실행 문서를 참고하세요.
참고
이 예시의 원격 구성이 작동하려면 Alloy가 실행되는 환경에
GCLOUD_RW_API_KEY변수가 설정되어 있어야 해요.
- Alloy 토큰을 보려면 다음 명령을 실행하세요:
terraform output -raw alloy_token
-
환경 변수
GCLOUD_RW_API_KEY를 첫 단계의 값으로 설정하세요. -
Alloy를 실행하세요.
검증
Terraform 구성의 변경 사항을 적용하고 Alloy를 실행한 후 다음을 확인할 수 있어야 해요:
-
컬렉터가 Fleet Management Inventory 탭에 추가됨:
-
파이프라인이 Fleet Management Remote configuration 탭에 추가됨:
-
Alloy 프로파일이 Grafana Cloud Profiles로 내보내지고 있음:
요약
이 가이드에서는 Terraform을 사용해 Fleet Management와 Alloy를 위한 접근 정책과 토큰, 원격 속성이 있는 컬렉터, Alloy 프로파일링용 파이프라인을 만들었어요.
Terraform으로 Grafana Cloud를 관리하는 방법에 대해 자세히 알아보려면 Grafana 프로바이더 문서를 참고하세요.