Application Insights에서 종속성 추적

참고 항목

다음 설명서는 Application Insights 클래식 API를 사용합니다. Application Insights에 대한 장기 플랜은 OpenTelemetry를 사용하여 데이터를 수집하는 것입니다. 자세한 내용은 .NET, Node.js, Python 및 Java 애플리케이션에 대해 Azure Monitor OpenTelemetry 사용을 참조하세요.

종속성은 애플리케이션에서 호출하는 구성 요소로, 일반적으로 HTTP, 데이터베이스 또는 파일 시스템을 사용하여 호출되는 서비스입니다. Application Insights는 종속성 이름과 같은 정보와 함께 종속성 호출 기간 및 실패 여부를 측정합니다. 특정 종속성 호출을 조사하고 요청 및 예외와의 상관 관계를 지정할 수 있습니다.

자동으로 추적되는 종속성

.NET 및 .NET Core용 Application Insights SDK는 종속성을 자동으로 수집하는 원격 분석 모듈인 DependencyTrackingTelemetryModule과 함께 제공됩니다. 이 종속성 컬렉션은 연결된 공식 문서에 따라 구성된 경우 ASP.NETASP.NET Core 애플리케이션에 대해 자동으로 사용하도록 설정됩니다. DependencyTrackingTelemetryModule 모듈은 Microsoft.ApplicationInsights.DependencyCollector NuGet 패키지로 제공됩니다. Microsoft.ApplicationInsights.Web NuGet 패키지 또는 Microsoft.ApplicationInsights.AspNetCore NuGet 패키지를 사용할 때 자동으로 가져옵니다.

현재 DependencyTrackingTelemetryModule은 다음 종속성을 자동으로 추적합니다.

종속성 세부 정보
HTTP/HTTPS 로컬 또는 원격 HTTP/HTTPS 호출
WCF 호출 HTTP 기반 바인딩을 사용하는 경우에만 자동으로 추적됩니다.
SQL SqlClient를 사용한 호출입니다. SQL 쿼리 캡처에 대한 자세한 내용은 전체 SQL 쿼리를 가져오기 위한 고급 SQL 추적 섹션을 참조하세요.
Azure Blob Storage, Table Storage 또는 Queue Storage Azure Storage 클라이언트를 사용한 호출입니다.
Azure Event Hubs - 클라이언트 SDK 최신 패키지를 사용합니다. https://nuget.org/packages/Azure.Messaging.EventHubs
Azure Service Bus 클라이언트 SDK 최신 패키지를 사용합니다. https://nuget.org/packages/Azure.Messaging.ServiceBus
Azure Cosmos DB HTTP/HTTPS를 사용하는 경우 자동으로 추적됩니다. TCP를 사용한 직접 모드의 작업 추적은 미리 보기 패키지 >= 3.33.0-preview를 사용하여 자동으로 캡처됩니다. 자세한 내용은 설명서를 참조하세요.

종속성이 누락되었거나 다른 SDK를 사용하는 경우 자동 수집된 종속성 목록에 들어 있는지 확인합니다. 종속성이 자동 수집되지 않으면 종속성 호출 추적을 사용하여 수동으로 추적할 수 있습니다.

콘솔 앱에서 자동 종속성 추적 설정

.NET 콘솔 앱의 종속성을 자동으로 추적하려면 NuGet 패키지 Microsoft.ApplicationInsights.DependencyCollector을 설치하고 DependencyTrackingTelemetryModule를 초기화합니다.

    DependencyTrackingTelemetryModule depModule = new DependencyTrackingTelemetryModule();
    depModule.Initialize(TelemetryConfiguration.Active);

.NET Core 콘솔 앱의 경우 TelemetryConfiguration.Active는 더 이상 사용되지 않습니다. 작업자 서비스 설명서ASP.NET Core 모니터링 설명서의 지침을 참조하세요.

자동 종속성 모니터링은 어떻게 작동하나요?

종속성은 다음 방법 중 하나를 사용하여 자동으로 수집됩니다.

  • 선택 메서드 주위에서는 바이트 코드 계측을 사용합니다. StatusMonitor 또는 Azure App Service Web Apps 확장에서 InstrumentationEngine을 사용합니다.
  • EventSource 콜백.
  • 최신 .NET 또는 .NET Core SDK의 DiagnosticSource 콜백.

수동으로 종속성 추적

자동으로 수집되지 않는 종속성의 다음 예에서는 수동 추적이 필요합니다.

  • Azure Cosmos DB는 HTTP/HTTPS를 사용하는 경우에만 자동으로 추적됩니다. TCP 모드는 2.22.0-Beta1보다 이전 버전의 SDK용 Application Insights에서 자동으로 캡처되지 않습니다.
  • Redis

SDK에서 자동으로 수집하지 않는 종속성의 경우 표준 자동 컬렉션 모듈에서 사용되는 TrackDependency API를 사용하여 수동으로 추적할 수 있습니다.

예제

사용자가 직접 작성하지 않은 어셈블리로 코드를 빌드하는 경우 모든 호출의 시간을 측정할 수 있습니다. 이 시나리오를 사용하면 응답 시간에 어떤 기여를 하는지 확인할 수 있습니다.

Application Insights에서 종속성 차트에 표시되는 이 데이터를 가지려면, TrackDependency를 사용하여 이것을 보냅니다.


    var startTime = DateTime.UtcNow;
    var timer = System.Diagnostics.Stopwatch.StartNew();
    try
    {
        // making dependency call
        success = dependency.Call();
    }
    finally
    {
        timer.Stop();
        telemetryClient.TrackDependency("myDependencyType", "myDependencyCall", "myDependencyData",  startTime, timer.Elapsed, success);
    }

또는 TelemetryClient발신 종속성 추적에 표시된 대로 종속성을 수동으로 추적하는 데 사용할 수 있는 확장 메서드 StartOperationStopOperation을 제공합니다.

표준 종속성 추적 모듈을 끄려면 ASP.NET 애플리케이션에 대한 ApplicationInsights.config에서 DependencyTrackingTelemetryModule에 대한 참조를 제거합니다. ASP.NET Core 애플리케이션의 경우 ASP.NET Core 애플리케이션에 대한 Application Insights의 지침을 따릅니다.

웹 페이지에서 AJAX 호출 추적

웹 페이지의 경우 Application Insights JavaScript SDK는 AJAX 호출을 종속성으로 자동 수집합니다.

전체 SQL 쿼리를 가져오기 위한 고급 SQL 추적

참고 항목

Azure Functions는 SQL 텍스트 컬렉션을 사용하도록 설정하기 위해 별도의 설정이 필요합니다. 자세한 내용은 SQL 쿼리 컬렉션 사용을 참조하세요.

SQL 호출의 경우 서버 및 데이터베이스의 이름은 항상 수집되고 수집된 DependencyTelemetry의 이름으로 저장됩니다. 데이터라고 하는 다른 필드에는 전체 SQL 쿼리 텍스트가 포함될 수 있습니다.

ASP.NET Core 애플리케이션의 경우 이제 다음을 사용하여 SQL 텍스트 컬렉션을 옵트인해야 합니다.

services.ConfigureTelemetryModule<DependencyTrackingTelemetryModule>((module, o) => { module. EnableSqlCommandTextInstrumentation = true; });

ASP.NET 애플리케이션의 경우, 계측 엔진을 사용하거나 System.Data.SqlClient 라이브러리 대신 Microsoft.Data.SqlClient NuGet 패키지를 사용해야 하는 바이트 코드 계측을 통해 전체 SQL 쿼리 텍스트가 수집됩니다. 전체 SQL 쿼리 컬렉션을 사용하도록 설정하는 플랫폼별 단계는 다음 표에 설명되어 있습니다.

플랫폼 전체 SQL 쿼리를 가져오는 데 필요한 단계
Azure App Service의 Web Apps 웹앱 제어판에서 Application Insights 창을 열고 .NET에서 SQL 명령을 사용하도록 설정합니다.
IIS 서버(Azure Virtual Machines, 온-프레미스 등) Microsoft.Data.SqlClient NuGet 패키지를 사용하거나 Application Insights 에이전트 PowerShell 모듈을 사용하여 계측 엔진을 설치하고 IIS를 다시 시작합니다.
Azure Cloud Services StatusMonitor를 설치하기 위한 시작 작업을 추가합니다.
애플리케이션은 ASP.NET 또는 ASP.NET Core 애플리케이션에 대한 NuGet 패키지를 설치하여 빌드 시에 ApplicationInsights SDK로 온보딩됩니다.
IIS Express Microsoft.Data.SqlClient NuGet 패키지를 사용합니다.
Azure App Service의 WebJobs Microsoft.Data.SqlClient NuGet 패키지를 사용합니다.

앞의 플랫폼별 단계 외에도 다음 코드로 applicationInsights.config 파일을 수정하여 SQL 명령 컬렉션을 사용하도록 명시적으로 옵트인해야 합니다.

<TelemetryModules>
  <Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector">
    <EnableSqlCommandTextInstrumentation>true</EnableSqlCommandTextInstrumentation>
  </Add>

앞의 경우 계측 엔진이 올바르게 설치되었는지 유효성을 검사하는 올바른 방법은 수집된 DependencyTelemetry의 SDK 버전이 rddp인지 유효성을 검사하는 것입니다. rdddsd 또는 rddf를 사용하면 종속성이 DiagnosticSource 또는 EventSource 콜백을 통해 수집되므로 전체 SQL 쿼리가 캡처되지 않음을 나타냅니다.

종속성 데이터를 찾을 수 있는 위치

  • 애플리케이션 맵은 앱과 인접 구성 요소 간의 종속성을 시각화합니다.
  • 트랜잭션 진단은 상관 관계가 지정된 통합 서버 데이터를 표시합니다.
  • 브라우저 탭: 사용자 브라우저에서의 AJAX 호출을 표시합니다.
  • 느리거나 실패한 요청 중에서 선택하여 해당 종속성 호출을 확인합니다.
  • 분석: 종속성 데이터를 쿼리하는 데 사용됩니다.

느린 요청 진단

각 요청 이벤트는 요청을 처리하는 동안 추적되는 종속성 호출, 예외 및 기타 이벤트와 연결됩니다. 따라서 일부 요청이 잘못 수행되는 경우 종속성의 응답 속도가 느리기 때문인지 여부를 확인할 수 있습니다.

요청에서 종속성까지 추적

왼쪽에서 성능 탭을 선택하고 상단에서 종속성 탭을 선택합니다.

전체 아래에서 종속성 이름을 선택합니다. 종속성을 선택하면 해당 종속성의 기간 분포 그래프가 오른쪽에 나타납니다.

Screenshot that shows the Dependencies tab open to select a Dependency Name in the chart.

오른쪽 하단에서 샘플 단추를 선택합니다. 그런 다음 샘플을 선택하여 엔드투엔드 트랜잭션 세부 정보를 확인합니다.

Screenshot that shows selecting a sample to see the end-to-end transaction details.

라이브 사이트 프로파일링

Application Insights Profiler는 라이브 사이트에 대한 HTTP 호출을 추적하고 가장 오래 걸린 코드의 함수를 표시합니다.

실패한 요청

실패한 요청은 종속성에 대한 실패한 호출과 연관이 있을 수도 있습니다.

왼쪽에서 실패 탭을 선택한 다음 상단에서 종속성 탭을 선택합니다.

Screenshot that shows selecting the failed requests chart.

여기에 실패한 종속성 개수가 표시됩니다. 실패한 발생에 대한 자세한 정보를 보려면 하단 표에서 종속성 이름을 선택합니다. 전체 트랜잭션 세부 정보를 보려면 오른쪽 하단의 종속성 단추를 선택합니다.

로그(분석)

Kusto 쿼리 언어에서 종속성을 추적할 수 있습니다. 다음 몇 가지 예를 참조하십시오.

  • 실패한 종속성 호출을 찾습니다.

    
        dependencies | where success != "True" | take 10
    
  • AJAX 호출을 찾습니다.

    
        dependencies | where client_Type == "Browser" | take 10
    
  • 요청과 연관된 종속성 호출을 찾습니다.

    
        dependencies
        | where timestamp > ago(1d) and  client_Type != "Browser"
        | join (requests | where timestamp > ago(1d))
          on operation_Id  
    
  • 페이지 보기와 관련된 AJAX 호출을 찾습니다.

    
        dependencies
        | where timestamp > ago(1d) and  client_Type == "Browser"
        | join (browserTimings | where timestamp > ago(1d))
          on operation_Id
    

자주 묻는 질문

이 섹션에서는 일반적인 질문에 대한 답변을 제공합니다.

자동 종속성 수집기는 종속성에 대한 실패한 호출을 어떻게 보고하나요?

실패한 종속성 호출에는 success 필드가 False로 설정됩니다. 모듈 DependencyTrackingTelemetryModuleExceptionTelemetry를 보고하지 않습니다. 종속성에 대한 전체 데이터 모델은 Application Insights 원격 데이터 모델에 설명되어 있습니다.

종속성 원격 분석에 대한 수집 대기 시간은 어떻게 계산하나요?

아래와 같은 코드를 사용합니다.

dependencies
| extend E2EIngestionLatency = ingestion_time() - timestamp 
| extend TimeIngested = ingestion_time()

종속성 호출이 시작된 시간은 어떻게 확인하나요?

Log Analytics 쿼리 뷰 timestamp에서는 종속성 호출 응답이 수신된 직후에 발생하는 TrackDependency() 호출이 시작된 순간을 나타냅니다. 종속성 호출이 시작된 시간을 계산하려면 timestamp에서 종속성 호출의 기록된 duration을 뺍니다.

Application Insights의 종속성 추적에 로깅 응답 본문이 포함되나요?

Application Insights의 종속성 추적에는 대부분의 애플리케이션에서 너무 많은 원격 분석을 생성하기 때문에 로깅 응답 본문이 포함되지 않습니다.

오픈 소스 SDK

모든 Application Insights SDK와 마찬가지로 종속성 컬렉션 모듈 또한 오픈 소스입니다. 공식 GitHub 리포지토리에서 코드를 읽고 참여하거나 문제를 보고합니다.

종속성 자동 수집

애플리케이션의 코드에 대한 추가 수정 없이 종속성으로 자동으로 검색되는 현재 지원되는 종속성 호출 목록은 아래와 같습니다. Application Insights 애플리케이션 맵트랜잭션 진단 보기에서 이러한 종속성을 시각화합니다. 종속성이 아래 목록에 없으면 추적 종속성 호출을 사용하여 수동으로 추적할 수 있습니다.

.NET

앱 프레임워크 버전
ASP.NET Webforms 4.5+
ASP.NET MVC +4
ASP.NET WebAPI 4.5+
ASP.NET Core 1.1+
통신 라이브러리
HttpClient 4.5+, .NET Core 1.1+
SqlClient .NET Core 1.0+, NuGet 4.3.0
Microsoft.Data.SqlClient 1.1.0 - 안정적인 최신 릴리스. 아래 참고 사항을 참조하세요.
Event Hubs 클라이언트 SDK 1.1.0
ServiceBus 클라이언트 SDK 7.0.0
Storage 클라이언트
ADO.NET 4.5+

참고 항목

이전 버전의 Microsoft.Data.SqlClient에는 알려진 이슈가 있습니다. 해당 이슈를 완화하려면 1.1.0 이상을 사용하는 것이 좋습니다. Entity Framework Core가 반드시 안정적인 최신 릴리스의 Microsoft.Data.SqlClient와 함께 제공되는 것은 아니므로 이슈를 방지하려면 1.1.0 이상을 사용하고 있는지 확인하는 것이 좋습니다.

Java

Application Insights Java의 자동 수집 종속성 목록을 참조하세요.

Node.js

현재 지원되는 최신 모듈 목록은 여기에서 유지 관리됩니다.

JavaScript

통신 라이브러리 버전
XMLHttpRequest 모두

다음 단계