檢閱 TrackAvailability() 測試結果
本文說明如何使用Log Analytics檢閱 Azure 入口網站 中的 TrackAvailability() 測試結果,並使用Log Analytics查詢數據。 標準測試應盡可能使用,因為它們只需要少量投資、不需要維護,而且有少數必要條件。
必要條件
- 工作區型 Application Insights 資源
- 存取 Azure Functions 中函式應用程式的原始程式碼
- 能夠撰寫 TrackAvailability()自定義程式碼的開發人員專業知識,專為您的特定業務需求量身打造
重要
TrackAvailability() 需要開發人員在撰寫和主幹化可能複雜的自定義程式代碼方面進行投資。
檢查可用性
從檢閱 Application Insights 資源 [可用性] 索引標籤上的圖表開始。
注意
使用 TrackAvailability()
建立的測試會出現在測試名稱旁的 CUSTOM 。
若要查看端對端交易詳細數據,請在 [鑽研] 底下選取 [成功] 或 [失敗]。 然後選取範例。 您也可以選取圖形上的數據點,以取得端對端交易詳細數據。
Log Analytics 中的查詢
您可以使用 Log Analytics 來檢視可用性結果、相依性等等。 若要深入瞭解Log Analytics,請參閱 記錄查詢概觀。
基本程式代碼範例
注意
此範例的設計只是為了說明 API 呼叫在 Azure 函式中運作方式 TrackAvailability()
的機制。 它不會示範如何撰寫基礎 HTTP 測試程式代碼或商業規則,以將此範例轉換成功能完整的可用性測試。 根據預設,如果您逐步執行此範例,您將建立基本可用性 HTTP GET 測試。
若要遵循這些指示,您必須使用 專用計劃 ,以允許在App Service 編輯器中編輯程式代碼。
建立定時器觸發程式函式
建立 Azure Functions 資源。
如果您已經有 Application Insights 資源:
根據預設,Azure Functions 會建立 Application Insights 資源。 但是,如果您想要使用您先前建立的資源,則必須在建立期間指定該資源。
請遵循如何透過下列修改建立 Azure Functions 資源的 指示:
在 [ 監視] 索引標籤上 ,選取 [Application Insights ] 下拉式方塊,然後輸入或選取資源的名稱。
如果您尚未為定時器觸發的函式建立 Application Insights 資源:
- 根據預設,當您建立 Azure Functions 應用程式時,它會為您建立 Application Insights 資源。 請遵循如何 建立 Azure Functions 資源的指示。
注意
您可以在取用、進階版 或 App Service 方案上裝載函式。 如果您要在虛擬網路後進行測試或測試非公用端點,則必須使用 進階版 方案來取代取用方案。 在 [ 主控 ] 索引標籤上選取您的方案。當您建立函數應用程式時,請確定已選取最新的 .NET 版本。
建立定時器觸發程式函式。
- 在您的函式應用程式中,選取 [ 函式] 索引標籤 。
- 選取 [新增]。 在 [ 新增函式 ] 窗格中,選取下列組態:
- 開發環境: 在入口網站中開發
- 選取範本: 定時器觸發程式
- 選取 [新增 ] 以建立定時器觸發程式函式。
在 App Service 編輯器中新增和編輯程式代碼
移至已部署的函式應用程式,然後在 [開發工具] 底下,選取 [App Service 編輯器] 索引標籤。
若要建立新的檔案,請在定時器觸發程式函式下按下按鼠右鍵(例如 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/");
}
}