Microsoft AZ-204: Azure 모니터링, 진단 및 DevOps 통합 — 학습 가이드
다음의 일부입니다: Microsoft Azure Developer Associate AZ-204 — 학습 가이드. 검증된 답안으로 연습하기: Microsoft 시험 허브, 또는 다음에서 시간 제한 모의고사 풀기: ExamRoll.io.
개요
Azure Monitor와 Application Insights는 Azure 애플리케이션을 위한 통합된 개발자 중심의 관찰 가능성(observability) 스택을 제공합니다. Application Insights는 요청, 종속성, 예외, 추적과 같은 애플리케이션 원격 분석(telemetry)을 수집하고, Azure Monitor는 여러 리소스의 메트릭과 로그를 Log Analytics 작업 영역으로 집계하여 경고 및 DevOps 통합을 구동합니다. 계측(instrumentation) 선택, 원격 분석 시맨틱, 가용성 테스트, Kusto Query Language(KQL), 작업 그룹을 사용한 경고, 분산 추적, ARM 템플릿을 사용한 코드형 인프라(Infrastructure as Code)를 마스터하면 안정적이고 진단 가능하며 자동화 가능한 솔루션을 보장할 수 있습니다.
Application Insights 계측 및 원격 분석
Application Insights 리소스는 수집을 위해 계측 키(instrumentation key) 또는 연결 문자열(connection string)로 식별됩니다. 계측 키는 SDK가 원격 분석을 라우팅하는 데 사용하던 레거시 단일 GUID입니다. 연결 문자열은 현재 권장되는 방식입니다. 여기에는 계측 키와 엔드포인트 메타데이터(수집 및 Live Metrics 엔드포인트)가 포함되며, 기본이 아닌 엔드포인트(주권 또는 프라이빗 클라우드용)로 라우팅할 수 있습니다. 새로운 코드와 구성에서는 연결 문자열을 사용하십시오. 이를 통해 코드 재배포 없이 향후 엔드포인트를 변경할 수 있습니다. App Service 내에서 플랫폼 수준에서 Application Insights를 활성화하면 자동 감지된 런타임을 위해 환경 설정에 연결 문자열이 채워집니다.
계측은 SDK 또는 자동 계측(auto-instrumentation)을 통해 수행할 수 있습니다. SDK 접근 방식(.NET용 Microsoft.ApplicationInsights.AspNetCore, Node.js용 applicationinsights, Application Insights Java 에이전트 등)은 코드 수준의 제어를 제공합니다: 사용자 지정 이벤트, 메트릭, 그리고 TelemetryInitializer 및 프로세서를 통한 강화된 원격 분석(적응 샘플링 포함). 자동 계측(코드리스 연결)은 App Service 및 일부 컴퓨팅 스택에서 사용할 수 있으며, 사이트 확장/에이전트를 사용하여 코드 변경 없이 들어오는 요청, 종속성 및 예외를 수집합니다. 사용자 지정 이벤트, 비즈니스 메트릭 또는 백그라운드 작업에서의 명시적인 상관관계가 필요할 때는 SDK 계측을 사용하고, 빠르고 적은 노력으로 가시성을 확보하거나 리프트 앤 시프트(lift-and-shift) 워크로드에는 코드리스 연결을 사용하십시오. 두 경우 모두 마이크로서비스 아키텍처에서 서비스를 구별하기 위해 클라우드 역할 이름을 설정하고, 충실도와 비용의 균형을 맞추기 위해 샘플링을 신중하게 구성하십시오.
Application Insights는 다음과 같은 몇 가지 핵심 원격 분석 유형을 내보냅니다:
- Requests는 인바운드 작업(HTTP 요청, 함수 호출)을 기간, 응답 코드, 성공 여부와 함께 캡처합니다.
- Dependencies는 아웃바운드 호출(HTTP, SQL, Azure SDK 호출, 큐)을 대상, 유형, 기간, 성공 여부와 함께 캡처합니다.
- Exceptions는 발생한 오류, 스택 추적, 명시적으로 추적될 때 처리된 예외를 캡처합니다.
- Traces는 로그 메시지를 캡처합니다. SDK는 널리 사용되는 로깅 프레임워크와 통합되어 로그와 원격 분석이 상관관계를 공유하도록 합니다.
- Events는 TrackEvent를 통해 사용자 지정 비즈니스 수준의 발생을 캡처하며, 사용자 지정 차원과 카운트를 지원합니다.
- Metrics는 숫자 측정을 캡처합니다. KPI에 대한 사용자 지정 메트릭을 추적하고 메트릭 탐색기에서 검사할 수 있습니다.
Application Insights의 분산 추적은 상관관계에 달려 있습니다. 각 엔드투엔드 작업은 관련된 원격 분석 전반에 걸쳐 공유되는 작업 ID(W3C 용어로는 trace ID)를 가지며, 각 스팬(span)은 전파 헤더에 의해 강제되는 부모-자식 관계를 가집니다. 최신 SDK는 W3C Trace Context(traceparent, tracestate)를 사용합니다. KQL의 Operation_Id는 동일한 트랜잭션에 대한 Requests, Dependencies, Exceptions, Traces를 연결합니다. 아웃바운드 HTTP 클라이언트가 헤더를 전파하도록 하십시오. .NET의 경우 System.Diagnostics.Activity와 AI SDK가 이를 자동으로 처리합니다. 종속성 추적은 일반적인 클라이언트(HTTP, SQL, Service Bus, Storage)를 계측합니다. 서비스가 경계를 넘을 때(예: App Service에서 AKS로), 일관된 전파는 단일 연결된 트랜잭션 맵을 생성합니다. 비동기 및 메시지 기반 흐름의 경우, SDK가 메시지 메타데이터에 상관관계 ID를 캡처하고 전달하도록 하십시오. 대부분의 Azure SDK는 기본적으로 이 작업을 수행합니다.
가용성 테스트 및 가상(Synthetic) 모니터링
가용성 테스트는 여러 지역에서 외부 도달 가능성과 응답성을 검증합니다. URL ping 테스트는 여러 테스트 위치에서 구성된 빈도로 HTTP 요청을 보내고 상태 코드, SSL 상태 및 선택적 콘텐츠 일치를 검증합니다. 재시도와 여러 위치를 사용하여 거짓 양성(false positive)을 줄이고, 테스트 실패 시 조치 가능한 알림을 받도록 경고를 구성하십시오.
다단계 가용성 테스트는 과거에 워크플로우를 확인하기 위해 상태 저장 쿠키를 사용하여 기록된 HTTP 요청 시퀀스를 실행했습니다. 클래식 다단계 웹 테스트는 더 이상 사용되지 않습니다. 다중 요청 또는 인증 시나리오의 경우, TrackAvailability API(또는 OpenTelemetry 내보내기)를 사용하여 자체 클라이언트나 서비스를 계측하여 AvailabilityTelemetry를 내보내는 방식으로 가상 테스트를 구현하십시오. 이 접근 방식을 사용하면 중앙 집중식 보고 및 경고 기능을 유지하면서 사용자 지정 인증, 페이로드 및 도메인별 유효성 검사를 수행할 수 있습니다.
사용자 지정 TrackAvailability를 통해 다음을 제어할 수 있습니다:
- 추세 분석 및 중복 제거를 위한 테스트 이름, 실행 위치 및 시퀀스 식별자.
- 단순히 HTTP 상태뿐만 아니라 자체 유효성 검사에 기반한 기간 및 성공 시맨틱.
- 근본 원인 힌트 및 백엔드 원격 분석과의 상관관계를 위한 풍부한 메시지 및 사용자 지정 차원.
가용성 테스트를 백엔드 종속성 및 요청 원격 분석과 결합하여 엔드포인트 가용성 문제(네트워크, DNS, TLS)와 애플리케이션 장애(예외, 시간 초과) 및 다운스트림 중단(SQL, 외부 API)을 신속하게 구별하십시오. 가용성 테스트 실패를 작업 그룹에 연결하여 인시던트 워크플로우를 구동하십시오.
Azure Monitor 데이터, KQL 및 작업 그룹을 사용한 경고
Azure Monitor는 메트릭과 로그라는 두 가지 기본 데이터 유형을 수집합니다. 메트릭은 거의 실시간으로 수집되고 다차원 슬라이싱(예: 인스턴스, API 경로별)이 가능한 경량의 숫자 시계열 데이터입니다. CPU, 메모리, 요청률, 대기 시간, 가용성 등 빠른 탐지에 가장 적합하며 기본적으로 최대 93일간 보존을 지원합니다. 로그는 Log Analytics 작업 영역에 저장되는 구조화된 쿼리 가능 레코드로, Application Insights 데이터, 플랫폼 리소스 로그, 보존 기간 구성이 가능한 사용자 지정 로그를 포함합니다. 진단 설정을 사용하여 플랫폼 메트릭과 리소스 로그를 작업 영역, Event Hub 또는 Storage로 라우팅하여 보관 및 분석에 활용하세요.
Kusto Query Language(KQL)는 탐색적 분석, 대시보드, 로그 경고의 기반이 됩니다. 핵심 패턴은 다음과 같습니다.
- 기본 쿼리: 빠른 샘플링을 위해
Table | take 10을 사용하고, 성능을 위해 항상 쿼리 초반에where TimeGenerated >= ago(…)로 시간 범위를 제한합니다. - 필터링 및 프로젝션:
Table | where Column == "Value" | project KeyColumns를 사용하여 페이로드를 줄이고 분석에 집중합니다. - 집계:
summarize count() by bin(TimeGenerated, 5m), Dimension을 사용하여 비율, 백분위수 또는 평균을 계산하고, 시간 차트에는percentile()및make-series를 사용합니다. - 조인:
operation_Id와 같은 상관관계 키에 대해join kind=inner또는leftouter를 사용하여 Requests를 Dependencies 또는 Exceptions와 연결합니다. 리소스 간 조인의 경우, 두 리소스가 모두 동일한 작업 영역으로 데이터를 보내거나 리소스 간 쿼리가 활성화되어 있는지 확인해야 합니다. - 유용한 테이블: Application Insights의 경우
requests,dependencies,exceptions,traces,availabilityResults; 플랫폼 로그의 경우AzureDiagnostics및AzureActivity; VM insights의 경우Perf및Heartbeat가 있습니다. - 모범 사례: 필요한 열만 프로젝션하고, 초기에 필터링하며, 합리적인 간격으로 bin을 사용하고, 필요한 경우가 아니면 큰 시간 범위에 대한 비용이 많이 드는 교차 조인을 피합니다.
경고는 메트릭과 로그 모두에 걸쳐 있습니다. 메트릭 경고는 거의 실시간으로 메트릭 임계값을 평가하고, 차원 및 차원별 분할을 지원하며, 정적 또는 동적 임계값(ML 기반 기준선)을 사용할 수 있습니다. 상태를 유지하며(stateful), 평가 결과에 따라 발생(fire) 및 자동 해결(auto-resolve)될 수 있고, 상태가 변경될 때 하나의 알림을 생성합니다. 로그(예약된 쿼리) 경고는 주기적으로 KQL을 실행하고 쿼리 결과(일치 항목 수 또는 측정 임계값)에 따라 트리거됩니다. 여러 테이블에 걸친 복잡한 패턴에 의존하거나 텍스트 분석이 필요한 조건에는 로그 경고를 사용합니다. Application Insights의 스마트 검색 및 변칙 경고는 명시적인 임계값 없이 성능 저하를 강조할 수 있습니다.
작업 그룹은 경고에 대한 재사용 가능한 응답 집합을 정의합니다. 알림 유형에는 이메일, SMS, 음성 및 Azure 모바일 앱 푸시가 포함됩니다. 통합 기능은 다음과 같습니다.
- 웹훅(v1 및 v2): 일관된 페이로드를 위해 Common Alert Schema와 함께 사용합니다. 인증을 위해 사용자 지정 헤더를 설정하고 인시던트 시스템(예: PagerDuty 또는 사용자 지정 수신기)으로 라우팅합니다.
- Azure Functions, Logic Apps 및 Automation runbook: 프로그래밍 방식의 수정 및 보강에 사용합니다. 유연한 변환 및 커넥터를 위해 Logic Apps를 사용합니다.
- ITSM 커넥터(예: ServiceNow): 매핑된 필드로 인시던트를 생성합니다.
작업 그룹을 경고 처리 규칙과 함께 사용하여 유지 관리 중에 경고를 억제하거나, 심각도에 따라 라우팅하거나, 동적 작업을 적용할 수 있습니다. 보안 아웃바운드 웹훅의 경우, 수신기를 Azure IP로 제한하거나 서명/헤더를 요구하고,
Essentials.AlertRule및AlertContext와 같은 Common Alert Schema 속성을 검증하세요.
모니터링 가능성 및 반복 가능한 배포를 위한 ARM 템플릿
Azure Resource Manager(ARM) 템플릿은 리소스와 모니터링 구성을 코드로 선언적으로 정의합니다. 템플릿의 구조는 다음과 같습니다.
- $schema 및 contentVersion: 템플릿 버전을 식별합니다.
- parameters: 외부화된 값(예: 작업 영역 이름, 위치, SKU)을 위한 매개변수입니다. 보안 비밀에는 secureString/secureObject를 사용합니다.
- variables: 반복을 피하기 위한 계산된 값을 위한 변수입니다.
- resources: Application Insights, Log Analytics 작업 영역, 경고 규칙, 작업 그룹, 진단 설정의 선언적 배포를 위한 리소스입니다.
- outputs: 후속 배포 단계를 위해 Application Insights connectionString과 같은 값을 내보내는 출력입니다.
연결된 템플릿 또는 중첩된 템플릿을 사용하여 복잡한 배포를 구성합니다. 배포 리소스(Microsoft.Resources/deployments)는 templateLink(외부 URI)를 통해 자식 템플릿을 참조하거나 인라인으로 포함합니다. parameters 또는 parametersLink를 통해 매개변수 객체를 전달하고, dependsOn으로 순서를 정의하며, 여러 환경에서 모듈을 재사용합니다. ARM을 통한 기본 내장형 모니터링 기능의 예는 다음과 같습니다.
- Log Analytics 작업 영역을 배포하고 Application Insights 리소스에서 사용하는 workspaceResourceId 출력을 설정합니다(작업 영역 기반 모드).
- Application Insights(작업 영역 기반)를 생성하고 connectionString을 출력합니다. 레거시 계측 키 노출을 피합니다.
- 리소스(예: App Service, Key Vault, Storage)에서 진단 설정을 활성화하여 작업 영역 및/또는 Event Hub로 로그와 메트릭을 스트리밍합니다.
- 기준 및 차원이 있는 메트릭 경고(microsoft.insights/metricAlerts)와 KQL을 사용한 예약된 쿼리 경고(microsoft.insights/scheduledQueryRules)를 프로비저닝하고, 리소스 ID로 작업 그룹을 연결합니다.
- 이메일/SMS 및 웹훅 수신기가 있는 작업 그룹(microsoft.insights/actionGroups)을 정의합니다. 환경별 라우팅을 위해 주소와 엔드포인트를 매개변수화합니다.
확장 가능한 배포를 위해 조건(conditions)과 복사 루프(copy loops)를 채택합니다(예: 리소스 ID 집합에 진단 설정 적용). resourceId, subscriptionResourceId, reference, concat, guid와 같은 ARM 함수를 사용하여 동적 참조와 안정적인 이름을 구축합니다. ARM 또는 App Service 구성 리소스를 통해 제공되는 앱 설정에서 역할 이름 규칙과 샘플링을 중앙 집중화하여 서비스 전반에 걸쳐 원격 분석 구성을 일관되게 유지합니다.
실제 문제 시나리오
Adobe는 Azure App Service API와 AKS 마이크로서비스를 기반으로 구축된 새로운 다중 리전 미디어 처리 파이프라인에 대한 엔드투엔드 관찰성(observability)이 필요합니다. 이들은 지연 시간 저하의 신속한 감지, 서비스 전반에 걸친 분산 추적, 퍼블릭 엔드포인트에 대한 사전 예방적 가용성 확인, 그리고 IaC(Infrastructure-as-Code) 반복성을 갖춘 온콜(on-call) 시스템으로의 자동화된 인시던트 라우팅을 요구합니다.
- 연결 문자열을 사용하여 Application Insights로 서비스 계측
- 각 App Service 및 AKS 워크로드가 레거시 키 대신 Application Insights 연결 문자열을 사용하도록 구성하여, 올바른 수집 엔드포인트와 미래에도 사용 가능한 라우팅을 보장합니다. 서비스별로 클라우드 역할 이름을 설정하여 명확한 필터링과 맵을 활성화합니다. 핵심 API에서는 SDK 기반 계측을 선택하여 도메인 이벤트와 메트릭을 내보내고, 보조 서비스에는 코드리스 연결(codeless attach)을 활성화하여 적용 범위를 가속화합니다. 이유: 연결 문자열은 엔드포인트 유연성을 허용합니다. SDK는 사용자 지정 원격 분석을 제공하는 반면, 코드리스 연결은 도입 비용을 낮게 유지합니다.
- 분산 추적 및 종속성 추적 활성화
- 아웃바운드 HTTP 클라이언트와 Azure SDK가 W3C 추적 컨텍스트를 전파하도록 보장하고, KQL에서 operation_Id의 연속성을 확인합니다. 백그라운드 메시지 흐름(Service Bus)의 경우, SDK에 의해 상관관계가 주입되고 추출되는지 확인하고, 사용자 지정 헤더가 사용되는 경우 TelemetryInitializers로 보완합니다. 이유: 일관된 추적 전파는 마이크로서비스 전반에 걸쳐 정확한 엔드투엔드 지연 시간 및 장애 원인 분석을 가능하게 합니다.
- 가용성 테스트 및 사용자 지정 신서틱(synthetic) 검사 구현
- 여러 지역에서 퍼블릭 API에 대한 URL ping 테스트를 구성하고, 경량 상태 엔드포인트(health endpoint)에서 콘텐츠 일치 검사를 수행합니다. 인증된 흐름(토큰 획득 및 미디어 제출)의 경우, 워크플로를 호출하고 실행 위치 및 상세 메시지와 함께 TrackAvailability 결과를 내보내는 신서틱 클라이언트를 구현합니다. 이유: URL ping은 빠른 외부 검증을 제공합니다. TrackAvailability는 기본 ping을 넘어 복잡하고 인증된 비즈니스 흐름을 지원합니다.
- Log Analytics 작업 영역으로 데이터 중앙 집중화 및 플랫폼 로그 라우팅
- 작업 영역을 배포하고 App Services, AKS 컨트롤 플레인 로그, Key Vault, Storage에 대한 진단 설정을 구성하여 로그와 메트릭을 작업 영역으로 스트리밍합니다. 쿼리를 통합하기 위해 Application Insights 리소스가 작업 영역 기반인지 확인합니다. 이유: 단일 작업 영역은 서비스 간 KQL 쿼리를 가능하게 하여, 요청, 종속성, 플랫폼 로그를 조인하여 전체적인 조사를 할 수 있게 합니다.
- 작업 그룹을 사용한 메트릭 및 로그 경고 생성
- 동적 임계값을 사용하여 요청 기간 백분위수 및 위치별 가용성에 대한 메트릭 경고를 정의하고, 클라우드 역할 이름으로 분할합니다. 작업 이름별로 오류 급증을 감지하고 operation_Id에 대한 KQL 조인을 사용하여 종속성 실패와 연관시키는 예약된 쿼리 경고를 추가합니다. 이유: 메트릭 경고는 거의 실시간에 가까운 감지를 제공하고, 로그 경고는 단순한 임계값으로 표현할 수 없는 복잡한 패턴을 포착합니다.
- 작업 그룹 및 웹훅을 통한 인시던트 대응 통합
- 서비스 소유자를 위한 이메일, 온콜(on-call) 리드를 위한 SMS, 그리고 Common Alert Schema를 사용하여 Adobe의 인시던트 플랫폼으로 보내는 보안 웹훅으로 작업 그룹을 구성합니다. 최근 KQL 쿼리 결과와 토폴로지 메타데이터로 페이로드를 보강하기 위해 Logic App 수신기를 추가합니다. 이유: 다중 채널 알림은 평균 해결 시간(MTTA)을 줄여줍니다. 웹훅과 Logic App은 자동화된 티켓팅과 풍부한 컨텍스트를 포함한 인시던트 처리를 가능하게 합니다.
- ARM 템플릿으로 모니터링 코드화
- Log Analytics 작업 영역, Application Insights(작업 영역 기반), 진단 설정, 메트릭 경고, 예약된 쿼리 경고, 작업 그룹을 배포하는 ARM 템플릿을 작성합니다. 환경 이름, 리전, 연락처를 매개변수화하고, 후속 앱 구성을 위해 Application Insights connectionString을 출력합니다. 팀 소유 모듈(플랫폼 vs. 앱)에는 연결된 템플릿을 사용합니다. 이유: IaC(Infrastructure-as-Code)는 개발, 스테이징, 프로덕션 환경 전반에 걸쳐 일관되고 반복 가능한 관찰성을 보장하고 CI/CD를 지원합니다.
- KQL 대시보드로 유효성 검사
- KQL을 사용하여 서비스별 지연 시간(bin 및 역할별 백분위수 요약), 종속성 대상에 조인된 오류율, 위치별 신서틱 가용성을 요약하는 대시보드를 구축합니다. 시간 범위 필터와 추적 및 예외에 대한 드릴스루(drill-through)를 통합합니다. 이유: KQL은 엔지니어링 및 운영팀을 위해 유연한 분석과 실행 가능한 시각화를 제공합니다.
이 문제 연습하기 → · ExamRoll.io에서 시간 제한 연습 →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
시험 합격하기 →