Azure Monitor 문제 및 조사는 Azure Copilot Observability Agent를 사용하여 Application Insights 원격 분석을 분석하고 애플리케이션 및 인프라에서 문제의 잠재적 원인을 식별합니다. 조사의 정확도는 애플리케이션이 전체 원격 분석을 내보내고 상관 관계 필드를 유지하며 충분한 서비스 및 리소스 컨텍스트를 포함하는지 여부에 따라 달라집니다.
이 문서에서는 Application Insights 및 Azure Monitor OpenTelemetry 원격 분석을 구성하는 데 도움이 되는 모범 사례를 설명합니다. 이러한 모범 사례를 따르면 Azure Copilot Observability Agent는 조사가 정확하고 올바르게 범위가 지정되고 실행 가능한지 확인하는 데 도움이 될 수 있습니다.
이 가이드를 사용하는 방법
다음 순서대로 사례를 적용합니다.
이후 사례는 이전 사례에 따라 달라집니다. 필수 구성 요소를 건너뛰면 조사 범위와 정확도가 줄어듭니다.
1단계: 필요한 원격 분석 신호 수집
Observability Agent는 포괄적인 원격 분석 데이터를 사용하여 효과적인 조사를 수행합니다. 먼저 애플리케이션 및 모든 지원 구성 요소에 대한 데이터 수집을 사용하도록 설정합니다.
모든 리소스에서 리소스 로그 사용
리소스 로그는 Azure 리소스가 작동하는 동안 내보낸 이벤트를 캡처합니다. 서비스별 활동, 플랫폼 이벤트, 구성 변경 내용 및 실패 세부 정보를 표시하여 메트릭 및 애플리케이션 원격 분석을 보완하여 Observability Agent가 인프라 및 Azure 플랫폼 계층에서 발생한 일을 이해하는 데 도움이 됩니다. 하지만 에이전트는 기본적으로 리소스 로그를 수집하지 않으므로 애플리케이션을 지원하는 각 리소스에 대해 사용하도록 설정해야 합니다.
Azure Monitor 진단 설정을 참조하세요.
요청, 종속성 및 예외 캡처
Application Insights가 이러한 원격 분석 유형을 수집하고 표시하도록 합니다. Observability Agent는 요청, 종속성 및 예외에서 상위 오류 이벤트를 분석합니다. 이러한 원격 분석 유형을 놓친 경우 조사 결과가 불완전할 수 있습니다.
요청 – ASP.NET 및 ASP.NET Core와 같은 대부분의 Application Insights SDK는 들어오는 HTTP 요청을 자동으로 수집합니다. 요청 원격 분석에는 조사의 주요 진입점인 기간, 응답 코드, 성공 또는 실패 및 작업 컨텍스트가 포함됩니다.
종속성 – HTTP 엔드포인트, SQL 데이터베이스 및 스토리지 계정과 같은 외부 서비스에 대한 아웃바운드 호출을 종속성 원격 분석으로 수집해야 합니다. 대부분의 SDK는 종속성 추적 모듈을 사용하도록 설정할 때 일반적인 종속성을 자동으로 수집합니다. 종속성이 자동으로 수집되지 않는 환경(예: 일부 Python 워크로드)에서는 원격 분석 클라이언트 API를 사용하여 수동으로 추적합니다. 예를 들어
track_dependencyPython 또는TrackDependency.NET에서 사용할 수 있습니다.예외 – 대부분의 구성은 처리되지 않은 예외를 자동으로 수집합니다. 애플리케이션이 예외를 포착할 경우,
TrackException와 같은 예외 추적 API를 호출하여 명시적으로 로깅하거나, 기록 후 다시 던집니다.
처리되지 않은 예외가 전파되도록 허용
예외를 로깅하지 않고 숨기지 마세요. 예외를 기록하지 않으면 Observability Agent는 예외를 관찰할 수 없으며 조사에 포함되지 않습니다. 전역 또는 중앙 집중식 오류 처리를 사용하는 경우 예외를 처리하기 전에 기록해야 합니다.
예외는 다음 중 하나여야 합니다.
- Application Insights SDK 또는 OpenTelemetry 파이프라인에 전파하거나
- 예외 추적 API를 호출하여 명시적으로 추적
최신 Application Insights SDK 또는 OpenTelemetry 배포판 사용
지원되는 최신 Application Insights SDK 또는 Azure Monitor OpenTelemetry 배포를 사용합니다. 새 애플리케이션의 경우 OpenTelemetry 기반 계측을 사용합니다. 이전 SDK 버전은 오래된 모델 또는 비효율적인 컬렉션 메서드를 사용하여 원격 분석을 보낼 수 있습니다.
최신 버전은 다음을 제공합니다.
- 조사에 사용되는 최신 원격 분석 스키마 지원
- 자동 종속성 및 컨텍스트 수집 개선
- 성능 및 정확성 수정
인프라 모니터링 활성화
애플리케이션만 모니터링하는 것만으로는 충분하지 않은 경우가 많습니다. Observability Agent는 워크로드를 호스트하는 가상 머신 또는 Kubernetes 클러스터의 인프라 수준 신호도 있는 경우 더 나은 조사를 제공할 수 있습니다.
가상 머신
가상 머신에서 실행되는 워크로드의 경우 에이전트가 CPU 압력, 메모리 압력, 디스크 병목 상태, 확장 오류 및 게스트 OS 이벤트와 같은 호스트 수준 조건과 애플리케이션 증상의 상관 관계를 지정할 수 있도록 모니터링을 사용하도록 설정합니다.
- 모니터링을 사용하도록 설정하여 Azure Monitor 에이전트를 설치하고 게스트 메트릭을 수집합니다. Azure 가상 머신에 대한 향상된 모니터링을 지원합니다.
- 가상 머신에서 애플리케이션, 서비스 및 운영 체제 구성 요소에 대한 게스트 로그를 수집합니다. Azure Monitor를 사용하여 가상 머신에서 게스트 로그 데이터 수집을 참조하세요.
Kubernetes 클러스터
AKS(Azure Kubernetes Service) 실행되는 워크로드의 경우 에이전트가 애플리케이션 오류를 Pod, 노드, 네임스페이스 및 클러스터 수준 조건에 연결할 수 있도록 클러스터 모니터링을 사용하도록 설정합니다.
- 모니터링을 사용하도록 설정하여 Azure Monitor 에이전트를 설치하고 클러스터에서 메트릭 및 로그를 수집합니다. Azure Monitor에서 Kubernetes 클러스터에 대한 모니터링 사용을(를) 참조하세요.
2단계: 서비스 및 리소스 컨텍스트 추가
서비스 및 리소스 컨텍스트를 사용하면 Observability Agent가 문제가 발생하는 위치를 확인하고 관련 구성 요소의 범위를 자동으로 지정할 수 있습니다.
각 서비스에 대한 클라우드 역할 이름 설정
각 마이크로 서비스, API, 작업자 또는 함수에 의미 있는 클라우드 역할 이름을 할당합니다.
클라우드 역할 이름은 원격 분석의 논리적 원본을 식별하고 애플리케이션 맵 및 조사 결과에 표시됩니다. SDK는 기본적으로 어셈블리 또는 서비스 메타데이터에서 역할 이름을 파생시킬 수 있습니다. 아키텍처를 반영하는 이름으로 이러한 기본값을 재정의하고 일관되게 적용합니다. 다른 언어로 구성을 설정하는 방법에 대한 자세한 내용은 클라우드 역할 이름 및 클라우드 역할 인스턴스 설정을 참조하세요.
자동 범위 지정용 리소스 컨텍스트 포함
애플리케이션이 상호 작용하는 Azure 및 외부 리소스에 대한 식별자를 포함합니다.
종속성 원격 분석은 일반적으로 데이터베이스 이름 또는 서비스 URL과 같은 대상 엔드포인트를 자동으로 캡처합니다. 이 데이터를 사용할 수 있도록 Application Insights 종속성 추적이 사용하도록 설정되어 있는지 확인합니다.
사용자 지정 원격 분석의 경우 리소스 식별자를 명시적으로 포함합니다. 리소스 컨텍스트를 사용하면 Observability Agent가 관련 서비스, 데이터베이스 또는 인프라 구성 요소에 대한 조사를 자동으로 확장할 수 있습니다.
OpenTelemetry는 기본적으로 리소스 컨텍스트를 채우지 않습니다. 다음과 같은 표준 의미 체계 특성을 내보내도록 리소스 탐지기를 구성합니다 .
service.namecloud.resource_idk8s.cluster.name
Kubernetes 클러스터 컨텍스트 캡처
AKS(Azure Kubernetes Service)에서 실행되는 애플리케이션의 경우 클러스터 수준 메타데이터를 캡처합니다.
지원되는 Java 및 Node.js 워크로드에 대해 AKS 자동 계측(미리보기)을 사용하여 클러스터, 네임스페이스, Pod 및 노드 정보를 활용해 원격 분석을 강화합니다.
다른 런타임의 경우 SDK 확장, 원격 분석 이니셜라이저 또는 Kubernetes용 Application Insights 라이브러리를 사용하여 Kubernetes 메타데이터를 추가합니다.
클러스터 컨텍스트가 없으면 조사를 통해 애플리케이션 오류를 Pod 다시 시작, 노드 문제 또는 기타 클러스터 수준 이벤트에 연결할 수 없습니다.
3단계: 안전한 원격 분석 디자인 규칙 준수
원격 분석 무결성 및 상관 관계를 유지하려면 다음 규칙을 따릅니다.
일관되고 예측 가능한 리소스 이름 지정 사용
Azure 리소스 및 논리 구성 요소에 대해 일관된 명명 규칙을 적용합니다.
명확하고 예측 가능한 이름을 사용하면 조사 요약을 보다 쉽게 이해하고 관련 리소스의 상관 관계를 파악할 수 있습니다. Azure 리소스, 클라우드 역할 이름 및 원격 분석 속성에서 일관된 이름을 사용합니다. 자세한 내용은 이름 지정 규칙 정의를 참조하세요.
기본 제공 원격 분석 속성을 재정의하지 마세요.
다음을 포함하여 표준 원격 분석 필드를 재정의하지 마세요.
OperationIdOperationNameUserIdSessionIdcloud_RoleName
표준 원격 분석 필드 목록은 Application Insights 데이터 모델을 참조하세요.
이러한 필드는 상관 관계 및 분석을 위해 예약되어 있습니다. 이를 재정의하면 분산 추적과 조사 정확도가 손상됩니다.
도메인별 또는 비즈니스 데이터를 연결해야 하는 경우 대신 사용자 지정 차원으로 추가합니다.
4단계: 중요한 워크플로 계측
이러한 사례는 조사 깊이와 설명 가능성을 높입니다.
사용자 정의 텔레메트리를 통해 중요한 작업을 계측합니다.
시스템은 모든 중요한 워크플로를 자동으로 수집하지 않습니다.
사용:
- 중요한 비즈니스 또는 기능적 중요 시점을 기록하기 위한 사용자 지정 이벤트(
TrackEvent)입니다. - 큐 처리, 일괄 처리 작업 또는 예약된 작업과 같은 장기 실행 또는 비동기 워크플로를 추적하는 사용자 지정 작업(
StartOperation/StopOperation)입니다.
사용자 지정 작업은 기간, 성공 또는 실패, 상관 관계 종속성 및 예외가 있는 Azure Monitor에 표시됩니다. Observability Agent는 요청 원격 분석과 동일한 방식으로 이러한 작업을 분석합니다. 사용자 지정 작업을 계측하는 방법에 대한 자세한 내용은 Application Insights를 사용하여 사용자 지정 작업 추적을 참조하세요.
릴리스 주석을 활성화합니다.
릴리스 주석을 사용하여 배포, 구성 변경, 기능 플래그 업데이트 및 인프라 변경 내용을 표시합니다.
릴리스 주석은 조사 타임라인에 시간 기반 컨텍스트를 추가하고 문제가 변경 내용과 일치하는지 여부를 확인하는 데 도움이 됩니다. Azure Pipelines는 주석을 자동으로 만들 수 있습니다. PowerShell 을 사용하여 주석을 수동으로 만들 수도 있습니다.
애플리케이션 로그 수집 및 추적
.NET 애플리케이션용 Application Insights에서 추적 로그 수집을 사용하도록 설정합니다. log4net 또는 NLog와 같은 ILogger로깅 프레임워크와 통합할 수 있습니다. 자세한 내용은 Application Insights에서 .NET 추적 로그 탐색을 참조하세요.
수집된 로그는 traces 테이블에 표시되고 조사 중에 원격 분석과 함께 분석됩니다. 적절한 세부 정보 표시 수준에서 로그를 수집하고 과도한 노이즈를 방지합니다.
Java, Python 및 최신 .NET 애플리케이션과 같은 다른 언어의 경우 Azure Monitor 내보내기 또는 OpenTelemetry 로깅 통합을 구성합니다. 자세한 내용은 .NET, Node.js, Python 및 Java 애플리케이션에 대한 Azure Monitor OpenTelemetry 사용을 참조하세요.
가용성 테스트 만들기
중요한 엔드포인트에 대한 Application Insights 가용성 테스트를 설정합니다.
표준 가용성 테스트를 사용하여 사전에 엔드포인트를 ping하고, 응답의 유효성을 검사하고, 오류에 대한 경고를 트리거합니다. 가용성 경고는 Azure Monitor 조사와 통합되며 엔드포인트를 사용할 수 없게 되면 자동으로 분석을 시작할 수 있습니다. 자세한 내용은 가용성 테스트 만들기를 참조하세요.