TrackAvailability() のテスト結果を確認する
この記事では、Azure portal で TrackAvailability() のテスト結果を確認し、Log Analytics を使用してデータにクエリを実行する方法について説明します。 標準テストは、必要な投資がほとんどなく、メンテナンス不要で前提条件も少ないため、可能な場合は常に使用する必要があります。
前提条件
- ワークスペース ベースの Application Insights リソース
- Azure Functions の関数アプリのソース コードへのアクセス
- 特定のビジネス ニーズに合わせて調整された TrackAvailability() 用のカスタム コードを作成できる開発者の専門知識
重要
TrackAvailability() では、複雑なカスタム コードの作成とメンテナンスに開発者の投資を行う必要があります。
可用性を確認する
まず、Application Insights リソースの [Availability] (可用性) タブでグラフを確認します。
注意
TrackAvailability()
で作成されたテスト名の横には、 [CUSTOM] と表示されます。
エンドツーエンドのトランザクションの詳細を表示するには、[詳細の表示] で [成功] または [失敗] を選択します。 次に、サンプルを選択します。 グラフでデータ ポイントを選択することにより、エンドツーエンドのトランザクションの詳細も取得できます。
Log Analytics のサンプル クエリ
Log Analytics を使用して、可用性の結果、依存関係、その他を見ることができます。 Log Analytics の詳細については、ログ クエリの概要に関するページを参照してください。
基本的なコード サンプル
Note
この例は、Azure 関数内で TrackAvailability()
API 呼び出しが機能する仕組みを示すためだけに設計されています。 基になる HTTP テスト コードまたはビジネス ロジックを記述する方法を示すものではありません (それは、これを完全に機能する可用性テストにする場合に必要になります)。 既定で、この例を実行すると、基本的な可用性 HTTP GET テストが作成されます。
これらの手順に従うには、専用プランを使用して、App Service Editor でコードの編集を許可する必要があります。
タイマー トリガー関数を作成する
Azure Functions リソースを作成します。
Application Insights リソースが既にある場合:
既定では、Azure Functions によって Application Insights リソースが作成されます。 ただし、前に作成したリソースを使用する場合は、作成時にそれを指定する必要があります。
Azure Functions リソースの作成方法の手順を実行し、次の変更を行ってください。
[監視] タブで、Application Insights のドロップダウン ボックスを選択し、リソースの名前を入力または選択します。
タイマーによってトリガーされる関数用の Application Insights リソースをまだ作成していない場合:
- 既定では、Azure Functions アプリケーションを作成するときに、Application Insights リソースが自動的に作成されます。 Azure Functions リソースの作成方法の手順を実行します。
Note
関数は、従量課金、Premium、または App Service プランでホストできます。 仮想ネットワークの背後でテストする場合、または非パブリック エンドポイントをテストする場合は、従量課金プランの代わりに Premium プランを使用する必要があります。 [ホスティング] タブでプランを選択します。関数アプリの作成時に最新の .NET バージョンが選択されていることを確認します。
タイマー トリガー関数を作成します。
- 該当する関数アプリで、 [関数] タブを選択します。
- [追加] を選択します。 [関数の追加] ウィンドウで、次の構成を選択します。
- [開発環境]: [ポータルで開発]
- [テンプレートの選択]: [タイマー トリガー]
- [追加] を選択して、タイマー トリガー関数を作成します。
App Service Editor でコードを追加して編集する
デプロイした関数アプリに移動し、[開発ツール] で [App Service Editor] タブを選択します。
新しいファイルを作成するには、タイマー トリガー関数の下 (たとえば TimerTrigger1) を右クリックし、[新しいファイル] を選択します。 次に、ファイルの名前を入力し、Enter を押します。
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>
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/"); } }
REGION_NAME
環境変数を有効な Azure 可用性の場所として定義します。Azure CLI で次のコマンドを実行して、使用可能なリージョンを一覧表示します。
az account list-locations -o table
次のコードを 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/");
}
}