檢閱 TrackAvailability() 測試結果

本文說明如何使用Log Analytics檢閱 Azure 入口網站 中的 TrackAvailability() 測試結果,並使用Log Analytics查詢數據標準測試應盡可能使用,因為它們只需要少量投資、不需要維護,而且有少數必要條件。

必要條件

重要

TrackAvailability() 需要開發人員在撰寫和主幹化可能複雜的自定義程式代碼方面進行投資。

檢查可用性

從檢閱 Application Insights 資源 [可用性] 索引標籤上的圖表開始。

注意

使用 TrackAvailability() 建立的測試會出現在測試名稱旁的 CUSTOM

顯示 [可用性] 索引標籤並顯示成功結果的螢幕快照。

若要查看端對端交易詳細數據,請在 [鑽研] 底下選取 [成功] 或 [失敗]。 然後選取範例。 您也可以選取圖形上的數據點,以取得端對端交易詳細數據。

顯示選取範例可用性測試的螢幕快照。

顯示端對端交易詳細數據的螢幕快照。

Log Analytics 中的查詢

您可以使用 Log Analytics 來檢視可用性結果、相依性等等。 若要深入瞭解Log Analytics,請參閱 記錄查詢概觀

顯示可用性結果的螢幕快照。

顯示 [新增查詢] 索引標籤的螢幕快照,其相依性限製為 50。

基本程式代碼範例

注意

此範例的設計只是為了說明 API 呼叫在 Azure 函式中運作方式 TrackAvailability() 的機制。 它不會示範如何撰寫基礎 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(); 
        } 
    } 
    
    

多步驟 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/"); 
    } 
}

下一步