다음 섹션에서는 Azure Monitor Application Insights의 몇 가지 데이터 수집 기본 사항을 다룹니다.
계측 옵션
기본 수준에서 "계측"은 단순히 애플리케이션이 원격 분석을 캡처할 수 있도록 하는 것입니다.
애플리케이션을 계측하는 두 가지 방법이 있습니다.
자동 계측(autoinstrumentation)
수동 계측
자동 계측을 사용하면 애플리케이션 코드를 건드리지 않고도 구성을 통해 원격 분석 데이터를 수집할 수 있습니다. 좀 더 편리하지만 구성 가능성은 부족합니다. 또한 모든 언어에서 사용할 수 있는 것은 아닙니다. 자동 계측 지원 환경 및 언어를 참조하세요. 자동 계측을 사용할 수 있는 경우 Azure Monitor Application Insights를 사용하도록 설정하는 가장 쉬운 방법입니다.
팁
현재 자동 계측에서는 Microsoft Entra 인증을 사용할 수 없습니다. Microsoft Entra 인증이 필요한 경우 수동 계측을 사용해야 합니다.
수동 계측은 Application Insights 또는 OpenTelemetry API에 대한 코딩입니다. 사용자의 컨텍스트에서 일반적으로 애플리케이션에 언어별 SDK를 설치하는 것을 말합니다. 즉, 최신 패키지 버전에 대한 업데이트를 직접 관리해야 합니다. 자동 계측으로 기본적으로 캡처되지 않은 사용자 지정 종속성 호출 또는 API 호출을 수행해야 하는 경우 이 옵션을 사용할 수 있습니다. 수동 계측에는 두 가지 옵션이 있습니다.
OpenTelemetry를 향후 방향으로 보고 있지만 이전 SDK에서 데이터 수집을 중단할 계획은 없습니다. Azure OpenTelemetry Distro가 Application Insights SDK와 기능 패리티에 도달하기까지는 아직 갈 길이 멉니다. 대부분의 경우 고객은 꽤 오랫동안 Application Insights SDK를 사용하도록 선택합니다.
Important
"수동"은 원할 경우 가능하기는 하지만, 분산 추적의 범위를 정의하기 위해 반드시 복잡한 코드를 작성해야 한다는 의미는 아닙니다. Distros에 패키지된 계측 라이브러리를 사용하면 일반 프레임워크와 라이브러리에서 원격 분석 신호를 쉽게 캡처할 수 있습니다. 당사는 Azure Monitor OpenTelemetry Distro를 사용하는 고객이 이러한 신호를 사용할 수 있도록 OpenTelemetry를 사용하여 가장 자주 사용되는 Azure 서비스 SDK를 계측하기 위해 적극적으로 노력하고 있습니다.
원격 분석 유형
애플리케이션을 관찰하기 위해 수집된 데이터인 원격 분석은 세 가지 형식 또는 "핵심 요소"으로 나눌 수 있습니다.
분산 추적
메트릭
로그
완전한 가시성 스토리에는 세 가지 요소가 모두 포함되며, Application Insights는 이러한 요소를 데이터 모델을 핵심 요소로 하는 테이블로 세분화합니다. Application Insights SDK 또는 Azure Monitor OpenTelemetry Distro에는 Azure에서 애플리케이션 성능 모니터링을 지원하는 데 필요한 모든 것이 포함되어 있습니다. 패키지 자체는 무료로 설치할 수 있으며 Azure Monitor에서 수집한 데이터에 대해서만 비용을 지불합니다.
다음 두 가지 방법으로 Azure Monitor(또는 모든 공급업체)에 데이터를 보낼 수 있습니다.
직접 내보내기 사용
에이전트 사용
직접 내보내기는 애플리케이션 코드에서 진행 중인 원격 분석을 Azure Monitor의 수집 엔드포인트로 직접 보냅니다. 이 방법의 주요 이점은 온보딩 단순성입니다.
현재 사용 가능한 Application Insights SDK 및 Azure Monitor OpenTelemetry Distro는 직접 내보내기를 사용합니다.
참고 항목
OpenTelemetry-Collector에서 Azure Monitor의 위치는 OpenTelemetry FAQ를 참조하세요.
팁
샘플링 또는 추가 데이터 처리를 위해 OpenTelemetry-Collector를 사용하려는 경우 Azure Monitor에 기본 제공되는 동일한 기능을 가져올 수 있습니다. 작업 영역 기반 Application Insights로 마이그레이션한 고객은 수집 시간 변환의 이점을 활용할 수 있습니다. 사용하도록 설정하려면 자습서의 세부 정보를 따르고 진단 설정을 구성하는 방법을 보여 주는 단계를 건너뛰세요. 작업 영역 기반 Application Insights에서는 진단 설정이 이미 구성되어 있기 때문입니다. 전체 볼륨의 50% 미만을 필터링하는 경우 추가 비용이 발생하지 않습니다. 50% 이후에는 요금이 발생하지만 표준 GB당 요금보다 훨씬 저렴합니다.
OpenTelemetry
Microsoft는 원격 분석 계측의 향후로 OpenTelemetry를 채택하게 된 것을 기쁘게 생각합니다. 고객인 사용자는 공급업체 중립적 계측을 요청했으며 OpenTelemetry 커뮤니티와 협력하여 여러 언어에 걸쳐 일관된 API 및 SDK를 만들게 되어 기쁘게 생각합니다.
Microsoft는 이전에 자주 사용되는 두 개의 오픈 소스 원격 분석 프로젝트인 OpenCensus 및 OpenTracing의 프로젝트 이해 관계자와 협력하고 있습니다. 함께 단일 프로젝트인 OpenTelemetry를 만드는 데 도움을 주었습니다. OpenTelemetry에는 모든 주요 클라우드 및 APM(애플리케이션 성능 관리) 공급업체의 기여가 포함되며 CNCF(Cloud Native Computing Foundation) 내에 있습니다. Microsoft는 CNCF의 플레티넘 멤버입니다.
Azure Monitor 내보내기 도구는 내부 로깅을 위해 EventSource를 사용합니다. 내보내기 도구 로그는 OpenTelemetry-AzureMonitor-Exporter라는 원본을 선택하여 모든 EventListener에서 사용할 수 있습니다. 문제 해결 단계는 GitHub의 OpenTelemetry 문제 해결을 참조하세요.
2단계: 애플리케이션 호스트와 수집 서비스 간의 연결 테스트
Application Insights SDK 및 에이전트는 수집 엔드포인트에 대한 REST 호출로 수집하기 위해 원격 분석을 보냅니다. 웹 서버 또는 애플리케이션 호스트 컴퓨터에서 수집 서비스 엔드포인트까지의 연결을 테스트하려면 cURL 명령 또는 PowerShell의 원시 REST 요청을 사용합니다. 자세한 내용은 Azure Monitor Application Insights에서 누락된 애플리케이션 원격 분석 문제 해결을 참조하세요.
알려진 문제
다음 항목은 Azure Monitor OpenTelemetry 내보내기 도구에 대한 알려진 문제입니다.
종속성 원격 분석에서 작업 이름이 누락되었습니다. 작업 이름이 누락되면 오류가 발생하고 성능 탭 환경에 부정적인 영향을 미칩니다.
요청 및 종속성 원격 분석에서 디바이스 모델이 누락되었습니다. 누락된 디바이스 모델은 디바이스 코호트 분석에 부정적인 영향을 미칩니다.
1단계: 진단 로깅 사용
Azure Monitor 내보내기 도구는 내부 로깅을 위해 EventSource를 사용합니다. 내보내기 도구 로그는 OpenTelemetry-AzureMonitor-Exporter라는 원본을 선택하여 모든 EventListener에서 사용할 수 있습니다. 문제 해결 단계는 GitHub의 OpenTelemetry 문제 해결을 참조하세요.
2단계: 애플리케이션 호스트와 수집 서비스 간의 연결 테스트
Application Insights SDK 및 에이전트는 수집 엔드포인트에 대한 REST 호출로 수집하기 위해 원격 분석을 보냅니다. 웹 서버 또는 애플리케이션 호스트 컴퓨터에서 수집 서비스 엔드포인트까지의 연결을 테스트하려면 cURL 명령 또는 PowerShell의 원시 REST 요청을 사용합니다. 자세한 내용은 Azure Monitor Application Insights에서 누락된 애플리케이션 원격 분석 문제 해결을 참조하세요.
알려진 문제
다음 항목은 Azure Monitor OpenTelemetry 내보내기 도구에 대한 알려진 문제입니다.
종속성 원격 분석에서 작업 이름이 누락되었습니다. 작업 이름이 누락되면 오류가 발생하고 성능 탭 환경에 부정적인 영향을 미칩니다.
요청 및 종속성 원격 분석에서 디바이스 모델이 누락되었습니다. 누락된 디바이스 모델은 디바이스 코호트 분석에 부정적인 영향을 미칩니다.
Application Insights SDK 및 에이전트는 수집 엔드포인트에 대한 REST 호출로 수집하기 위해 원격 분석을 보냅니다. 웹 서버 또는 애플리케이션 호스트 컴퓨터에서 수집 서비스 엔드포인트까지의 연결을 테스트하려면 cURL 명령 또는 PowerShell의 원시 REST 요청을 사용합니다. 자세한 내용은 Azure Monitor Application Insights에서 누락된 애플리케이션 원격 분석 문제 해결을 참조하세요.
WARN c.a.m.a.s.OpenTelemetryVersionCheckRunner - The OpenTelemetry version is not compatible with the spring-cloud-azure-starter-monitor dependency.
The OpenTelemetry version should be <version>
이 경우 Spring Boot 시작의 OpenTelemetry 설명서에 따라 OpenTelemetry BOM을 가져와야 합니다.
2단계: 자가 진단 사용
예상대로 작동하지 않는 경우 DEBUG 수준에서 자가 진단을 사용하도록 설정하여 인사이트를 가져올 수 있습니다. 이렇게 하려면 APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_LEVEL 환경 변수를 사용하여 자가 진단 수준을 ERROR, WARN, INFO, DEBUG 또는 TRACE로 설정합니다.
Docker 컨테이너를 실행할 때 DEBUG 수준에서 자가 진단을 사용하도록 설정하려면 다음 명령을 실행합니다.
docker run -e APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_LEVEL=DEBUG <image-name>
참고 항목
그에 따라 <image-name>을 Docker 이미지 이름으로 바꿉니다.
타사 정보 고지 사항
이 문서에 나와 있는 다른 공급업체 제품은 Microsoft와 무관한 회사에서 제조한 것입니다. Microsoft는 이들 제품의 성능이나 안정성에 관하여 명시적이든 묵시적이든 어떠한 보증도 하지 않습니다.
1단계: 진단 로깅 사용
Azure Monitor 내보내기 도구는 내부 로그에 OpenTelemetry API 로거를 사용합니다. 로거를 사용하도록 설정하려면 다음 코드 조각을 실행합니다.
Application Insights SDK 및 에이전트는 수집 엔드포인트에 대한 REST 호출로 수집하기 위해 원격 분석을 보냅니다. 웹 서버 또는 애플리케이션 호스트 컴퓨터에서 수집 서비스 엔드포인트까지의 연결을 테스트하려면 cURL 명령 또는 PowerShell의 원시 REST 요청을 사용합니다. 자세한 내용은 Azure Monitor Application Insights에서 누락된 애플리케이션 원격 분석 문제 해결을 참조하세요.
알려진 문제
다음 항목은 Azure Monitor OpenTelemetry 내보내기 도구에 대한 알려진 문제입니다.
종속성 원격 분석에서 작업 이름이 누락되었습니다. 작업 이름이 누락되면 오류가 발생하고 성능 탭 환경에 부정적인 영향을 미칩니다.
요청 및 종속성 원격 분석에서 디바이스 모델이 누락되었습니다. 누락된 디바이스 모델은 디바이스 코호트 분석에 부정적인 영향을 미칩니다.
종속성 이름에서 데이터베이스 서버 이름이 누락되었습니다. 데이터베이스 서버 이름이 포함되지 않기 때문에 OpenTelemetry 내보내기 도구는 동일한 이름을 가진 테이블을 다른 서버에 잘못 집계합니다.
1단계: 진단 로깅 사용
Microsoft Azure Monitor 내보내기 도구는 내부 로깅을 위해 Python 표준 로깅 라이브러리를 사용합니다. OpenTelemetry API 및 Azure Monitor 내보내기 도구 로그에는 불규칙한 작업에 대해 심각도 수준 WARNING 또는 ERROR가 할당됩니다. INFO 심각도 수준은 일반 작업 또는 성공적인 작업에 사용됩니다.
기본적으로 Python 로깅 라이브러리는 심각도 수준을 WARNING으로 설정합니다. 따라서 이 심각도 설정에서 로그를 보려면 심각도 수준을 변경해야 합니다. 다음 코드 예에서는 모든 심각도 수준의 로그를 콘솔 및 파일로 출력하는 방법을 보여 줍니다.
Application Insights SDK 및 에이전트는 수집 엔드포인트에 대한 REST 호출로 수집하기 위해 원격 분석을 보냅니다. 웹 서버 또는 애플리케이션 호스트 컴퓨터에서 수집 서비스 엔드포인트까지의 연결을 테스트하려면 cURL 명령 또는 PowerShell의 원시 REST 요청을 사용합니다. 자세한 내용은 Azure Monitor Application Insights에서 누락된 애플리케이션 원격 분석 문제 해결을 참조하세요.
3단계: 중복 원격 분석 방지
프로세서 또는 내보내기 도구의 여러 인스턴스를 만드는 경우 중복 원격 분석이 자주 발생합니다. 각 원격 분석 핵심 요소(로그, 메트릭 및 분산 추적)에 대해 한 번에 하나의 내보내기 도구 및 프로세서만 실행해야 합니다.
다음 섹션에서는 원격 분석이 중복될 수 있는 시나리오를 설명합니다.
Azure Functions의 중복 추적 로그
Application Insights 내에서 각 추적 로그에 대한 한 쌍의 항목이 표시되면 아마도 다음 형식의 로깅 계측을 사용하도록 설정했을 것입니다.
Azure Functions의 네이티브 로깅 계측
배포 내의 azure-monitor-opentelemetry 로깅 계측
중복을 방지하려면 배포 로깅을 사용하지 않도록 설정하고 Azure Functions의 네이티브 로깅 계측을 사용하도록 설정된 상태로 둘 수 있습니다. 이렇게 하려면 OTEL_LOGS_EXPORTER 환경 변수를 None으로 설정합니다.
“Always On” Azure Functions의 중복 원격 분석
Azure Functions의 Always On 설정이 켜기로 설정된 경우 Azure Functions는 각 실행이 완료된 후에도 백그라운드에서 일부 프로세스를 계속 실행합니다. 예를 들어 매번 configure_azure_monitor를 호출하는 5분 타이머 함수가 있다고 가정해 보겠습니다. 20분 후에는 4개의 메트릭 내보내기 도구가 동시에 실행될 수 있습니다. 이 상황은 중복 메트릭 원격 분석의 원인일 수 있습니다.
이 상황에서는 Always On 설정을 끄기로 설정하거나 각 configure_azure_monitor 호출 사이에 공급자를 수동으로 종료해 보세요. 각 공급자를 종료하려면 다음 코드에 표시된 대로 각 현재 미터, 추적기, 로거 공급자에 대해 종료 호출을 실행합니다.
Azure 통합 문서 및 Jupyter Notebooks는 내보내기 도구 프로세스를 백그라운드에서 계속 실행할 수 있습니다. 중복 원격 분석을 방지하려면 configure_azure_monitor를 더 호출하기 전에 캐시를 지웁니다.
4단계: Flask 요청 데이터가 수집되었는지 확인
Flask 애플리케이션을 구현하는 경우 Python용 Azure Monitor OpenTelemetry Distro 클라이언트 라이브러리를 사용하는 동안 Application Insights에서 요청 테이블 데이터를 수집하지 못할 수 있습니다. 이 문제는 import 선언을 올바르게 구성하지 않은 경우 발생할 수 있습니다. Flask 라이브러리를 계측하기 위해 configure_azure_monitor 함수를 호출하기 전에 flask.Flask 웹 애플리케이션 프레임워크를 가져올 수 있습니다. 예를 들어 다음 코드는 Flask 앱을 성공적으로 계측하지 못합니다.
from azure.monitor.opentelemetry import configure_azure_monitor
from flask import Flask
configure_azure_monitor()
app = Flask(__name__)
대신, flask 모듈 전체를 가져온 다음, flask.Flask에 액세스하기 전에 Azure Monitor를 사용하도록 configure_azure_monitor를 호출하여 OpenTelemetry를 구성하는 것이 좋습니다.
from azure.monitor.opentelemetry import configure_azure_monitor
import flask
configure_azure_monitor()
app = flask.Flask(__name__)
또는 flask.Flask를 가져오기 전에 configure_azure_monitor를 호출할 수 있습니다.
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
from flask import Flask
app = Flask(__name__)