Python에서 OpenTelemetry 문제 해결
이 문서에서는 Python에서 OpenTelemetry 문제를 해결하는 방법을 설명합니다.
문제 해결 검사 목록
1단계: 진단 로깅 사용
Microsoft Azure Monitor 내보내기는 내부 로깅에 Python 표준 로깅 라이브러리 를 사용합니다. OpenTelemetry API 및 Azure Monitor 내보내기 로그에는 불규칙한 활동에 대해 또는 ERROR
의 WARNING
심각도 수준이 할당됩니다.
INFO
심각도 수준은 일반 또는 성공적인 작업에 사용됩니다.
기본적으로 Python 로깅 라이브러리는 심각도 수준을 WARNING
로 설정합니다. 따라서 이 심각도 설정에서 로그를 보려면 심각도 수준을 변경해야 합니다. 다음 예제 코드는 모든 심각도 수준의 로그를 콘솔 및 파일에 출력하는 방법을 보여 줍니다.
...
import logging
logging.basicConfig(format = "%(asctime)s:%(levelname)s:%(message)s", level = logging.DEBUG)
logger = logging.getLogger(__name__)
file = logging.FileHandler("example.log")
stream = logging.StreamHandler()
logger.addHandler(file)
logger.addHandler(stream)
...
2단계: 애플리케이션 호스트와 수집 서비스 간의 연결 테스트
Application Insights SDK 및 에이전트는 원격 분석을 전송하여 수집 엔드포인트에서 REST 호출로 수집됩니다. 웹 서버 또는 애플리케이션 호스트 컴퓨터에서 수집 서비스 엔드포인트로의 연결을 테스트하려면 PowerShell의 cURL 명령 또는 원시 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
호출 간에 공급자를 수동으로 종료해 봅니다. 각 공급자를 종료하려면 다음 코드와 같이 각 현재 미터, 추적기 및 로거 공급자에 대한 종료 호출을 실행합니다.
get_meter_provider().shutdown()
get_tracer_provider().shutdown()
get_logger_provider().shutdown()
Azure 통합 문서 및 Jupyter Notebooks
Azure 통합 문서 및 Jupyter Notebook은 내보내기 프로세스를 백그라운드에서 계속 실행할 수 있습니다. 중복된 원격 분석을 방지하려면 에 대해 더 많은 호출을 하기 전에 캐시를 configure_azure_monitor
지우세요.
4단계: Flask 요청 데이터가 수집되었는지 확인
Flask 애플리케이션을 구현하는 경우 Python용 Azure Monitor OpenTelemetry 배포판 클라이언트 라이브러리를 사용하는 동안 Application Insights에서 요청 테이블 데이터를 수집할 수 없습니다. 선언을 올바르게 구성 import
하지 않으면 이 문제가 발생할 수 있습니다. Flask 라이브러리를 계측하기 위해 함수를 flask.Flask
configure_azure_monitor
호출하기 전에 웹 애플리케이션 프레임워크를 가져올 수 있습니다. 예를 들어 다음 코드는 Flask 앱을 계측하지 않습니다.
from azure.monitor.opentelemetry import configure_azure_monitor
from flask import Flask
configure_azure_monitor()
app = Flask(__name__)
대신 모듈 전체를 가져온 flask
다음 를 호출 configure_azure_monitor
하여 액세스하기 전에 flask.Flask
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__)
도움을 요청하십시오.
질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.