Просмотр результатов теста TrackAvailability()

В этой статье объясняется, как просмотреть результаты теста TrackAvailability() в портал Azure и запросить данные с помощью Log Analytics. Стандартные тестывсегда следует использовать, если это возможно , так как они требуют мало инвестиций, без обслуживания и имеют несколько предварительных требований.

Необходимые компоненты

Внимание

TrackAvailability() требует вложения разработчика в написание и maintanining потенциально сложного пользовательского кода.

Проверить доступность

Начните с просмотра графа на вкладке "Доступность" ресурса приложения Аналитика.

Примечание.

Тесты, созданные с TrackAvailability() помощью custom, будут отображаться рядом с именем теста.

Снимок экрана: вкладка

Чтобы просмотреть подробные сведения о транзакциях, в разделе "Детализация" выберите "Успешно" или "Сбой". Затем выберите пример. Можно также перейти к подробным сведениям о сквозной транзакции, выбрав на диаграмме точку данных.

Снимок экрана: выбор примера теста доступности.

Снимок экрана: сведения о сквозной транзакции.

Запрос в Log Analytics

Вы можете использовать Log Analytics для просмотра результатов доступности, зависимостей и т. д. Дополнительные сведения о Log Analytics см. в обзоре запросов журнала.

Снимок экрана: результаты доступности.

Снимок экрана: вкладка

Базовый пример кода

Примечание.

Этот пример предназначен исключительно для отображения механики TrackAvailability() работы вызова API в функции Azure. В нем не показано, как написать базовый код теста HTTP или бизнес-логику, необходимую для включения этого примера в полнофункциональный тест доступности. По умолчанию, если вы изучите этот пример, вы создадите базовый тест HTTP GET доступности.

Для выполнения этих инструкций необходим выделенный план, позволяющий редактировать код в Редакторе службы приложений.

Создание функции, активируемой с помощью таймера

  1. Создайте ресурс Функций Azure.

    • Если у вас уже есть ресурс приложения Аналитика:

      • По умолчанию Функции Azure создает ресурс приложения Аналитика. Но если вы хотите использовать созданный ранее ресурс, необходимо указать, что во время создания.

      • Следуйте инструкциям по созданию ресурса Функций Azure со следующим изменением.

        На вкладке "Мониторинг" выберите раскрывающийся список "Приложение Аналитика", а затем введите или выберите имя ресурса.

        Снимок экрана: выбор существующего ресурса приложения Аналитика на вкладке

    • Если у вас еще нет ресурса application Аналитика, созданного для функции таймера:

      • По умолчанию при создании приложения Функции Azure он создает ресурс Аналитика приложения. Следуйте инструкциям по созданию ресурса Функций Azure.

    Примечание.

    Вы можете разместить свои функции в плане потребления, Премиум или службы приложений. Если вы тестируете виртуальную сеть или тестируете неопубликованные конечные точки, вам потребуется использовать план Premium вместо плана потребления. Выберите план на вкладке "Размещение ". Убедитесь, что последняя версия .NET выбрана при создании приложения-функции.

  2. Создание функции, активируемой с помощью таймера.

    1. В приложении-функции перейдите на вкладку Функции.
    2. Выберите Добавить. На панели "Добавить функцию" выберите следующие конфигурации:
      1. Среда разработки. Разработка на портале
      2. Выбор шаблона: триггер таймера
    3. Нажмите кнопку "Добавить ", чтобы создать функцию триггера таймера.

    Снимок экрана, на котором показано, как добавить функцию триггера таймера в приложение-функцию.

Добавление и изменение кода в Редакторе службы приложений

Перейдите в развернутый приложение-функцию и в разделе "Средства разработки" выберите вкладку редактора Служба приложений.

Чтобы создать файл, щелкните правой кнопкой мыши функцию триггера таймера (например, TimerTrigger1) и выберите новый файл. Затем введите имя файла и нажмите клавишу ВВОД.

  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> 
    

    Снимок экрана: 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/"); 
    } 
}

Следующие шаги