원격 분석 채널은 Application Insights SDK의 필수적인 부분입니다. 그들은 Application Insights 서비스로의 원격 분석 데이터의 버퍼링 및 전송을 관리합니다. SDK의 .NET 및 .NET Core 버전에는 InMemoryChannel
과 ServerTelemetryChannel
의 두 가지 기본 제공 원격 분석 채널이 있습니다. 이 문서에서는 각 채널을 자세히 설명하고 채널 동작을 사용자 지정하는 방법을 보여 줍니다.
주의
새 애플리케이션 또는 고객이 Azure Monitor Application Insights에 전원을 공급하려면 Azure Monitor OpenTelemetry Distro를 사용하는 것이 좋습니다. Azure Monitor OpenTelemetry Distro는 Application Insights SDK와 유사한 기능과 환경을 제공합니다. .NET, Node.js 및 Python에 대한 마이그레이션 가이드를 사용하여 Application Insights SDK에서 마이그레이션할 수 있지만 이전 버전과의 호환성을 위해 몇 가지 기능을 더 추가하기 위해 노력하고 있습니다.
원격 분석 채널이란?
원격 분석 채널은 원격 분석 항목을 버퍼링하고, 이를 Application Insights 서비스로 전송해서 쿼리 및 분석을 위해 저장합니다. 원격 분석 채널은 Microsoft.ApplicationInsights.ITelemetryChannel
인터페이스를 구현하는 클래스입니다.
원격 분석 채널의 Send(ITelemetry item)
메서드는 모든 원격 분석 이니셜라이저 및 원격 분석 프로세서가 호출된 후에 호출됩니다. 따라서 원격 분석 프로세서에 의해 삭제된 항목들은 채널에 도달하지 않습니다. Send()
메서드는 보통 백 엔드에 항목들을 즉시 보내지 않습니다. 이 메서드는 일반적으로 메모리에서 항목들을 버퍼링하고 효율적인 전송을 위해 항목들을 배치로 보냅니다.
중요한 경우가 아니면 버퍼링된 원격 분석을 즉시 보내기 위해 Flush()
을 호출하지 마세요. 애플리케이션 종료, 예외 처리와 같은 시나리오 또는 백그라운드 작업 또는 명령줄 도구와 같은 수명이 짧은 프로세스를 사용하는 경우에만 사용합니다. 웹 애플리케이션이나 오랜 시간 동안 실행되는 서비스에서 SDK는 텔레메트리 전송을 자동으로 처리합니다. 불필요하게 호출 Flush()
하면 성능 문제가 발생할 수 있습니다.
또한 라이브 메트릭 스트림에는 원격 분석의 라이브 스트리밍을 지원하는 사용자 지정 채널이 있습니다. 이 채널은 일반 원격 분석 채널과 독립적이며, 이 문서는 그것에 적용되지 않습니다.
기본 제공 원격 분석 채널
Application Insights .NET 및 .NET Core Sdk는 두 개의 기본 제공 채널과 함께 제공됩니다.
InMemoryChannel
: 항목들이 전송될 때까지 메모리의 항목들을 버퍼링하는 간단한 채널입니다. 항목들은 메모리에서 버퍼링되고, 30초마다 또는 500개 항목이 버퍼링될 때마다 플러시됩니다. 이 채널은 실패 후 원격 분석을 다시 보내려고 시도하지 않으므로 최소한의 안정성 보장을 제공합니다. 또한 이 채널은 항목을 디스크에 보관하지 않습니다. 따라서 애플리케이션이 종료되면 정상 종료든 비정상 종료든 상관없이 보내지 않은 항목은 영구적으로 손실됩니다. 이 채널은 메모리 내 원격 분석 항목을 동기적으로 강제 플러시하는 데 사용할 수 있는Flush()
메서드를 구현합니다. 이 채널은 동기 플러시가 이상적인 단기 실행 애플리케이션에 적합합니다.이 채널은 더 큰 Microsoft.ApplicationInsights NuGet 패키지의 일부이며, 아무것도 구성되지 않은 경우 SDK에서 사용하는 기본 채널입니다.
ServerTelemetryChannel
: 재시도 정책 및 로컬 디스크에 데이터를 저장하는 기능이 있는 고급 채널입니다. 일시적인 오류가 발생하는 경우, 이 채널은 원격 분석 전송을 다시 시도합니다. 이 채널은 또한 네트워크 중단이나 대용량 원격 분석 데이터 전송 시 로컬 디스크 스토리지를 사용하여 항목을 디스크에 저장합니다. 이러한 다시 시도 메커니즘과 로컬 디스크 스토리지로 인해 이 채널은 보다 안정적인 것으로 간주됩니다. 모든 프로덕션 시나리오에 권장됩니다. 공식 설명서에 따라 구성된 ASP.NET 및 ASP.NET Core 애플리케이션에서 이 채널이 기본값입니다. 이 채널은 장기 실행 프로세스를 포함하는 서버 시나리오에 최적화되어 있습니다. 이 채널에서 구현하는Flush()
메서드는 동기화되지 않습니다.이 채널은 Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel NuGet 패키지로 제공 되며, Microsoft.ApplicationInsights.Web 또는 Microsoft.ApplicationInsights.AspNetCore NuGet 패키지를 사용하는 경우 자동으로 획득됩니다.
원격 분석 채널 구성
원격 분석 채널을 활성 원격 분석 구성으로 설정하여 구성합니다. ASP.NET 애플리케이션의 경우 구성에는 원격 분석 채널 인스턴스를 TelemetryConfiguration.Active
(으)로 설정하거나 ApplicationInsights.config
을(를) 수정해서 설정하는 작업이 포함됩니다. ASP.NET Core 애플리케이션의 경우 구성에는 종속성 주입 컨테이너에 채널을 추가하는 작업이 포함됩니다.
다음 섹션에서는 StorageFolder
다양한 애플리케이션 유형에서 채널 설정을 구성하는 예를 보여 줍니다. StorageFolder
은 구성 가능한 설정 중 하나일 뿐입니다. 구성 설정의 전체 목록은 이 문서의 뒷부분에 있는 채널에서 구성 가능한 설정 섹션을 참조하세요.
ASP.NET 애플리케이션에 대해 ApplicationInsights.config를 사용하여 구성
ApplicationInsights.config의 다음 섹션에서는 사용자 지정 위치로 설정된 ServerTelemetryChannel
로 구성된 StorageFolder
채널을 보여 줍니다.
<TelemetrySinks>
<Add Name="default">
<TelemetryProcessors>
<!-- Telemetry processors omitted for brevity -->
</TelemetryProcessors>
<TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel">
<StorageFolder>d:\temp\applicationinsights</StorageFolder>
</TelemetryChannel>
</Add>
</TelemetrySinks>
ASP.NET 애플리케이션에 대한 코드 구성
다음 코드는 사용자 지정 위치로 설정된 ServerTelemetryChannel
로 StorageFolder
인스턴스를 설정합니다. 애플리케이션의 시작 부분에 이 코드를 추가합니다(보통 Global.aspx.cs의 Application_Start()
메서드).
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;
protected void Application_Start()
{
var serverTelemetryChannel = new ServerTelemetryChannel();
serverTelemetryChannel.StorageFolder = @"d:\temp\applicationinsights";
serverTelemetryChannel.Initialize(TelemetryConfiguration.Active);
TelemetryConfiguration.Active.TelemetryChannel = serverTelemetryChannel;
}
ASP.NET Core 애플리케이션에 대한 코드 구성
ConfigureServices
클래스의 Startup.cs
메서드를 다음과 같이 수정 합니다.
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;
public void ConfigureServices(IServiceCollection services)
{
// This sets up ServerTelemetryChannel with StorageFolder set to a custom location.
services.AddSingleton(typeof(ITelemetryChannel), new ServerTelemetryChannel() {StorageFolder = @"d:\temp\applicationinsights" });
services.AddApplicationInsightsTelemetry();
}
중요한
ASP.NET Core 애플리케이션에는 TelemetryConfiguration.Active
을(를) 사용하여 채널을 구성할 수 없습니다.
.NET/.NET Core 콘솔 애플리케이션에 대한 코드 구성
콘솔 앱의 경우, 코드는 .NET 및 .NET Core 모두에 대해 동일합니다.
var serverTelemetryChannel = new ServerTelemetryChannel();
serverTelemetryChannel.StorageFolder = @"d:\temp\applicationinsights";
serverTelemetryChannel.Initialize(TelemetryConfiguration.Active);
TelemetryConfiguration.Active.TelemetryChannel = serverTelemetryChannel;
ServerTelemetryChannel의 작업 세부 정보
ServerTelemetryChannel
는 도착 항목을 메모리 내 버퍼에 저장합니다. 항목은 30초마다, 또는 500개 항목이 버퍼링될 때 Transmission
인스턴스로 serialize, 압축 및 저장됩니다. 단일 Transmission
인스턴스는 최대 500개 항목을 포함하며, 단일 HTTPS 호출을 통해 Application Insights 서비스에 전송되는 원격 분석의 배치(Batch)를 나타냅니다.
기본값으로 최대 10개의 Transmission
인스턴스를 병렬로 전송할 수 있습니다. 원격 분석이 더 빠른 속도로 도착하거나, 네트워크 또는 Application Insights 백 엔드가 느려지는 경우, Transmission
인스턴스는 메모리에 저장됩니다. 이 메모리 내 Transmission
버퍼의 기본 용량은 5MB입니다. 메모리 내 용량이 초과되면 Transmission
인스턴스는 50MB 한도까지 로컬 디스크에 저장됩니다.
Transmission
인스턴스는 네트워크 문제가 있는 경우에도 로컬 디스크에 저장됩니다. 로컬 디스크에 저장되는 항목만 애플리케이션 작동 중단에도 유지됩니다. 이 항목은 애플리케이션이 다시 시작될 때마다 전송됩니다. 네트워크 문제가 계속해서 발생하면, ServerTelemetryChannel
은 원격 분석 정보를 보내기 위해 다시 시도하기 전에 10초에서 1시간 사이의 지수적 후퇴 논리를 사용합니다.
채널의 구성 가능한 설정
각 채널의 구성 가능한 설정에 대한 전체 목록은 다음을 참조하세요.
ServerTelemetryChannel
에 가장 일반적으로 사용되는 설정은 다음과 같습니다.
MaxTransmissionBufferCapacity
: 메모리의 버퍼 전송을 위해 채널에서 사용하는 최대 메모리 양(바이트)입니다. 이 용량에 도달하면 새 항목이 로컬 디스크에 직접 저장됩니다. 기본값은 5MB입니다. 높은 값을 설정하면 디스크 사용량이 감소하지만, 애플리케이션의 작동이 중단되면 메모리의 항목이 손실됩니다.MaxTransmissionSenderCapacity
: 동시에 Application Insights로 전송되는 최대Transmission
인스턴스 수입니다. 기본값은 10입니다. 이 설정은 더 높은 수로 구성할 수 있으며, 이는 원격 분석을 대량으로 생성할 때 권장됩니다. 대용량은 일반적으로 부하 테스트 중 또는 샘플링을 해제할 때 발생합니다.StorageFolder
: 필요에 따라 디스크에 항목을 저장하기 위해 채널에서 사용하는 폴더입니다. 다른 경로를 명시적으로 지정하지 않으면 Windows 에서는 %LOCALAPPDATA% or %TEMP%가 사용됩니다. Windows 이외의 환경에서는 유효한 위치를 지정해야 합니다. 그렇지 않으면 원격 분석이 로컬 디스크에 저장되지 않습니다.
어떤 채널을 사용해야 하나요?
ServerTelemetryChannel
은(는) 장기 실행 애플리케이션을 비롯한 대부분의 프로덕션 시나리오에 권장됩니다. 원격 분석 데이터 플러싱에 대한 자세한 내용은 Flush()
사용 방법을 참조하세요.
Flush()를 사용하는 경우
메서드는 버퍼링된 텔레메트리 데이터를 즉시 보냅니다. 그러나 특정 시나리오에서만 사용해야 합니다.
다음과 같은 경우 Flush()
를 사용합니다.
- 애플리케이션이 종료되려고 하며 종료하기 전에 원격 분석 데이터가 전송되었는지 확인하려고 합니다.
- 예외 처리기에 있으며 원격 분석 데이터가 제공되도록 보장해야 합니다.
- 백그라운드 작업 또는 신속하게 종료되는 CLI 도구와 같은 수명이 짧은 프로세스를 작성하고 있습니다.
웹 서비스와 같은 장기 실행 애플리케이션에서는 Flush()
를 사용하지 마십시오. SDK는 버퍼링 및 전송을 자동으로 관리합니다. 불필요하게 호출 Flush()
하면 성능 문제가 발생할 수 있으며, 특히 동기적으로 플러시되지 않는 사용 ServerTelemetryChannel
시 모든 데이터가 전송되도록 보장하지는 않습니다.
오픈 소스 SDK
Application Insights의 모든 SDK와 마찬가지로 채널은 오픈 소스입니다. 공식 GitHub 리포지토리에서 코드를 읽고 이에 참여하거나 문제를 보고합니다.
다음 단계
- FAQ(질문과 대답)를 검토하려면 원격 분석 채널 FAQ를 참조하세요.
- 지원되는 버전의 Application Insights SDK를 실행하고 있는지 확인합니다.
- 샘플링
- SDK 문제 해결