TrackAvailability() 테스트 결과 검토

이 문서에서는 Azure Portal에서 TrackAvailability() 테스트 결과를 검토하고 Log Analytics를 사용하여 데이터를 쿼리하는 방법을 설명합니다. 가능한 경우 투자, 유지 관리가 필요 없고 필수 조건이 거의 없으므로 표준 테스트를 항상 사용하는 것이 좋습니다.

필수 조건

Important

TrackAvailability()를 사용하려면 개발자가 잠재적으로 복잡한 사용자 지정 코드를 작성하고 유지 관리하는 데 투자해야 합니다.

가용성 확인

먼저 Application Insights 리소스의 가용성 탭에서 그래프를 검토합니다.

참고 항목

TrackAvailability()로 만든 테스트는 테스트 이름 옆에 CUSTOM이 표시됩니다.

성공적인 결과가 있는 가용성 탭을 보여 주는 스크린샷

엔드투엔드 트랜잭션 세부 정보를 보려면 드릴인에서 성공 또는 실패를 선택합니다. 그런 다음, 샘플을 선택합니다. 그래프에서 데이터 요소를 선택하여 엔드투엔드 트랜잭션 세부 정보를 가져올 수도 있습니다.

샘플 가용성 테스트 선택을 보여 주는 스크린샷

엔드투엔드 트랜잭션 세부 정보를 보여 주는 스크린샷

Log Analytics에서 쿼리

Log Analytics를 사용하여 가용성 결과, 종속성 등을 볼 수 있습니다. Log Analytics에 대한 자세한 내용을 보려면 로그 쿼리 개요를 참조하세요.

가용성 결과를 보여 주는 스크린샷

종속성이 50개로 제한된 새 쿼리 탭을 보여 주는 스크린샷

기본 코드 샘플

참고 항목

이 예제는 Azure Function 내에서 TrackAvailability() API 호출이 작동하는 방식에 대한 메커니즘을 보여 주기 위해서만 설계되었습니다. 이 예제를 완전한 기능 가용성 테스트로 전환하는 데 필요한 기본 HTTP 테스트 코드 또는 비즈니스 논리를 작성하는 방법은 표시되지 않습니다. 기본적으로 이 예제를 진행하는 경우 기본 가용성 HTTP GET 테스트를 만듭니다.

이러한 지침을 따르려면 전용 계획을 사용하여 App Service 편집기에서 코드 편집을 허용해야 합니다.

타이머 트리거 함수 만들기

  1. Azure Functions 리소스를 만듭니다.

    • Application Insights 리소스가 이미 있는 경우:

      • 기본적으로 Azure Functions는 Application Insights 리소스를 만듭니다. 그러나 이전에 만든 리소스를 사용하려면 만드는 동안 해당 리소스를 지정해야 합니다.

      • 다음 수정과 함께 Azure Functions 리소스 만들기 방법에 대한 지침을 따릅니다.

        모니터링 탭에서 Application Insights 드롭다운 상자를 선택한 다음, 리소스의 이름을 입력하거나 선택합니다.

        모니터링 탭에서 기존 Application Insights 리소스 선택을 보여 주는 스크린샷

    • 타이머 트리거 함수에서 사용할 Application Insights 리소스가 아직 생성되지 않은 경우

      • 기본적으로 Azure Functions 애플리케이션을 만들 때 Application Insights 리소스를 만들게 됩니다. Azure Functions 리소스 만들기 방법에 대한 지침을 따릅니다.

    참고 항목

    소비, 프리미엄 또는 App Service 요금제에서 함수를 호스트할 수 있습니다. 가상 네트워크 뒤에서 테스트하거나 비퍼블릭 엔드포인트를 테스트하는 경우 소비 플랜 대신 프리미엄 플랜을 사용해야 합니다. 호스팅 탭에서 플랜을 선택합니다. 함수 앱을 만들 때 최신 .NET 버전이 선택되어 있는지 확인하세요.

  2. 타이머 트리거 함수를 만듭니다.

    1. 함수 앱에서 함수 탭을 선택합니다.
    2. 추가를 선택합니다. 함수 추가 창에서 다음 구성을 선택합니다.
      1. 개발 환경: 포털에서 개발
      2. 템플릿 선택: 타이머 트리거
    3. 추가를 선택하여 타이머 트리거 함수를 만듭니다.

    함수 앱에 타이머 트리거 함수를 추가하는 방법을 보여 주는 스크린샷

App Service 편집기에서 코드 추가 및 편집

배포된 함수 앱으로 이동하고 개발 도구에서 App Service 편집기 탭을 선택합니다.

새 파일을 만들려면 타이머 트리거 함수(예: TimerTrigger1)를 마우스 오른쪽 단추로 클릭하고 새 파일을 선택합니다. 그런 다음, 파일 이름을 입력하고 Enter 키를 선택합니다.

  1. function.proj라는 파일을 만들고 다음 코드를 붙여넣습니다.

    <Project Sdk="Microsoft.NET.Sdk"> 
        <PropertyGroup> 
            <TargetFramework>netstandard2.0</TargetFramework> 
        </PropertyGroup> 
        <ItemGroup> 
            <PackageReference Include="Microsoft.ApplicationInsights" Version="2.15.0" /> <!-- Ensure you’re using the latest version --> 
        </ItemGroup> 
    </Project> 
    

    App Service 편집기에서 function.proj를 보여 주는 스크린샷

  2. runAvailabilityTest.csx라는 새 파일을 만들고 다음 코드를 붙여넣습니다.

    using System.Net.Http; 
    
    public async static Task RunAvailabilityTestAsync(ILogger log) 
    { 
        using (var httpClient = new HttpClient()) 
        { 
            // TODO: Replace with your business logic 
            await httpClient.GetStringAsync("https://www.bing.com/"); 
        } 
    } 
    
  3. REGION_NAME 환경 변수를 유효한 Azure 가용성 위치로 정의합니다.

    Azure CLI에서 다음 명령을 실행하여 사용 가능한 지역을 나열합니다.

    az account list-locations -o table
    
  4. 다음 코드를 run.csx 파일에 복사합니다. (기존 코드를 바꿉니다.)

    #load "runAvailabilityTest.csx" 
    
    using System; 
    
    using System.Diagnostics; 
    
    using Microsoft.ApplicationInsights; 
    
    using Microsoft.ApplicationInsights.Channel; 
    
    using Microsoft.ApplicationInsights.DataContracts; 
    
    using Microsoft.ApplicationInsights.Extensibility; 
    
    private static TelemetryClient telemetryClient; 
    
    // ============================================================= 
    
    // ****************** DO NOT MODIFY THIS FILE ****************** 
    
    // Business logic must be implemented in RunAvailabilityTestAsync function in runAvailabilityTest.csx 
    
    // If this file does not exist, please add it first 
    
    // ============================================================= 
    
    public async static Task Run(TimerInfo myTimer, ILogger log, ExecutionContext executionContext) 
    
    { 
        if (telemetryClient == null) 
        { 
            // Initializing a telemetry configuration for Application Insights based on connection string 
    
            var telemetryConfiguration = new TelemetryConfiguration(); 
            telemetryConfiguration.ConnectionString = Environment.GetEnvironmentVariable("APPLICATIONINSIGHTS_CONNECTION_STRING"); 
            telemetryConfiguration.TelemetryChannel = new InMemoryChannel(); 
            telemetryClient = new TelemetryClient(telemetryConfiguration); 
        } 
    
        string testName = executionContext.FunctionName; 
        string location = Environment.GetEnvironmentVariable("REGION_NAME"); 
        var availability = new AvailabilityTelemetry 
        { 
            Name = testName, 
    
            RunLocation = location, 
    
            Success = false, 
        }; 
    
        availability.Context.Operation.ParentId = Activity.Current.SpanId.ToString(); 
        availability.Context.Operation.Id = Activity.Current.RootId; 
        var stopwatch = new Stopwatch(); 
        stopwatch.Start(); 
    
        try 
        { 
            using (var activity = new Activity("AvailabilityContext")) 
            { 
                activity.Start(); 
                availability.Id = Activity.Current.SpanId.ToString(); 
                // Run business logic 
                await RunAvailabilityTestAsync(log); 
            } 
            availability.Success = true; 
        } 
    
        catch (Exception ex) 
        { 
            availability.Message = ex.Message; 
            throw; 
        } 
    
        finally 
        { 
            stopwatch.Stop(); 
            availability.Duration = stopwatch.Elapsed; 
            availability.Timestamp = DateTimeOffset.UtcNow; 
            telemetryClient.TrackAvailability(availability); 
            telemetryClient.Flush(); 
        } 
    } 
    
    

다단계 웹 테스트 코드 샘플

위와 동일한 지침을 따르고 대신 다음 코드를 runAvailabilityTest.csx 파일에 붙여넣습니다.

using System.Net.Http; 

public async static Task RunAvailabilityTestAsync(ILogger log) 
{ 
    using (var httpClient = new HttpClient()) 
    { 
        // TODO: Replace with your business logic 
        await httpClient.GetStringAsync("https://www.bing.com/"); 

        // TODO: Replace with your business logic for an additional monitored endpoint, and logic for additional steps as needed
        await httpClient.GetStringAsync("https://www.learn.microsoft.com/"); 
    } 
}

다음 단계