클라우드 관측성 비용 최적화 완벽 가이드 2026: CloudWatch·Azure Monitor·GCP Cloud Logging 60% 절감하기

AWS CloudWatch, Azure Monitor, GCP Cloud Logging의 관측성 비용을 60% 이상 절감하는 실전 가이드. Infrequent Access 로그 클래스, Basic Logs 이관, 제외 필터, OpenTelemetry 테일 샘플링까지 30일 체크리스트로 정리했습니다.

클라우드 관측성 비용 60% 절감 가이드 2026

업데이트: 2026년 8월 14일

클라우드 관측성(observability) 비용을 60% 절감하려면 로그 수집 지점에서 걸러내고, 저비용 저장 계층(CloudWatch Logs Infrequent Access, Azure Basic Logs, GCP 제외 필터)으로 이관한 뒤, OpenTelemetry 컬렉터에서 테일 기반 샘플링(tail-based sampling)을 적용하는 3단계 파이프라인이 정답입니다. 대부분의 조직은 수집한 텔레메트리의 20~40%를 한 번도 조회하지 않으면서 GB당 $0.50~$2.30을 지불하고 있죠. 이 글에서는 AWS CloudWatch, Azure Monitor, GCP Cloud Logging 각각에서 실측 기반으로 비용을 절반 이하로 줄인 실전 레버를 정리합니다.

  • CloudWatch Logs 표준 수집 요금은 $0.50/GB이지만, 2026년 GA된 Infrequent Access(IA) 로그 클래스로 전환하면 즉시 절반($0.25/GB)으로 줄어듭니다.
  • Azure Monitor는 Analytics Logs($2.30/GB)와 Basic Logs($0.50/GB), Auxiliary Logs($0.05/GB) 3계층으로 나뉘며, 감사·규정 준수 테이블은 Basic으로 이관해야 합니다.
  • GCP Cloud Logging은 Logs Router의 제외 필터(exclusion filter)로 헬스체크, 디버그 로그, 내부 VPC 흐름 로그를 버려 대부분의 계정에서 30~50% 즉시 절감이 가능합니다.
  • VPC Flow Logs, Route 53 쿼리 로그 같은 vended 로그는 CloudWatch로 보내지 말고 S3로 직행시켜 이중 과금을 피해야 합니다.
  • Container Insights의 커스텀 메트릭은 고카디널리티 차원이 원인으로 폭발하며, ADOT 컬렉터 필터로 45~96%까지 절감할 수 있습니다.
  • OpenTelemetry의 테일 기반 샘플링은 에러·지연 특이 트레이스는 100% 보존하면서 저장량을 90%까지 줄여줍니다.

왜 관측성 비용이 폭발적으로 증가하는가

솔직히 말하면, 제가 지난 3년간 FinOps 실무를 하면서 반복적으로 목격한 패턴은 단순합니다. 관측성 도구는 처음에는 개발자 편의를 위해 도입되지만, 트래픽이 늘어나면 어느 순간 EC2 요금과 맞먹거나 그 이상이 됩니다. 어느 미드마켓 SaaS 고객사에서는 CloudWatch 청구서가 월 $18,000까지 치솟았는데, 알고 보니 컨테이너 100개가 모두 DEBUG 레벨 로그를 그대로 CloudWatch로 밀어 넣고 있었어요.

2026년 기준으로 관측성 비용의 구조적 원인은 크게 세 가지입니다. 첫째, 기본값이 "영구 보관"인 서비스가 여전히 많습니다. CloudWatch Logs의 기본 보존 기간은 "Never Expire"이고, 이는 오래된 팀일수록 수 테라바이트의 좀비 스토리지를 축적합니다. 둘째, 트레이스는 관측성 비용의 60~70%를 차지하는데(로그는 20~30%), 대부분의 애플리케이션이 100% 샘플링으로 시작하고 나서 뒤늦게 조정을 시도하죠. 셋째, Container Insights, VPC Flow Logs, Load Balancer 접근 로그 같은 vended 로그가 사용자도 모르는 사이에 GB 단위로 쌓입니다.

여기에 더해 Datadog, New Relic 같은 SaaS 관측성 벤더는 호스트당 요금과 인덱스된 커스텀 메트릭 요금을 별도로 청구합니다. 클라우드 계정의 로깅 요금과 SaaS 요금을 비용 할당 태그 기반 쇼백·차지백 대시보드에서 함께 보지 않으면 총량이 얼마인지 파악조차 어렵습니다. 실무에서는 이 두 라인 아이템을 하나의 "옵저버빌리티 예산"으로 묶어 관리하는 것이 첫 단계입니다.

2026년 CloudWatch·Azure Monitor·GCP Cloud Logging 가격 비교

세 클라우드의 로깅 서비스는 겉보기 요율이 비슷해 보이지만, 과금 단위와 무료 티어, 저장 계층 옵션에서 큰 차이가 있습니다. 다음 표는 2026년 8월 기준 미국 리전(us-east-1, East US, us-central1) 요금을 정리한 것입니다.

항목 AWS CloudWatch Logs Azure Monitor Logs GCP Cloud Logging
기본 수집 요금 $0.50/GB (표준) $2.30/GB (Analytics) $0.50/GB
저비용 계층 $0.25/GB (Infrequent Access) $0.50/GB (Basic) / $0.05/GB (Auxiliary) 제외 필터로 무료 처리
무료 티어 월 5GB (계정 전체) 계정당 월 5GB 프로젝트당 월 50GB
기본 저장 요금 $0.03/GB/월 30일 무료 후 $0.10/GB/월 수집비에 30일 저장 포함
쿼리 요금 Logs Insights: $0.005/GB 스캔 Basic 쿼리 시 GB당 별도 요금 포함 (첫 50GB), 이후 스캔당
약정 할인 없음 100GB/일 15% ~ 500GB/일 30% Committed Use 없음(로깅 한정)
내보내기 대상 S3, Kinesis Firehose, Lambda Storage Account, Event Hub BigQuery, GCS, Pub/Sub

이 표에서 가장 오해가 잦은 지점은 GCP의 "월 50GB 무료" 항목입니다. 프로젝트당이라는 조건이 붙어 있어 대규모 조직에서는 프로젝트가 수백 개로 분산돼 실제로는 넉넉해 보이지만, GKE 클러스터 하나만 돌려도 프로젝트당 100GB 이상이 순식간에 쌓입니다. 두 번째 오해는 Azure Analytics Logs가 "기본"이라는 착각입니다. 로그 테이블 대부분은 검색·알림이 필요 없는 감사 로그라서 Basic 계층이 훨씬 적합해요.

AWS CloudWatch 비용을 60% 절감하는 방법

CloudWatch는 절감 레버가 가장 많은 서비스입니다. 제가 실제로 적용해 청구서를 반토막 낸 순서대로 소개할게요.

1. Infrequent Access 로그 클래스로 전환

2026년 초 CloudWatch Logs에 GA된 Infrequent Access(IA) 로그 클래스는 수집 요금이 $0.25/GB로 표준의 절반입니다. Logs Insights 쿼리도 완전히 지원하므로 실시간 알람이 걸려 있지 않은 로그 그룹은 대부분 IA로 이관해도 안전합니다. Terraform으로는 다음과 같이 설정합니다.

resource "aws_cloudwatch_log_group" "audit_logs" {
  name              = "/app/audit"
  log_group_class   = "INFREQUENT_ACCESS"  # 표준 대비 50% 절감
  retention_in_days = 90                    # 좀비 로그 방지
  kms_key_id        = aws_kms_key.logs.arn
}

# 실시간 알람이 걸린 그룹은 STANDARD 유지
resource "aws_cloudwatch_log_group" "app_error" {
  name              = "/app/error"
  log_group_class   = "STANDARD"
  retention_in_days = 30
}

2. VPC Flow Logs를 S3로 직행시키기

VPC Flow Logs를 CloudWatch로 보내면 vended 로그 요금 $0.25/GB가 부과됩니다. 대신 S3로 직접 내보내면 이 요금이 완전히 사라지고, S3 표준 스토리지 요금($0.023/GB/월)과 요청 요금만 남습니다. 조회는 Athena($5/TB 스캔)로 처리하면 대부분의 워크로드에서 75% 이상 절감돼요.

aws ec2 create-flow-logs \
  --resource-type VPC \
  --resource-ids vpc-0abc123 \
  --traffic-type ALL \
  --log-destination-type s3 \
  --log-destination arn:aws:s3:::my-vpc-flow-logs/prod/ \
  --destination-options FileFormat=parquet,PerHourPartition=true

3. Container Insights의 고카디널리티 메트릭 제거

Container Insights는 노드·파드·컨테이너 단위로 수십 개의 커스텀 메트릭을 자동 생성합니다. 클러스터 하나에 수천 개의 파드가 뜨면 커스텀 메트릭이 순식간에 10만 개를 넘고, 첫 10,000개는 $0.30/메트릭이므로 월 $3,000이 로그도 아닌 메트릭에만 지출됩니다. 해법은 ADOT(AWS Distro for OpenTelemetry) 컬렉터의 awsemf exporter에서 필요한 메트릭만 화이트리스트로 지정하는 것입니다.

exporters:
  awsemf/keep_only_essentials:
    namespace: ContainerInsights
    metric_declarations:
      - dimensions: [[ClusterName, Namespace]]
        metric_name_selectors:
          - "^pod_cpu_utilization$"
          - "^pod_memory_utilization$"
          - "^pod_number_of_container_restarts$"
    # 컨테이너·인스턴스 레벨 세부 메트릭은 의도적으로 제외

이 필터만으로 어느 EKS 계정에서 커스텀 메트릭 요금이 월 $4,200에서 $380으로 떨어진 사례가 있어요. (직접 콘솔에서 새 청구서를 확인했을 때 팀 전체가 웃었던 기억이 납니다.) 쿠버네티스 비용 최적화를 진행 중이라면 이 단계는 라이트사이징만큼 효과가 큽니다.

4. 좀비 로그 그룹 정리

"Never Expire"로 방치된 로그 그룹은 조용히 매달 요금을 뽑아갑니다. 다음 스크립트로 보존 정책이 없는 로그 그룹을 일괄 파악해 90일로 강제할 수 있습니다.

aws logs describe-log-groups --output json \
  | jq -r '.logGroups[] | select(.retentionInDays == null) | .logGroupName' \
  | while read LG; do
      aws logs put-retention-policy \
        --log-group-name "$LG" \
        --retention-in-days 90
      echo "설정 완료: $LG"
    done

공식 AWS Cloud Operations 블로그의 CloudWatch Logs 비용 최적화 가이드에서도 첫 번째 권고 사항으로 보존 정책 강제를 언급합니다.

Azure Monitor Basic Logs로 이관하는 방법

Azure Monitor의 요금 구조는 세 클라우드 중 가장 복잡합니다. 하지만 Basic Logs와 Auxiliary Logs라는 두 저비용 티어를 활용하면 청구서가 극적으로 바뀝니다. Analytics Logs가 GB당 $2.30인 반면, Basic Logs는 $0.50, Auxiliary Logs는 $0.05로 최대 46배 저렴합니다.

어떤 테이블을 Basic으로 이관해야 하는가

모든 로그를 Basic으로 옮길 수는 없습니다. Basic Logs는 알림·시각화·Commitment Tier 대상이 아니며 KQL 쿼리 기능도 제한됩니다. 실무 기준으로는 다음 세 조건을 모두 만족하면 Basic으로 이관해도 안전합니다.

  • 사고 조사 시에만 조회하고 실시간 알림이 걸려 있지 않다
  • Log Analytics 워크북·Sentinel 룰의 참조 대상이 아니다
  • 규정 준수를 위해 오래 보관해야 하는 감사·접근 로그다

대표적으로 ContainerLogV2, AppTraces(디버그 스팬), Firewall/NSG 흐름 로그, App Gateway 접근 로그가 Basic 후보입니다. Azure CLI로 테이블 계층을 변경하는 명령은 다음과 같습니다.

az monitor log-analytics workspace table update \
  --resource-group prod-observability \
  --workspace-name prod-law \
  --name ContainerLogV2 \
  --plan Basic

# Auxiliary 계층(가장 저렴)으로 이관
az monitor log-analytics workspace table update \
  --resource-group prod-observability \
  --workspace-name prod-law \
  --name AppGatewayAccessLogs \
  --plan Auxiliary

Commitment Tier 최적화

Analytics Logs로 남겨야 하는 테이블에는 Commitment Tier를 적용해야 합니다. 하루 200GB를 정기적으로 수집한다면 Pay-As-You-Go 대비 20% 할인이 자동 적용됩니다.

  • 100 GB/일 → GB당 $1.96 (15% 할인)
  • 200 GB/일 → GB당 $1.84 (20% 할인)
  • 500 GB/일 → GB당 $1.61 (30% 할인)

Sentinel과의 이중 과금 주의

Microsoft Sentinel을 활성화한 워크스페이스는 동일한 로그에 대해 Sentinel 수집 요금이 추가됩니다(약 $2.00/GB, Commitment Tier 별도). Sentinel 데이터 커넥터 중 실제 탐지 룰에 사용되지 않는 커넥터는 즉시 해제하세요. 특히 Office 365, Azure AD Sign-in처럼 자동으로 활성화되는 커넥터가 대량의 데이터를 밀어 넣는 경우가 많습니다.

GCP Cloud Logging 제외 필터 실전 구성

GCP Cloud Logging은 다른 두 클라우드와 달리 수집 자체를 막는 것이 주된 절감 레버입니다. Cloud Logging의 핵심 비용은 GB당 $0.50의 수집 요금(_Default 버킷에 30일 저장 포함)이며, 이는 Logs Router의 제외 필터로 사실상 무료로 만들 수 있어요.

즉시 제외해야 할 로그 3종

모든 계정에 공통적으로 다음 세 카테고리를 제외 필터로 걸어야 합니다. 이것만으로 대부분의 프로젝트가 40% 이상 절감돼요.

  1. 로드밸런서 헬스체크 요청: httpRequest.userAgent="GoogleHC/1.0"
  2. DEBUG·INFO 레벨 애플리케이션 로그: severity < WARNING
  3. 내부 네트워크 VPC Flow Logs: resource.type="gce_subnetwork" AND jsonPayload.connection.src_ip=~"^10\\."

Terraform으로는 다음과 같이 _Default 싱크에 제외 필터를 추가합니다.

resource "google_logging_project_sink" "default_with_exclusions" {
  project     = var.project_id
  name        = "_Default"
  destination = "logging.googleapis.com/projects/${var.project_id}/locations/global/buckets/_Default"

  exclusions {
    name        = "drop-health-checks"
    description = "GCP 로드밸런서 헬스체크 제거"
    filter      = "httpRequest.userAgent=\"GoogleHC/1.0\""
  }

  exclusions {
    name        = "drop-debug-logs"
    description = "DEBUG·INFO 레벨 애플리케이션 로그"
    filter      = "severity < WARNING AND resource.type=\"k8s_container\""
  }

  exclusions {
    name        = "drop-internal-vpc-flows"
    description = "내부 10.0.0.0/8 VPC 트래픽"
    filter      = "resource.type=\"gce_subnetwork\" AND jsonPayload.connection.src_ip=~\"^10\\.\""
  }
}

BigQuery로 콜드 스토리지 이관

장기 감사를 위해 보관은 필요하지만 자주 조회하지 않는 로그는 BigQuery로 라우팅하는 것이 훨씬 저렴합니다. BigQuery Storage 요금($0.02/GB/월, 90일 미접근 시 $0.01/GB)은 Cloud Logging Analytics의 확장 보관 요금보다 최대 5배 저렴하고, SQL로 쿼리할 수 있어 조사 편의성도 좋아집니다.

OpenTelemetry 샘플링으로 벤더 종속 벗어나기

클라우드 네이티브 로깅·메트릭 서비스를 최적화해도 트레이스 비용은 여전히 관측성 비용의 60~70%를 차지합니다. 여기에는 OpenTelemetry Collector의 샘플링 전략이 결정적이죠.

Head-Based vs Tail-Based 샘플링

Head 기반 샘플링은 트레이스 생성 시점에 확률적으로(예: 10%) 결정을 내립니다. 저비용이지만 에러가 발생한 트레이스도 90%를 버릴 위험이 있어요. Tail 기반 샘플링은 트레이스 전체가 완성된 뒤에 정책 기반으로 결정합니다. 에러·지연 특이 트레이스는 100% 보존하면서 성공 트레이스만 샘플링하기 때문에 진단 품질 손실 없이 저장량을 최대 90% 줄입니다.

# OpenTelemetry Collector: 하이브리드 샘플링
receivers:
  otlp:
    protocols:
      grpc: {}

processors:
  # 1단계: Head 샘플링으로 전체 부하 감소
  probabilistic_sampler:
    sampling_percentage: 25

  # 2단계: Tail 샘플링으로 에러·지연 100% 보존
  tail_sampling:
    decision_wait: 10s
    policies:
      - name: keep-errors
        type: status_code
        status_code: { status_codes: [ERROR] }
      - name: keep-slow-requests
        type: latency
        latency: { threshold_ms: 500 }
      - name: sample-normal-traffic
        type: probabilistic
        probabilistic: { sampling_percentage: 5 }

exporters:
  otlp/datadog:
    endpoint: trace.agent.datadoghq.com:4317

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [probabilistic_sampler, tail_sampling]
      exporters: [otlp/datadog]

공식 OpenTelemetry 샘플링 문서에서 각 정책의 세부 파라미터와 메모리 요구량 계산법을 확인할 수 있습니다.

속성 필터링으로 스팬 크기 줄이기

Datadog·New Relic 등 SaaS 벤더는 인덱스된 스팬 수와 함께 스팬의 크기(=속성 개수 × 값 크기)도 요금에 반영합니다. 전체 URL, 요청 ID, 세션 ID 같은 고카디널리티 속성은 attributes/redact 프로세서로 잘라내야 합니다. 트레이스당 평균 크기를 절반으로 줄이면 자동화된 이상 탐지·교정 파이프라인에서 걸리는 알람 임계값도 정직해집니다.

로그를 메트릭으로 변환하기

구조화된 로그의 상당수는 실제로는 카운터·게이지에 불과합니다. 로그 기반 알림 대신 컬렉터에서 logstometrics 프로세서로 집계 메트릭을 생성하면 저장 비용을 90% 이상 줄일 수 있어요. 예를 들어 "결제 실패" 로그 이벤트 수는 초당 1건씩 태그가 붙은 카운터로 충분합니다.

30일 관측성 비용 절감 체크리스트

이론은 충분합니다. 다음 순서로 실행하면 30일 안에 청구서에서 눈에 띄는 변화가 나옵니다. 각 단계는 이전 단계보다 리스크가 크므로 순서를 지키는 것이 중요합니다.

  1. 1~3일차: 가시성 확보. AWS Cost Explorer, Azure Cost Management, GCP Billing에서 "CloudWatch", "Log Analytics", "Cloud Logging" 서비스를 필터로 걸어 최근 90일 트렌드를 확인합니다. 상위 5개 로그 그룹/테이블/싱크가 전체의 몇 %를 차지하는지 계산합니다(대부분 80%를 넘습니다).
  2. 4~7일차: 좀비 정리. CloudWatch의 무기한 보존 로그 그룹, Azure의 삭제된 리소스에 남은 워크스페이스, GCP의 사용 안 하는 커스텀 싱크를 정리합니다.
  3. 8~14일차: 저비용 계층으로 이관. 감사·규정 준수 로그를 CloudWatch IA, Azure Basic Logs, GCP BigQuery로 옮깁니다. 이 단계만으로도 대체로 30~40% 절감됩니다.
  4. 15~21일차: 수집 지점 필터링. GCP 제외 필터, VPC Flow Logs → S3 이관, Container Insights 메트릭 화이트리스트를 적용합니다.
  5. 22~28일차: 트레이스 샘플링. OpenTelemetry Collector를 도입하고 tail-based 샘플링을 활성화합니다. 초기에는 25% head + tail 조합으로 시작해 SLO 위반 지표를 모니터링하며 조정합니다.
  6. 29~30일차: 가드레일 자동화. 예산 알림, 이상 탐지 규칙, Policy-as-Code(예: OPA/Cloud Custodian 기반 자동 교정)를 배포해 절감 효과가 시간이 지나도 유지되도록 합니다.

공식 AWS CloudWatch 비용 분석·최적화 문서에서 제공하는 CloudWatch Cost Explorer 대시보드를 함께 활용하면 절감 효과를 매주 정량적으로 추적할 수 있습니다.

자주 묻는 질문

CloudWatch가 왜 이렇게 비싼가요?

CloudWatch 비용의 주범은 세 가지입니다. 첫째, 기본값이 "Never Expire"인 로그 그룹에 쌓이는 좀비 스토리지. 둘째, 모든 클러스터에 활성화된 Container Insights가 노드당 시간당 $0.30씩 청구되는 것. 셋째, 고카디널리티 차원으로 폭발한 커스텀 메트릭입니다. Infrequent Access 클래스, 보존 정책 강제, ADOT 컬렉터 필터를 순서대로 적용하면 대부분의 계정에서 50% 이상 절감됩니다.

Azure Basic Logs와 Analytics Logs 중 어느 것을 선택해야 하나요?

실시간 알림, KQL 대시보드, Sentinel 탐지 룰에서 참조하는 테이블은 Analytics Logs를 유지해야 합니다. 반면 감사·규정 준수·아카이브 목적의 테이블(ContainerLogV2 상세 로그, App Gateway 접근 로그 등)은 Basic 또는 Auxiliary Logs로 이관해 최대 46배 비용을 절감할 수 있어요.

GCP Cloud Logging 제외 필터를 잘못 설정하면 어떻게 되나요?

제외된 로그는 완전히 사라지며 복구할 수 없습니다. 배포 전 반드시 Logs Explorer에서 동일한 쿼리를 실행해 매칭 결과를 검토하고, 필요하다면 별도의 싱크로 GCS·BigQuery에 보존한 뒤 _Default 버킷에서만 제외하는 방식이 안전합니다. Admin Activity 등 _Required 로그는 항상 무료이며 제외 대상이 아닙니다.

OpenTelemetry Head 샘플링과 Tail 샘플링 중 무엇을 먼저 도입해야 하나요?

대부분의 조직은 Head 기반 샘플링(예: 25%)으로 시작해 컬렉터 부하와 백엔드 요금을 먼저 낮춘 뒤, Tail 기반 샘플링을 추가해 에러·지연 트레이스 100% 보존을 확보하는 순서를 권장합니다. Tail 샘플링 단독으로도 70~80%의 비용 절감을 달성할 수 있지만, 컬렉터 메모리 요구량이 증가하므로 하이브리드 구성이 안전합니다.

VPC Flow Logs를 CloudWatch로 보낼 때와 S3로 보낼 때 실제 비용 차이는 얼마인가요?

VPC Flow Logs 100GB 기준으로 CloudWatch 경로는 vended 요금 $25(수집) + $3(저장) = 월 $28입니다. S3 경로는 $2.30(표준 스토리지) + Athena 쿼리 필요 시 GB당 몇 센트만 발생해 90% 이상 절감됩니다. Parquet 포맷으로 저장하면 Athena 스캔 비용까지 5~10배 추가로 절감됩니다.

Datadog·New Relic 같은 SaaS 관측성 도구도 같은 방법으로 절감할 수 있나요?

네, OpenTelemetry Collector를 애플리케이션과 SaaS 벤더 사이에 배치하면 동일한 필터·샘플링·속성 제거 프로세서를 적용할 수 있습니다. 특히 Datadog는 인덱스된 스팬 수와 커스텀 메트릭 개수를 별도로 청구하므로, 컬렉터에서 고카디널리티 속성을 제거하고 tail-based 샘플링을 적용하면 벤더 청구서도 40~60% 줄일 수 있어요.

Jordan Reeves
저자 소개 Jordan Reeves

FinOps practitioner who's cut seven-figure cloud bills more than once. Believes most cost overruns are an architecture problem in disguise.