Terraform으로 임계값(thresholds) 구성
Terraform으로 임계값(thresholds) 구성
Knowledge Graph의 임계값 구성(threshold configurations)을 사용하면 요청(request), 리소스(resource), 상태(health) 단언(assertion)에 대한 사용자 지정 임계값을 정의할 수 있어요. 이러한 구성은 서비스와 인프라 모니터링을 위한 특정 한계와 조건을 설정하는 데 도움이 돼요.
Knowledge Graph UI에서 임계값을 관리하는 방법에 대한 자세한 내용은 임계값 관리 문서를 참고하세요.
출처: 문서
본문
기본 임계값 구성
thresholds.tf라는 파일을 만들고 다음 내용을 추가하세요:
# Basic threshold configuration with all three types
resource "grafana_asserts_thresholds" "basic" {
provider = grafana.asserts
request_thresholds = [{
entity_name = "payment-service"
assertion_name = "ErrorRatioBreach"
request_type = "inbound"
request_context = "/charge"
value = 0.01
}]
resource_thresholds = [{
assertion_name = "Saturation"
resource_type = "container"
container_name = "worker"
source = "metrics"
severity = "warning"
value = 75
}]
health_thresholds = [{
assertion_name = "ServiceDown"
expression = "up{job=\"payment-service\"} == 0"
entity_type = "Service"
}]
}
요청 임계값 구성
서로 다른 서비스 요청 유형과 컨텍스트에 대한 임계값을 구성하세요:
# Multiple request thresholds for different services
resource "grafana_asserts_thresholds" "request_thresholds" {
provider = grafana.asserts
request_thresholds = [
{
entity_name = "api-service"
assertion_name = "ErrorRatioBreach"
request_type = "inbound"
request_context = "/api/v1/users"
value = 0.02
},
{
entity_name = "api-service"
assertion_name = "LatencyP99ErrorBuildup"
request_type = "inbound"
request_context = "/api/v1/orders"
value = 500
},
{
entity_name = "payment-gateway"
assertion_name = "RequestRateAnomaly"
request_type = "outbound"
request_context = "/payment/process"
value = 1000
}
]
}
리소스 임계값 구성
다양한 심각도 수준에 대한 리소스 임계값을 정의하세요:
# Resource thresholds for different severity levels
resource "grafana_asserts_thresholds" "resource_thresholds" {
provider = grafana.asserts
resource_thresholds = [
{
assertion_name = "Saturation"
resource_type = "container"
container_name = "web-server"
source = "metrics"
severity = "warning"
value = 75
},
{
assertion_name = "Saturation"
resource_type = "container"
container_name = "web-server"
source = "metrics"
severity = "critical"
value = 90
},
{
assertion_name = "ResourceRateBreach"
resource_type = "Pod"
container_name = "database"
source = "logs"
severity = "warning"
value = 80
}
]
}
상태 임계값 구성
Prometheus 표현식으로 상태 검사를 구성하세요:
# Health thresholds with Prometheus expressions
resource "grafana_asserts_thresholds" "health_thresholds" {
provider = grafana.asserts
health_thresholds = [
{
assertion_name = "ServiceDown"
expression = "up{job=\"api-service\"} == 0"
entity_type = "Service"
},
{
assertion_name = "DatabaseConnectivity"
expression = "db_connection_pool_active / db_connection_pool_max > 0.9"
entity_type = "Service"
}
]
}
포괄적인 임계값 구성
프로덕션 환경에 대한 포괄적인 임계값을 정의하세요:
# Production environment with comprehensive thresholds
resource "grafana_asserts_thresholds" "production" {
provider = grafana.asserts
request_thresholds = [
{
entity_name = "frontend"
assertion_name = "ErrorRatioBreach"
request_type = "inbound"
request_context = "/"
value = 0.005
},
{
entity_name = "backend-api"
assertion_name = "LatencyP99ErrorBuildup"
request_type = "inbound"
request_context = "/api"
value = 200
}
]
resource_thresholds = [
{
assertion_name = "Saturation"
resource_type = "container"
container_name = "frontend"
source = "metrics"
severity = "warning"
value = 70
},
{
assertion_name = "Saturation"
resource_type = "container"
container_name = "backend-api"
source = "metrics"
severity = "critical"
value = 85
}
]
health_thresholds = [
{
assertion_name = "ServiceDown"
expression = "up{job=\"frontend\"} == 0"
entity_type = "Service"
},
{
assertion_name = "BackendServiceDown"
expression = "up{job=\"backend-api\"} == 0"
entity_type = "Service"
}
]
}
리소스 참조
grafana_asserts_thresholds
Grafana API를 통해 Knowledge Graph 임계값 구성을 관리해요. 이 리소스를 사용하면 요청, 리소스, 상태 단언에 대한 사용자 지정 임계값을 정의할 수 있어요.
인자(Arguments)
| 이름 | 유형 | 필수 | 설명 |
|---|---|---|---|
| request_thresholds | list(object) | No | 요청 임계값 구성 목록. 자세한 내용은 request thresholds 블록을 참고하세요. |
| resource_thresholds | list(object) | No | 리소스 임계값 구성 목록. 자세한 내용은 resource thresholds 블록을 참고하세요. |
| health_thresholds | list(object) | No | 상태 임계값 구성 목록. 자세한 내용은 health thresholds 블록을 참고하세요. |
Request thresholds 블록
각 request_thresholds 블록은 다음을 지원해요:
| 이름 | 유형 | 필수 | 설명 |
|---|---|---|---|
| entity_name | string | Yes | 임계값을 적용할 엔티티의 이름. |
| assertion_name | string | Yes | 구성할 단언의 이름. |
| request_type | string | Yes | 요청의 유형(inbound, outbound). |
| request_context | string | Yes | 임계값을 적용할 요청 컨텍스트 또는 경로. |
| value | number | Yes | 임계값. |
Resource thresholds 블록
각 resource_thresholds 블록은 다음을 지원해요:
| 이름 | 유형 | 필수 | 설명 |
|---|---|---|---|
| assertion_name | string | Yes | 구성할 단언의 이름. |
| resource_type | string | Yes | 리소스의 유형(container, Pod, node). |
| container_name | string | Yes | 임계값을 적용할 컨테이너의 이름. |
| source | string | Yes | 메트릭의 소스(metrics, logs). |
| severity | string | Yes | 심각도 수준(warning, critical). |
| value | number | Yes | 임계값. |
Health thresholds 블록
각 health_thresholds 블록은 다음을 지원해요:
| 이름 | 유형 | 필수 | 설명 |
|---|---|---|---|
| assertion_name | string | Yes | 구성할 단언의 이름. |
| expression | string | Yes | 상태 검사를 위한 Prometheus 표현식. |
| entity_type | string | Yes | 상태 임계값의 엔티티 유형(예: Service, Pod, Namespace, Volume). |
| alert_category | string | No | 상태 임계값에 대한 선택적 알림 범주 라벨. |
예시
resource "grafana_asserts_thresholds" "example" {
provider = grafana.asserts
request_thresholds = [{
entity_name = "api-service"
assertion_name = "ErrorRatioBreach"
request_type = "inbound"
request_context = "/api/v1/users"
value = 0.02
}]
resource_thresholds = [{
assertion_name = "Saturation"
resource_type = "container"
container_name = "web-server"
source = "metrics"
severity = "warning"
value = 75
}]
health_thresholds = [{
assertion_name = "ServiceDown"
expression = "up{job=\"api-service\"} == 0"
entity_type = "Service"
}]
}
모범 사례
Terraform으로 임계값을 구성할 때 다음 모범 사례를 고려하세요.
임계값 구성 관리
- 서비스 수준 목표(SLO)에 따라 적절한 임계값을 설정하세요.
- 서로 다른 심각도 수준(warning, critical)을 사용해 에스컬레이션 경로를 만드세요.
- 프로덕션 외 환경에서 먼저 임계값 구성을 테스트하세요.
- 임계값 효과를 모니터링하고 실제 성능 데이터에 따라 값을 조정하세요.
요청 임계값 모범 사례
- 사용자 대면 중요 엔드포인트에 대한 요청 임계값을 구성하세요.
- 서로 다른 요청 유형(inbound 대 outbound)에 대해 서로 다른 임계값을 설정하세요.
- 특정 API 경로에 대한 임계값을 설정할 때 요청 컨텍스트를 고려하세요.
- 서비스 저하를 조기에 감지하려면 오류 비율 임계값을 사용하세요.
- 현실적인 임계값을 설정하려면 과거 성능 데이터를 검토하세요.
리소스 임계값 모범 사례
- 인프라 용량에 따라 리소스 임계값을 설정하세요.
- 마이크로서비스 아키텍처에는 컨테이너별 임계값을 사용하세요.
- 점진적 에스컬레이션을 위해 warning과 critical 임계값을 모두 구성하세요.
- 현실적인 임계값을 설정하려면 리소스 사용률 패턴을 모니터링하세요.
- 리소스 사용량의 계절적 또는 주기적 패턴을 고려하세요.
상태 임계값 모범 사례
- 서비스 상태를 정확히 반영하는 Prometheus 표현식을 사용하세요.
- 적용하기 전에 상태 검사 표현식을 독립적으로 테스트하세요.
- 중요 종속성과 외부 서비스에 대한 상태 임계값을 설정하세요.
- 복잡한 상태 검사를 위해 복합 표현식을 사용하세요.
- 표현식이 과도한 부하 없이 효율적으로 수행되도록 하세요.
값 선택 지침
- 보수적으로 시작하고 실제 성능에 따라 조정하세요.
- 비율 기반 메트릭에는 백분율(0-1 범위)을 사용하세요.
- 지연 시간 임계값에는 밀리초를 사용하세요.
- 특정 임계값의 근거를 문서화하세요.
- 시스템 변화에 따라 임계값을 정기적으로 검토하고 업데이트하세요.
검증
Terraform 구성을 적용한 후 다음을 확인하세요:
- 임계값 구성이 Knowledge Graph 인스턴스에 적용되었는지.
- 구성이 Knowledge Graph UI의 Observability > Rules > Threshold 아래에 나타나는지.
- 요청 임계값이 지정된 서비스의 위반을 올바르게 식별하는지.
- 리소스 임계값이 적절한 심각도 수준에서 트리거되는지.
- 상태 임계값이 서비스 상태를 정확히 반영하는지.
- 임계값이 SLO 약정과 일치하는지.