TrackAvailability() のテスト結果を確認する

この記事では、Azure portal で TrackAvailability() のテスト結果を確認し、Log Analytics を使用してデータにクエリを実行する方法について説明します。 標準テストは、必要な投資がほとんどなく、メンテナンス不要で前提条件も少ないため、可能な場合は常に使用する必要があります。

前提条件

重要

TrackAvailability() では、複雑なカスタム コードの作成とメンテナンスに開発者の投資を行う必要があります。

可用性を確認する

まず、Application Insights リソースの [Availability] (可用性) タブでグラフを確認します。

注意

TrackAvailability() で作成されたテスト名の横には、 [CUSTOM] と表示されます。

成功した結果を含む [可用性] タブを示すスクリーンショット。

エンドツーエンドのトランザクションの詳細を表示するには、[詳細の表示][成功] または [失敗] を選択します。 次に、サンプルを選択します。 グラフでデータ ポイントを選択することにより、エンドツーエンドのトランザクションの詳細も取得できます。

サンプル可用性テストの選択を示すスクリーンショット。

[エンドツーエンド トランザクションの詳細] タブを示すスクリーンショット。

Log Analytics のサンプル クエリ

Log Analytics を使用して、可用性の結果、依存関係、その他を見ることができます。 Log Analytics の詳細については、ログ クエリの概要に関するページを参照してください。

可用性の結果を示すスクリーンショット。

依存関係が 50 に制限された [新しいクエリ] タブが表示されたスクリーンショット。

基本的なコード サンプル

Note

この例は、Azure 関数内で TrackAvailability() API 呼び出しが機能する仕組みを示すためだけに設計されています。 基になる HTTP テスト コードまたはビジネス ロジックを記述する方法を示すものではありません (それは、これを完全に機能する可用性テストにする場合に必要になります)。 既定で、この例を実行すると、基本的な可用性 HTTP GET テストが作成されます。

これらの手順に従うには、専用プランを使用して、App Service Editor でコードの編集を許可する必要があります。

タイマー トリガー関数を作成する

  1. Azure Functions リソースを作成します。

    • Application Insights リソースが既にある場合:

      • 既定では、Azure Functions によって Application Insights リソースが作成されます。 ただし、前に作成したリソースを使用する場合は、作成時にそれを指定する必要があります。

      • Azure Functions リソースの作成方法の手順を実行し、次の変更を行ってください。

        [監視] タブで、Application Insights のドロップダウン ボックスを選択し、リソースの名前を入力または選択します。

        [監視] タブでの既存の Application Insights リソースの選択を示すスクリーンショット。

    • タイマーによってトリガーされる関数用の Application Insights リソースをまだ作成していない場合:

      • 既定では、Azure Functions アプリケーションを作成するときに、Application Insights リソースが自動的に作成されます。 Azure Functions リソースの作成方法の手順を実行します。

    Note

    関数は、従量課金、Premium、または App Service プランでホストできます。 仮想ネットワークの背後でテストする場合、または非パブリック エンドポイントをテストする場合は、従量課金プランの代わりに Premium プランを使用する必要があります。 [ホスティング] タブでプランを選択します。関数アプリの作成時に最新の .NET バージョンが選択されていることを確認します。

  2. タイマー トリガー関数を作成します。

    1. 該当する関数アプリで、 [関数] タブを選択します。
    2. [追加] を選択します。 [関数の追加] ウィンドウで、次の構成を選択します。
      1. [開発環境]: [ポータルで開発]
      2. [テンプレートの選択]: [タイマー トリガー]
    3. [追加] を選択して、タイマー トリガー関数を作成します。

    関数アプリにタイマー トリガー関数を追加する方法を示すスクリーンショット。

App Service Editor でコードを追加して編集する

デプロイした関数アプリに移動し、[開発ツール][App Service Editor] タブを選択します。

新しいファイルを作成するには、タイマー トリガー関数の下 (たとえば 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 Editor の 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(); 
        } 
    } 
    
    

複数ステップの Web テストのサンプル コード

上記と同じ手順に従います。ただし、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/"); 
    } 
}

次のステップ