Application Insights에서 .NET/.NET Core 및 Python 추적 로그 검색

ILogger, NLog, log4Net 또는 System.Diagnostics.Trace의 ASP.NET/ASP.NET Core 애플리케이션에 대한 진단 추적 로그를 Azure Application Insights로 보냅니다. Python 애플리케이션의 경우 Azure Monitor용 OpenCensus Python에서 AzureLogHandler를 사용하여 진단 추적 로그를 보냅니다. 그런 다음, 탐색하고 검색할 수 있습니다. 이러한 로그는 애플리케이션의 다른 로그 파일과 병합됩니다. 이를 통해 각 사용자 요청과 연결된 추적을 식별하고 다른 이벤트 및 예외 보고서와 상관 관계를 지정할 수 있습니다.

참고 항목

로그 캡처 모듈이 필요한가요? 타사 로거에 대한 유용한 어댑터입니다. 그러나 아직 NLog, log4Net 또는 System.Diagnostics.Trace를 사용하지 않는 경우 Application Insights TrackTrace()를 직접 호출하는 것이 좋습니다.

참고 항목

2025년 3월 31일에 계측 키 수집에 대한 지원이 종료됩니다. 계측 키 수집은 계속 작동하지만 더 이상 기능에 대한 업데이트 또는 지원을 제공하지 않습니다. 연결 문자열로 전환하여 새로운 기능을 활용합니다.

앱에 대한 로깅 설치

프로젝트에 선택한 로깅 프레임워크를 설치합니다. 그러면 app.config 또는 web.config에 항목이 생성됩니다.

 <configuration>
  <system.diagnostics>
    <trace>
      <listeners>
        <add name="myAppInsightsListener" type="Microsoft.ApplicationInsights.TraceListener.ApplicationInsightsTraceListener, Microsoft.ApplicationInsights.TraceListener" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

로그를 수집하도록 Application Insights 구성

아직 수행하지 않았고 로그 수집기를 포함하는 옵션이 있는 경우 프로젝트에 Application Insights를 추가합니다.

또는 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하여 Application Insights를 구성합니다. 추적 컬렉션 구성 옵션을 선택합니다.

참고 항목

Application Insights 메뉴 또는 로그 수집기 옵션이 없습니까? 문제 해결을 시도해 보세요.

수동 설치

프로젝트 형식이 Application Insights 설치 관리자에서 지원되지 않는 경우 이 방법을 사용합니다. 예를 들어 Windows 데스크톱 프로젝트인 경우입니다.

  1. log4net 또는 NLog를 사용하려는 경우 프로젝트에 설치합니다.

  2. 솔루션 탐색기에서 마우스 오른쪽 단추로 프로젝트를 클릭하고, NuGet 패키지 관리를 선택합니다.

  3. Application Insights를 검색합니다.

  4. 다음 패키지 중 하나를 선택합니다.

NuGet 패키지는 필요한 어셈블리를 설치하고 해당하는 경우 web.config 또는 app.config를 수정합니다.

ILogger

콘솔 애플리케이션 및 ASP.NET Core와 함께 Application Insights ILogger 구현을 사용하는 예제는 ApplicationInsightsLoggerProvider for .NET Core ILogger logs를 참조하세요.

진단 로그 호출 삽입

System.Diagnostics.Trace를 사용하는 경우 일반적인 호출 방법은 다음과 같습니다.

System.Diagnostics.Trace.TraceWarning("Slow response - database01");

log4net 또는 NLog를 원하는 경우 다음을 사용합니다.

    logger.Warn("Slow response - database01");

EventSource 이벤트 사용

Application Insights에 추적으로 보낼 System.Diagnostics.Tracing.EventSource 이벤트를 구성할 수 있습니다. 먼저 Microsoft.ApplicationInsights.EventSourceListener NuGet 패키지를 설치합니다. 그런 다음 ApplicationInsights.config 파일의 TelemetryModules 섹션을 편집합니다.

    <Add Type="Microsoft.ApplicationInsights.EventSourceListener.EventSourceTelemetryModule, Microsoft.ApplicationInsights.EventSourceListener">
      <Sources>
        <Add Name="MyCompany" Level="Verbose" />
      </Sources>
    </Add>

각 원본에 대해 다음 매개 변수를 설정할 수 있습니다.

  • Name은 수집할 EventSource의 이름을 지정합니다.
  • Level은 수집할 로깅 수준으로 Critical, Error, Informational, LogAlways, Verbose 또는 Warning을 지정합니다.
  • Keywords(선택 사항)는 사용할 키워드 정수 값 조합을 지정합니다.

DiagnosticSource 이벤트 사용

Application Insights에 추적으로 보낼 System.Diagnostics.DiagnosticSource 이벤트를 구성할 수 있습니다. 먼저 Microsoft.ApplicationInsights.DiagnosticSourceListener NuGet 패키지를 설치합니다. 그런 다음, ApplicationInsights.config 파일의 "TelemetryModules" 섹션을 편집합니다.

    <Add Type="Microsoft.ApplicationInsights.DiagnosticSourceListener.DiagnosticSourceTelemetryModule, Microsoft.ApplicationInsights.DiagnosticSourceListener">
      <Sources>
        <Add Name="MyDiagnosticSourceName" />
      </Sources>
    </Add>

추적하려는 각 진단 소스에 대해 Name 특성 집합이 포함된 항목을 진단 소스 이름에 추가합니다.

ETW 이벤트 사용

추적으로 Application Insights에 전송될 ETW(Windows용 이벤트 추적) 이벤트를 구성할 수 있습니다. 먼저 Microsoft.ApplicationInsights.EtwCollector NuGet 패키지를 설치합니다. 그런 다음, ApplicationInsights.config 파일의 "TelemetryModules" 섹션을 편집합니다.

참고 항목

ETW 이벤트는 SDK를 호스트하는 프로세스가 성능 로그 사용자 또는 관리자의 구성원인 ID에서 실행되는 경우에만 수집할 수 있습니다.

    <Add Type="Microsoft.ApplicationInsights.EtwCollector.EtwCollectorTelemetryModule, Microsoft.ApplicationInsights.EtwCollector">
      <Sources>
        <Add ProviderName="MyCompanyEventSourceName" Level="Verbose" />
      </Sources>
    </Add>

각 원본에 대해 다음 매개 변수를 설정할 수 있습니다.

  • ProviderName은 수집할 ETW 공급자의 이름입니다.
  • ProviderGuid는 수집할 ETW 공급자의 GUID를 지정합니다. ProviderName 대신 사용할 수 있습니다.
  • Level은 수집할 로깅 수준을 설정합니다. Critical, Error, Informational, LogAlways, Verbose 또는 Warning일 수 있습니다.
  • Keywords(선택 사항)는 사용할 키워드 정수 값 조합을 설정합니다.

직접 추적 API 사용

Application Insights 추적 API를 직접 호출할 수 있습니다. 로깅 어댑터는 이 API를 사용합니다.

예시:

TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
var telemetryClient = new TelemetryClient(configuration);
telemetryClient.TrackTrace("Slow response - database01");

TrackTrace의 장점은 비교적 긴 데이터를 메시지에 넣을 수 있다는 것입니다. 예를 들어, POST 데이터를 인코딩할 수 있습니다.

메시지에 심각도 수준을 추가할 수도 있습니다. 또한 다른 원격 분석처럼, 다른 추적 세트에 대해 필터링 또는 검색하는 데 도움이 되는 속성 값을 추가할 수 있습니다. 예시:

TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
var telemetryClient = new TelemetryClient(configuration);
telemetryClient.TrackTrace("Slow database response",
                            SeverityLevel.Warning,
                            new Dictionary<string, string> { { "database", "db.ID" } });

이제 트랜잭션 검색에서 특정 데이터베이스와 관련된 특정 심각도 수준의 모든 메시지를 쉽게 필터링할 수 있습니다.

OpenCensus Python용 AzureLogHandler

Azure Monitor 로그 처리기를 사용하여 Python 로그를 Azure Monitor로 내보낼 수 있습니다.

Azure Monitor에 대한 OpenCensus Python SDK를 사용하여 애플리케이션을 계측합니다.

이 예제에서는 Azure Monitor에 경고 수준 로그를 보내는 방법을 보여 줍니다.

import logging

from opencensus.ext.azure.log_exporter import AzureLogHandler

logger = logging.getLogger(__name__)
logger.addHandler(AzureLogHandler(connection_string='InstrumentationKey=<your-instrumentation_key-here>'))
logger.warning('Hello, World!')

로그 탐색

디버그 모드에서 앱을 실행하거나 라이브로 배포합니다.

Application Insights 포털의 앱 개요 창에서 트랜잭션 검색을 선택합니다.

예를 들어 다음을 수행할 수 있습니다.

  • 특정 속성이 있는 로그 추적 또는 항목을 필터링합니다.
  • 특정 항목을 자세히 검사합니다.
  • 동일한 사용자 요청에 관련된 다른 시스템 로그 데이터를 찾습니다(동일한 작업 ID가 있음).
  • 페이지의 구성을 즐겨찾기로 저장합니다.

참고 항목

애플리케이션이 대량의 데이터를 전송하고 ASP.NET 버전 2.0.0-beta3 또는 그 이상에 대해 Application Insights SDK를 사용하는 경우 적응 샘플링 기능이 작동하여 원격 분석의 일부만 보낼 수 있습니다. 샘플링에 대해 자세히 알아봅니다.

문제 해결

일반적인 질문에 대한 답변을 찾습니다.

지연된 원격 분석, 오버로드된 네트워크 및 비효율적인 전송의 원인은 무엇인가요?

System.Diagnostics.Tracing에는 자동 플러시 기능이 있습니다. 이 기능으로 인해 SDK가 바람직하지 않은 모든 원격 분석 항목과 함께 플러시되며 지연된 원격 분석, 네트워크 과부하 및 비효율적인 전송과 같은 로깅 어댑터 문제를 일으킬 수 있습니다.

Java의 경우 이 작업을 어떻게 수행하나요?

권장되는 Java 코드리스 계측에서는 로그가 즉시 수집됩니다. Java 3.0 에이전트를 사용합니다.

Application Insights Java 에이전트는 Log4j, Logback 및 java.util.logging에서 즉시 로그를 수집합니다.

프로젝트 상황에 맞는 메뉴에 Application Insights 옵션이 없는 이유는 무엇인가요?

  • Developer Analytics Tools가 개발 머신에 설치되어 있는지 확인합니다. Visual Studio에서 도구>확장 및 업데이트로 이동하여 Developer Analytics Tools를 찾습니다. 설치됨 탭에 없는 경우 온라인 탭을 열고 설치합니다.
  • 이 프로젝트 유형은 Developer Analytics Tools에서 지원하지 않는 유형일 수 있습니다. 수동 설치를 사용합니다.

구성 도구에 로그 어댑터 옵션이 없는 이유는 무엇인가요?

  • 먼저 로깅 프레임워크를 설치합니다.
  • System.Diagnostics.Trace를 사용하는 경우 web.config에서 구성했는지 확인합니다.
  • 최신 버전의 Application Insights가 설치되어 있는지 확인합니다. Visual Studio에서 도구>확장 및 업데이트로 이동하여 업데이트 탭을 엽니다. Developer Analytics Tools가 있으면 선택하여 업데이트합니다.

"계측 키는 비워 둘 수 없습니다." 오류 메시지가 표시되는 이유는 무엇인가요?

Application Insights를 설치하지 않고 로깅 어댑터 NuGet 패키지를 설치했을 수 있습니다. 솔루션 탐색기에서 ApplicationInsights.config를 마우스 오른쪽 단추로 클릭하고, Application Insights 업데이트를 선택합니다. Azure에 로그인하고 Application Insights 리소스를 만들거나 기존 리소스를 다시 사용하라는 메시지가 표시됩니다. 이렇게 하면 문제가 해결됩니다.

모든 이벤트와 요청이 파이프라인을 통과할 때까지 시간이 걸릴 수 있습니다.

얼마나 많은 데이터가 보존되나요?

여러 가지 요인이 보관되는 데이터의 양에 영향을 줍니다. 자세한 내용은 고객 이벤트 메트릭 페이지의 제한 섹션을 참조하세요.

예상한 일부 로그 항목이 표시되지 않는 이유는 무엇인가요?

애플리케이션이 대량의 데이터를 전송하고 ASP.NET 버전 2.0.0-beta3 또는 그 이상에 대해 Application Insights SDK를 사용 중일 수 있습니다. 이 경우 적응 샘플링 기능이 작동하여 원격 분석의 일부만 보낼 수 있습니다. 샘플링에 대해 자세히 알아봅니다.

다음 단계