해결됨: 최근 Azure 청구서에서 가장 예상치 못하게 비싼 항목은 무엇인가요?

발행: (2026년 2월 11일 오후 03:39 GMT+9)
11 분 소요
원문: Dev.to

Source: Dev.to

번역을 진행하려면 번역하고자 하는 전체 텍스트(코드 블록 및 URL을 제외한 본문)를 제공해 주세요. 텍스트를 주시면 원본 형식과 마크다운을 유지하면서 한국어로 번역해 드리겠습니다.

Executive Summary

TL;DR: Azure Log Analytics는 기본 진단 설정이 과도한 데이터를 수집하면서 예상치 못하게 큰 클라우드 비용이 될 수 있습니다. 이 가이드는 세 가지 전략을 제공합니다—일일 한도 설정과 같은 빠른 해결책, 세분화된 진단 설정 및 데이터 수집 규칙(DCR)을 활용한 영구적인 해결책, 그리고 “핵심” 아키텍처로 핫/콜드 데이터 경로를 분리하는 방법—이를 통해 데이터 수집 비용을 효과적으로 관리하고 줄일 수 있습니다.

문제

Azure 서비스의 기본 진단 로깅은 비핵심 데이터를 전송함으로써 예상치 못한 높은 Log Analytics 수집 비용을 초래할 수 있습니다.

  • 빠른 해결책 – KQL 쿼리로 잡음 데이터 유형을 식별하고 Log Analytics 작업 영역 설정에서 일시적인 일일 수집 한도를 설정합니다.
  • 영구적인 해결책 – 진단 설정에 대한 세밀한 제어를 적용하여 가치 있는 로그 카테고리만 선택하고, DCR을 활용해 수집 전 변환 및 필터링을 수행합니다.
  • 근본적인 옵션 – 데이터 스트림을 다음과 같이 분리하여 재구성합니다:
    • 핫 경로 – 실시간 요구에 맞춘 경량 Log Analytics.
    • 콜드 경로 – 비용 효율적인 장기 보관을 위한 Azure Storage Account.

Azure의 Log Analytics는 적절히 관리되지 않으면 조용히 가장 큰 클라우드 비용이 될 수 있습니다. 이 가이드는 빠른 해결책부터 영구적인 아키텍처 변경까지 세 가지 실용적인 전략을 제공하여 과도한 데이터 수집 비용을 제어하고 청구서를 정상화하는 방법을 안내합니다.

실제 사례

어제 일처럼 기억이 납니다. 우리는 막 auth-svc-prod 라는 멋진 새로운 마이크로서비스를 롤아웃했었습니다. 날카로운 주니어 엔지니어, 가령 벤이라고 부를게요,는 모니터링을 교과서대로 설정했습니다: App Insights, 모든 관련 리소스에 대한 진단 설정, 모두 중앙 Log Analytics 워크스페이스로 연결했습니다.

한 달 뒤, 재무팀이 슬랙으로 Azure 청구서 스크린샷과 함께 한 가지 질문을 던졌습니다:

“‘Log Ingestion’이 뭔가요? 왜 우리 전체 프로덕션 환경의 VM 비용보다 더 많이 청구되나요?”

벤은 문서를 완벽히 따라했을 뿐이라 잘못한 것이 없었습니다. 바로 여기서 함정이 발생합니다.

기본 진단 로깅은 Azure 예산을 잠식하는 조용한 살인자입니다. 새 환경을 구축할 때 “Log Analytics로 전송”을 클릭하고 모든 카테고리를 활성화하고 싶어집니다. Azure는 이를 쉽게 해 주지만, 많은 서비스가 기본적으로 매우 말이 많습니다:

서비스시끄러운 카테고리
App Service모든 성공적인 헬스‑프로브 ping
Azure Firewall모든 허용된 패킷
Storage Account모든 성공적인 읽기 작업

개별적으로는 아주 작은 데이터 조각이지만, 시간당 수백만 건의 트랜잭션이 쌓이면 Log Analytics 워크스페이스에 직접 향하는 소방호스가 됩니다—그리고 기가바이트당 비용을 지불하게 됩니다.

근본 원인은 버그가 아니라 우선순위의 불일치입니다. 기본 설정은 비용이 아니라 최대 가시성을 위해 최적화되어 있습니다. 우리, 현장의 엔지니어가 그 소방호스를 관리 가능한—그리고 가치 있는—데이터 흐름으로 조절해야 합니다.

Three Levels of Response

1️⃣ Quick Fix – Apply a Tourniquet

Goal: Cap the cost immediately so you have breathing room.

Step 1 – Find the Noisiest Tables

Run this KQL query in your workspace to see which data types are costing the most:

// Find the biggest data hogs (last 30 days)
Usage
| where TimeGenerated > ago(30d)
| where IsBillable == true
| summarize BillableDataGB = sum(Quantity) / 1000 by DataType
| sort by BillableDataGB desc

Step 2 – Set a Daily Ingestion Cap

  1. Open Log Analytics WorkspaceUsage and estimated costs.
  2. Set a daily ingestion cap.

Warning: The cap is blunt—once reached, Azure stops ingesting all data for the rest of the day. Critical security or error logs could be lost. Use this only as a temporary safety valve.

2️⃣ Permanent Fix – Intentional Data Collection

Now that the immediate bleeding has stopped, it’s time for proper surgery: be intentional about what you collect.

Refine Diagnostic Settings

  • Don’t check “AllMetrics” and “AllLogs”.
  • Do select only categories that provide real business or operational value.

Example comparison

Resource“AllLogs” (Expensive)Filtered (Smart)
Azure FirewallAll logs → huge volumeOnly AzureFirewallApplicationRule & AzureFirewallDnsProxy logs
Key VaultAll metrics → unnecessaryOnly AuditEvent logs (security/compliance)

Pro Tip – Use Data Collection Rules (DCRs)

DCRs let you apply a KQL transformation before data is ingested and billed. You can:

  • Drop noisy columns.
  • Filter out entire log entries (e.g., 200 OK health checks).

This is the most powerful tool in your cost‑optimization arsenal.

3️⃣ Nuclear Option – Hot/Cold Architecture

When even filtered data is too voluminous for a “hot” Log Analytics workspace, rethink the architecture.

Split Data Streams

PathPurposeStorageRetention
HotReal‑time alerting & interactive dashboards (errors, security alerts, KPIs)Log Analytics (lean)30‑90 days
ColdLong‑term compliance & forensic analysis (raw logs)Azure Storage (Blob/ADLS)1 year+ (cheaper)

Implementation Sketch

flowchart LR
    subgraph HotPath[Hot Path (Log Analytics)]
        A[High‑priority logs] --> LA[Log Analytics Workspace]
    end
    subgraph ColdPath[Cold Path (Storage)]
        B[All other logs] --> SA[Azure Storage Account]
    end
    A -->|DCR filtering| B
  • Ingest only high‑value data into the hot workspace.
  • Archive the rest to Azure Storage, where you can still query via Azure Synapse, Azure Data Explorer, or Log Analytics “Data Export” if needed.

👉 Read the original article on TechResolve.blog

요약

레벨작업사용 시점
Quick Fix일일 수집 제한 설정 및 잡음이 많은 테이블 식별즉각적인 비용 손실 발생, 빠른 임시 해결책 필요
Permanent Fix세분화된 진단 설정 + DCRs지속적인 운영, 지속 가능한 비용 관리 원함
Nuclear Option핫/콜드 분리 아키텍처장기적인 규정 준수 데이터 양이 핫 작업 공간만으로는 너무 많음

콜드 경로 (저렴함)
다른 모든 경우—자세한 애플리케이션 로그, 네트워크 흐름 로그, 규정 준수 데이터—는 보관은 필요하지만 거의 조회하지 않으므로 Log Analytics 대신 Azure Storage Account 로 직접 전송합니다. 이 방법은 수십 배 더 저렴합니다.

데이터를 분석해야 할 때는 다음과 같이 할 수 있습니다:

  • Azure Data Explorer를 사용해 현장에서 직접 쿼리하거나,
  • 필요 시 재생성(리하이드레이트)할 수 있습니다.

이 방법은 약간의 추가 설정이 필요하지만, 대규모 환경에서는 규정 준수나 가시성을 희생하지 않으면서 로깅 비용을 지속 가능하게 관리할 수 있는 유일한 방법입니다.

그 깜짝 청구서는 우리 팀에게 고통스럽지만 귀중한 교훈이었습니다. 로깅을 사후 고려사항이 아니라 애플리케이션 아키텍처의 핵심 요소로 다루게 만들었습니다. 재무팀이 찾아올 때까지 기다리지 마세요. 능동적으로 Usage 테이블을 오늘 확인해 보세요; 예상치 못한 결과를 발견할 수도 있습니다.

내 작업 지원하기
이 글이 도움이 되었다면, 커피 한 잔 사주세요:

0 조회
Back to Blog

관련 글

더 보기 »

bilingual_pdf, @rudifa가 만든 앱

설명: 다른 인간 언어를 배우고 있다면, 자신이 아는 언어의 텍스트와 그 번역이 포함된 bilingual documents를 만들고 싶을 수도 있습니다...