[AZ-204] Azure App Insight
Azure App Insight
Azure App Insight는 Log Analytics와 함께 Azure Monitor의 두 가지 구성요소 중 하나이며 APM(실시간 성능 모니터링) 기능을 제공한다. 이는 성능을 사전에 파악하고 사후 인시던트의 원인을 파악하는데 도움을 주며 추적 로깅 데이터를 수집 저장 분석 기능을 제공한다. 또한 로그에 대한 대상만 제공한다면 기존 로깅 프레임워크를 변경할 필요가 거의 없다.
Application Insight의 시작과 동작
만약 개발 중이라면 코드에 Application Insight를 추가할 수 있다. 이는 JVM등에 올라가 로그를 전송한다. 만약 런타임 중이라면 서버에서 웹앱을 계측하는데 이는 코드에 대한 변경이 필요 없다. 더 나아가 웹 페이지 계측, 모바일 앱 계측 뿐만 아닌 가용성 테스트도 가능하다. (정기적으로 ping)
이렇게 코드에 언어별 SDK를 설치해 Application Insight를 직접 설치하는 것을 수동 계측이라고 하며 코드를 건드리지 않고 로그를 수집하는 것을 자동 계측이라고 한다.
이렇게 수집된 로그는 Log Analytics에서 KQL 쿼리라는 것을 사용하여 세밀하게 분석되어 통합 로그 관리까지 이루어진다.
Azure Log Analytics는 다양한 신호 유형을 지원하는데 Metrics(시스템 리소스 사용량 분석), Logs(로그 데이터 기반 정보, Activity log(Azure 리소스 이벤트 기반 로그)를 제공한다.
Application Insight의 기능
일반적인 모니터링 솔루션의 진단 및 분석 기능 뿐만 아닌 분산 추적을 제공하는데 이는 여러 다양한 여러 서비스를 사용하는 요청 흐름을 추적하여 병목 현상 등을 발견하는데 도움을 준다. 또한 성능 문제가 발생하는 곳을 특정 조건에 따라 경고를 발생하기도 하여 통합된 Azure 시스템에 있어 큰 이점을 가진다.
가용성 테스트
전 세계의 지점에서 정기적인 간격으로 웹 요청을 보내 응답시간을 테스트하는 방식으로 테스트를 할 수 있다. 이러한 테스트는 리소스당 최대 100개의 가용성 테스트를 만들 수 있다.
이러한 테스트는 엑세스 가능한 HTTP와 HTTPS에 대해 작업하는데 서비스에 사용되는 REST API에도 테스트가 가능하다.
이러한 테스트는 세 가지의 가용성 테스트 시나리오가 존재한다.
표준 테스트
URL에 ping 테스트와 유사하게 가용성을 확인하는 방식으로 엔드포인트가 응답하는것, TLS/SSL등의 인증서 유효성 검사, GET
, POST
등의 작동 확인을 포함한다.
사용자 지정 테스트
사용자가 TrackAvailablility()
를 사용하여 원하는 테스트를 진행한다.
URL ping 테스트 (2026년 중단 예정)
클래식한 방식이지만 이를 사용해 고급 기능과 결합 가능
OpenTelemetry
OpenTelemetry는 분산 시스템에서 추적, 메트릭 및 로그를 수집하는 오픈 소스 표준 Application과 외부 서비스 간의 상관관계를 유지하기 위해 Context Propagation(문맥 전파)를 사용함 추가적으로 추적과 관련없는 메타 데이터를 사용하기 위해 CorrelationContext도 사용함
Context Propagation(상관관계 전파)란?
요청(request)와 작업(task)이 여러 서비스 간에 오가면서 어떠한 요청이 같은 트랜잭션인지 식별할 수 있는 데이터 이걸 OpenTelemetry는 Text Context를 통해 상관관계를 유지
Text Context는 TraceId(트랜잭션 ID), SpanId(작업 ID), TraceFlags(샘플링 상태)
이걸 활용하여 A가 B에게 요청을 보냈다면 B는 header를 읽어 기존 TraceID와 SpanID와 연결 새로운 SpanID를 생성하여 회신한다. 이러한 과정을 Applcation Insight는 관측
데이터 수집
Sampling Application insight에서 수집하는 데이터량을 조절해 성능 최적화
Telemetry Channel 수집한 데이터를 Application insight에 전송하는 역할
Telemetry Processor 수집한 데이터를 전송하기 전에 필터링한다.
Telemetry Intializer 원격 데이터의 측정에 속성을 추가하거나 버전 번호를 붙인다.
데이터 모델
Application Insights Dependency 외부 서비스나 리소스(DB, API)에 대한 의존선 추적으로 의존성에 대한 호출 결과를 기록한다. 주로 외부 서비스의 성능을 모니터링하는데 사용된다.
Application Insights Event 사용자 정의 이벤트를 기록하고 저장한다. 주로 정책 작업에 대한 실행 추적
Application Insights Trace 디버깅이나 로그 목적으로 텍스트 메세지를 저장하며 소스코드 단에서 발생하는 예외를 추적하는데 주로 사용된다.
Application Insights Metric 시스템 성능과 관련된 숫자 기반 데이터를 기록하면서 스케일링 요구사항을 모니터링한다.
어플리케이션 맵
어플리케이션 맵은 병목 현상과 실패 지점을 디버깅하는데 큰 도움을 주는 시각적 지표이다. 또한 어플리케이션의 구성요소 및 종속성을 나타내어 현재 성능과 이벤트의 분석 등 자세한 진단도 가능하게 한다.
이런 어플리케이션 맵은 주요 구성을 통해 전체적인 구조를 나타내는 구성 요소와 하나의 구성요소를 뜻하는 노드 그리고 이러한 노드들의 연결인 연결선을 통해 구성된다.
이런 구성요소의 노드를 식별하여 수동으로 설정 등을 재정의가 가능하다.
샘플링과 매트릭(Meteric)
Azure Meteric의 특징 실시간 데이터 수집과 구조화된 데이터를 구조화 시킨다.
샘플링 Insight에 많은 트래픽이 올 때 원격 데이터의 일부분만 전송하여 데이터 볼륨 감소 및 비용을 최적화 하는것
- Adaptive Sampling: 트래픽 양에 따른 동적 샘플링 비율
- Fixed-rate Sampling: 고정된 비율로 데이터 샘플링
이러한… 샘플링 된 데이터는 전체 데이터를 반영하지 못함 -> 정확도의 문제
표준 매트릭 Application Insight가 기본으로 제공하는 메트릭으로 샘플링을 기반으로 AP의 성능과 상태를 모니터링한다. 샘플링 비율에 따라 정확도가 달라질 수 있으며 높은 트래픽에서는 신뢰성이 떨어진다. ex) 사용자 지정 이벤트. 트랜잭션 추적
사전 집계된 표준 메트릭 샘플링 여부와 관계 없이 사전 집계된 모든 데이터를 기반으로 모니터링을 진행한다. ex) 요청 수, 서버 응답 시간, 실패비율
요약
이 장에서는 아래와 같은 내용을 학습했다.
- Application Insight의 작동 방법과 기능
- 모니터링을 위한 가용성 테스트 방법
- 어플리케이션 맵을 사용해 모니터링 및 구조를 파악하는법