Application Insights의 원격 분석 채널

원격 분석 채널은 Application Insights SDK필수적인 부분입니다. Application Insights 서비스에 대한 원격 분석의 버퍼링 및 전송을 관리합니다. SDK의 .NET 및 .NET Core 버전에는 두 개의 기본 제공 원격 분석 채널이 있습니다ServerTelemetryChannel. InMemoryChannel 이 문서에서는 각 채널에 대해 설명하고 채널 동작을 사용자 지정하는 방법을 보여 줍니다.

참고 항목

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

원격 분석 채널이란?

원격 분석 채널은 원격 분석 항목을 버퍼링하고 쿼리 및 분석을 위해 저장되는 Application Insights 서비스로 보냅니다. 원격 분석 채널은 Microsoft.ApplicationInsights.ITelemetryChannel인터페이스를 구현하는 클래스입니다.

원격 분석 채널의 메서드는 모든 원격 분석 이 Send(ITelemetry item) 니셜라이저 및 원격 분석 프로세서가 호출된 후에 호출됩니다. 따라서 원격 분석 프로세서에서 삭제한 항목은 채널에 도달하지 않습니다. 메서드는 Send() 일반적으로 항목을 백 엔드에 즉시 보내지 않습니다. 일반적으로 메모리에서 버퍼링하고 효율적인 전송을 위해 일괄 처리로 보냅니다.

라이브 메트릭 스트림 에는 원격 분석의 라이브 스트리밍을 지원하는 사용자 지정 채널도 있습니다. 이 채널은 일반 원격 분석 채널과 독립적이며 이 문서는 적용되지 않습니다.

기본 제공 원격 분석 채널

Application Insights .NET 및 .NET Core SDK는 두 개의 기본 제공 채널과 함께 제공됩니다.

  • InMemoryChannel: 전송될 때까지 메모리의 항목을 버퍼링하는 경량 채널입니다. 항목은 메모리에 버퍼링되고 30초마다 한 번씩 또는 500개 항목이 버퍼링될 때마다 플러시됩니다. 이 채널은 실패 후 원격 분석을 다시 보내려고 시도하지 않으므로 최소한의 안정성 보장을 제공합니다. 또한 이 채널은 디스크에 항목을 보관하지 않습니다. 따라서 우아하든 그렇지 않든 관계없이 응용 프로그램 종료 시 언젠트된 항목이 영구적으로 손실됩니다. 이 채널은 Flush() 메모리 내 원격 분석 항목을 동기적으로 강제로 플러시하는 데 사용할 수 있는 메서드를 구현합니다. 이 채널은 동기 플러시가 이상적인 짧은 실행 애플리케이션에 적합합니다.

    이 채널은 더 큰 Microsoft.ApplicationInsights NuGet 패키지의 일부이며 다른 항목이 구성되지 않은 경우 SDK에서 사용하는 기본 채널입니다.

  • ServerTelemetryChannel: 재시도 정책 및 로컬 디스크에 데이터를 저장하는 기능이 있는 고급 채널입니다. 일시적인 오류가 발생하는 경우, 이 채널은 원격 분석 전송을 다시 시도합니다. 또한 이 채널은 로컬 디스크 스토리지를 사용하여 네트워크 중단 또는 대용량 원격 분석에서 디스크에 항목을 유지합니다. 이러한 재시도 메커니즘 및 로컬 디스크 스토리지로 인해 이 채널은 더 신뢰할 수 있는 것으로 간주됩니다. 모든 프로덕션 시나리오에 권장됩니다. 이 채널은 공식 설명서에 따라 구성된 ASP.NETASP.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의 다음 섹션에서는 사용자 지정 위치로 설정된 StorageFolder로 구성된 ServerTelemetryChannel 채널을 보여 줍니다.

    <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 애플리케이션에 대한 코드의 구성

다음 코드는 사용자 지정 위치로 ServerTelemetryChannelStorageFolder 설정된 인스턴스를 설정합니다. 일반적으로 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();
}

Important

사용하여 TelemetryConfiguration.Active 채널을 구성하는 것은 ASP.NET Core 애플리케이션에서 지원되지 않습니다.

.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 저장됩니다. 단일 Transmission 인스턴스는 최대 500개의 항목을 포함하며 Application Insights 서비스에 대한 단일 HTTPS 호출을 통해 전송되는 원격 분석의 일괄 처리를 나타냅니다.

기본값으로 최대 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 됩니다. 구현된 ServerTelemetryChannel 메서드는 Flush() 동기식이 아닙니다. 또한 메모리 또는 디스크에서 보류 중인 모든 항목을 전송하는 것을 보장하지는 않습니다.

애플리케이션이 종료되는 시나리오에서 이 채널을 사용하는 경우 호출 Flush()후 약간의 지연이 발생합니다. 필요할 수 있는 정확한 지연 시간은 예측할 수 없습니다. 메모리에 있는 항목 또는 Transmission 인스턴스 수, 디스크에 있는 수, 백 엔드로 전송되는 수, 채널이 지수 백오프 시나리오의 중간에 있는지 여부와 같은 요인에 따라 달라집니다.

동기 플러시를 InMemoryChannel수행해야 하는 경우 .

자주 묻는 질문

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

Application Insights 채널은 원격 분석 제공을 보장 하나요? 그렇지 않은 경우 원격 분석이 손실될 수 있는 시나리오는 무엇인가요?

짧은 대답은 기본 제공 채널 중 어느 것도 백 엔드에 대한 원격 분석 배달의 트랜잭션 유형 보장을 제공하지 않는다는 것입니다. ServerTelemetryChannel는 신뢰할 수 있는 제공 측면에서 InMemoryChannel와 비교하여 더 고급이지만, 원격 분석을 전송하는 데에는 최선의 시도만 수행합니다. 다음과 같은 일반적인 시나리오를 포함하여 여러 상황에서 원격 분석이 손실될 수 있습니다.

  • 애플리케이션이 충돌하면 메모리의 항목이 손실됩니다.
  • 네트워크 문제가 장기간 계속되면 원격 분석이 손실됩니다. 원격 분석은 네트워크 중단 중 또는 Application Insights 백 엔드에서 문제가 발생하는 경우 로컬 디스크에 저장됩니다. 그러나 48시간보다 오래된 항목은 카드.
  • Windows에서 원격 분석을 저장하기 위한 기본 디스크 위치는 %LOCALAPPDATA% 또는 %TEMP%입니다. 이러한 위치는 일반적으로 컴퓨터에 로컬입니다. 애플리케이션이 한 위치에서 다른 위치로 물리적으로 마이그레이션하는 경우 원래 위치에 저장된 모든 원격 분석이 손실됩니다.
  • Windows의 Azure Web Apps에서, 기본 디스크 스토리지 위치는 D:\local\LocalAppData입니다. 이 위치는 유지되지 않습니다. 앱 다시 시작, 스케일 아웃 및 기타 이러한 작업에서 초기화되어 저장된 원격 분석이 손실됩니다. 기본값을 재정의하고 D:\home과 같은 지속형 위치에 스토리지를 지정할 수 있습니다. 그러나 이러한 지속형 위치는 원격 스토리지에서 제공되므로 속도가 느려질 수 있습니다.

가능성은 낮지만 채널이 중복된 원격 분석 항목을 발생시킬 수도 있습니다. 이 동작은 ServerTelemetryChannel 네트워크 오류 또는 시간 제한으로 인해 다시 시도하거나 원격 분석이 백 엔드에 전달되었지만 네트워크 문제로 인해 응답이 손실되었거나 시간 제한이 있을 때 발생합니다.

ServerTelemetryChannel는 Windows 이외의 시스템에서 작동 하나요?

패키지 및 네임스페이스의 이름에 "WindowsServer"가 포함되어 있지만 이 채널은 다음 예외를 제외하고 Windows 이외의 시스템에서 지원됩니다. Windows 이외의 시스템에서 채널은 기본적으로 로컬 스토리지 폴더를 만들지 않습니다. 로컬 스토리지 폴더를 만들고 사용하도록 채널을 구성해야 합니다. 로컬 스토리지가 구성된 후 채널은 모든 시스템에서 동일한 방식으로 작동합니다.

참고 항목

릴리스 2.15.0-beta3 이상의 경우, 로컬 스토리지는 이제 Linux, Mac 및 Windows 용으로 자동 생성됩니다. Windows가 아닌 체제의 경우, SDK는 다음 논리에 따라 로컬 스토리지 폴더를 자동으로 생성합니다.

  • ${TMPDIR}: 환경 변수가 ${TMPDIR} 설정된 경우 이 위치가 사용됩니다.
  • /var/tmp: 이전 위치가 없으면 /var/tmp를 시도합니다.
  • /tmp: 모두 이전 위치가 없으면 tmp를 시도합니다.
  • 이러한 위치가 아예 없는 경우, 로컬 스토리지가 만들어지지 않으며, 수동 구성도 필요합니다. 전체 구현 세부 정보는 이 GitHub 리포지토리를 참조하세요.

SDK가 임시 로컬 스토리지를 만들나요? 데이터가 스토리지에서 암호화되나요?

네트워크 문제나 대역폭 제한이 있는 동안에 SDK는 로컬 스토리지에 원격 분석 항목을 저장합니다. 이 데이터는 로컬로 암호화되지 않습니다.

Windows 시스템의 경우 SDK는 %TEMP% 또는 %LOCALAPPDATA% 디렉터리에 임시 로컬 폴더를 자동으로 만들고 관리자 및 현재 사용자에 대한 액세스만 제한합니다.

Windows 이외의 시스템의 경우 SDK에 의해 자동으로 로컬 스토리지가 만들어지지 않으므로 기본적으로 데이터가 로컬로 저장되지 않습니다.

참고 항목

릴리스 2.15.0-beta3 이상의 경우, 로컬 스토리지는 이제 Linux, Mac 및 Windows 용으로 자동 생성됩니다.

스토리지 디렉터리를 직접 만들고 사용하도록 채널을 구성할 수 있습니다. 이 경우 디렉터리에 보안이 설정 되었는지 확인해야 합니다. 데이터 보호 및 개인 정보 보호에 대해 자세히 알아보세요.

오픈 소스 SDK

Application Insights에 대한 모든 SDK와 마찬가지로 채널은 오픈 소스. 공식 GitHub 리포지토리에서 코드를 읽고 문제를 보고합니다.

다음 단계