Поделиться через


Руководство. Мониторинг и диагностика приложения Service Fabric с помощью приложения Аналитика

Это руководство является частью пяти в серии. В нем описаны шаги по настройке мониторинга и диагностика для приложения ASP.NET Core, работающего в кластере Azure Service Fabric с помощью приложения Аналитика. Данные телеметрии собираются из приложения, разработанного в одной из серии учебников.

В этом руководстве описано следующее:

  • Настройка ресурса Application Insights
  • Добавление Application Insights в службы приложения
  • Просмотр данных телеметрии и карты приложений в приложении Аналитика
  • Добавление пользовательского инструментария для приложения

В серии учебников показано, как:

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

Перед началом работы с этим руководством выполните следующие действия:

Скачивание примера приложения для голосования

Если вы не построили пример приложения для голосования в одной из этой серии руководств, его можно скачать. В командном окне или терминале выполните следующую команду, чтобы клонировать пример репозитория приложений на локальный компьютер:

git clone https://github.com/Azure-Samples/service-fabric-dotnet-quickstart

Настройка ресурса Application Insights

Аналитика приложения — это платформа управления производительностью приложений Azure. Рекомендуется использовать Аналитика приложений для мониторинга приложений и диагностика в Service Fabric.

Чтобы создать ресурс приложения Аналитика, перейдите к портал Azure. Выберите Создать ресурс. В меню портала выберите "Мониторинг и диагностика". В столбце популярных служб Azure в разделе "Приложение Аналитика" выберите "Создать".

Снимок экрана, на котором показано, как создать ресурс приложения Аналитика.

Введите или выберите значения для подписки, группы ресурсов и имени. В регионе выберите место для развертывания кластера Service Fabric в будущем. В этом руководстве мы развертываем приложение в локальном кластере, поэтому регион Azure не имеет значения. Для типа приложения оставьте ASP.NET веб-приложение.

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

Когда вы ввели или выбрали необходимые сведения, нажмите кнопку "Создать ", чтобы подготовить ресурс. Ресурс развертывается примерно за одну минуту.

Добавление Application Insights в службы приложения

Откройте Visual Studio 2019 с помощью параметра "Запуск от имени администратора " (щелкните правой кнопкой мыши значок Visual Studio в меню "Пуск "). Выберите "Открыть>файл>" или "Решение" и перейдите в приложение "Голосование" (созданное в одной части руководства или клонированного из GitHub). Откройте Voting.sln. Если вам будет предложено восстановить пакеты NuGet приложения, нажмите кнопку "Да".

Чтобы настроить Аналитика приложения для служб VotingWeb и VotingData, выполните следующие действия.

  1. Щелкните правой кнопкой мыши имя службы и выберите "Добавить> Подключение мониторинга служб>" с помощью приложения Аналитика.

    Снимок экрана: настройка служб приложений Аналитика.

    Примечание.

    В зависимости от типа проекта при щелчке правой кнопкой мыши имя службы может потребоваться выбрать "Добавить", а затем выбрать приложение Аналитика телеметрии.

  2. Выберите Приступая к работе.

  3. Войдите в учетную запись, используемую для подписки Azure, и выберите подписку, в которой вы создали ресурс приложения Аналитика. Чтобы найти ресурс, в ресурсе перейдите к ресурсу Аналитика существующего приложения. Выберите Регистрация, чтобы добавить Application Insights в службу.

    Снимок экрана: регистрация приложения Аналитика.

  4. Нажмите Готово.

Примечание.

Выполните эти действия для обеих служб в приложении, чтобы завершить настройку приложения Аналитика для приложения. Для служб используется один и тот же ресурс Application Insights, чтобы отслеживать входящие и исходящие запросы, а также обмен данными между службами.

Добавление пакета NuGet Microsoft.ApplicationInsights.ServiceFabric.Native в службы

Приложение Аналитика содержит два пакета NuGet, относящиеся к Service Fabric, которые можно использовать в зависимости от сценария. Один используется с собственными службами Service Fabric, а другой — с контейнерами и гостевыми исполняемыми файлами. В этом случае мы используем Microsoft.Application Аналитика. Пакет NuGet ServiceFabric.Native, чтобы узнать о контексте службы. Дополнительные сведения о пакете SDK для приложений Аналитика и пакетах NuGet для Service Fabric см. в Аналитика приложения Майкрософт для Service Fabric.

Чтобы настроить пакет NuGet, выполните следующие действия.

  1. В Обозреватель решений щелкните правой кнопкой мыши решение "Голосование" и выберите пункт "Управление пакетами NuGet для решения".

  2. В диалоговом окне "Решение NuGet" нажмите кнопку "Обзор". Установите флажок Включить предварительные выпуски.

    Примечание.

    Возможно, потребуется установить пакет Microsoft.ServiceFabric.Diagnostics.Internal таким же образом, если он не был предварительно установлен перед установкой пакета приложения Аналитика.

  3. Найдите Microsoft.Application Аналитика. ServiceFabric.Native и выберите пакет NuGet.

  4. В правой области выберите элемент VotingWeb проверка box и элемент VotingData проверка box. Выберите Установить.

    Снимок экрана: пакет SDK для приложений Аналитика в NuGet.

  5. В диалоговом окне "Предварительные изменения" нажмите кнопку "ОК ", чтобы принять лицензию. Пакеты NuGet добавляются в службы.

  6. Затем настройте инициализатор телеметрии в двух службах. Откройте VotingWeb.cs и VotingData.cs. Выполните следующие действия в обоих файлах кода:

    1. Добавьте эти две using инструкции в верхней части каждого файла после существующих using инструкций:

      using Microsoft.ApplicationInsights.Extensibility;
      using Microsoft.ApplicationInsights.ServiceFabric;
      
    2. В обоих файлах вложенной return инструкции CreateServiceInstanceListeners() или CreateServiceReplicaListeners()в разделе ConfigureServices>servicesс другими службами одноэлементных служб, объявленных, добавьте:

      .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))
      

      Этот код добавляется Service Context в данные телеметрии, чтобы лучше понять источник телеметрии в приложении Аналитика. Вложенный return оператор в VotingWeb.cs теперь выглядит примерно так:

      return new WebHostBuilder()
          .UseKestrel()
          .ConfigureServices(
              services => services
                  .AddSingleton<HttpClient>(new HttpClient())
                  .AddSingleton<FabricClient>(new FabricClient())
                  .AddSingleton<StatelessServiceContext>(serviceContext)
                  .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)))
          .UseContentRoot(Directory.GetCurrentDirectory())
          .UseStartup<Startup>()
          .UseApplicationInsights()
          .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
          .UseUrls(url)
          .Build();
      

В VotingData.cs код теперь выглядит примерно так:

return new WebHostBuilder()
    .UseKestrel()
    .ConfigureServices(
        services => services
            .AddSingleton<StatefulServiceContext>(serviceContext)
            .AddSingleton<IReliableStateManager>(this.StateManager)
            .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext)))
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseStartup<Startup>()
    .UseApplicationInsights()
    .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseUniqueServiceUrl)
    .UseUrls(url)
    .Build();

Двойной проверка вызов UseApplicationInsights() метода как в VotingWeb.cs, так и в VotingData.cs, как показано в примерах.

Примечание.

В этом примере приложения используется HTTP для обмена данными служб. Если вы разрабатываете приложение с помощью удаленного взаимодействия Service Fabric версии 2, добавьте следующие строки в том же расположении в коде:

ConfigureServices(services => services
    ...
    .AddSingleton<ITelemetryModule>(new ServiceRemotingDependencyTrackingTelemetryModule())
    .AddSingleton<ITelemetryModule>(new ServiceRemotingRequestTrackingTelemetryModule())
)

На этом этапе вы готовы развернуть приложение. Нажмите кнопку "Пуск" (или выберите F5). Visual Studio создает и упаковает приложение, настраивает локальный кластер и развертывает приложение в кластере.

Примечание.

Если у вас нет актуальной версии пакета SDK для .NET Core, может возникнуть ошибка сборки.

При развертывании приложения перейдите в папку localhost:8080, в которой выполняется одностраничное приложение для голосования. Проголосуйте за несколько различных элементов вашего выбора, чтобы создать некоторые примеры данных и телеметрии. Например, десерты!

Снимок экрана: пример голосования по типам десерта.

Вы также можете удалить некоторые варианты голосования, когда вы закончите добавление нескольких голосов.

Просмотр данных телеметрии и карты приложений в приложении Аналитика

Вернитесь к ресурсу Application Insights на портале Azure.

Выберите "Обзор", чтобы вернуться к области обзора ресурса. Выберите "Поиск", чтобы просмотреть трассировки, в которые будут входить. Для появления трассировок в Application Insights требуется несколько минут. Если трассировка не отображается, подождите минуту и нажмите кнопку "Обновить ".

Снимок экрана, на котором показан режим трассировки приложения Аналитика.

Прокрутите вниз в окне поиска, чтобы просмотреть все входящие данные телеметрии, которые поставляется с приложением Аналитика. Для каждого действия, которое вы приняли в приложении голосования, должен быть исходящий запрос PUT из VotingWeb (PUT Votes/Put [name]), входящий запрос PUT из VotingData (PUT VoteData /Put [имя]), а затем пара запросов GET для обновления отображаемых данных. Также будет трассировка зависимостей для HTTP, localhost так как эти запросы являются HTTP-запросами. Ниже приведен пример того, что вы видите, как добавляется один голос:

Снимок экрана: пример трассировки запроса в приложении Аналитика.

Вы можете выбрать трассировку, чтобы просмотреть дополнительные сведения об этом. Приложение Аналитика содержит полезные сведения о запросе, включая значения времени отклика и URL-адрес запроса. Так как вы добавили NuGet для Service Fabric, вы также получаете данные о приложении в контексте кластера Service Fabric в разделе "Пользовательские данные ". Данные включают контекст службы, чтобы вы могли видеть значения PartitionID и ReplicaId источника запроса и лучше изолировать проблемы при диагностике ошибок в приложении.

Снимок экрана: сведения о трассировки Аналитика приложения.

Чтобы перейти на карту приложений, выберите " Карта приложения" в меню ресурсов на панели "Обзор " или значок карты приложения. На карте показаны две службы, подключенные.

Снимок экрана: карта приложения в меню ресурсов.

Карта приложений поможет лучше понять топологию приложения, особенно при начале добавления служб, которые работают вместе. Он также предоставляет базовые данные о частоте успешного выполнения запросов, и это может помочь вам диагностировать неудачный запрос, чтобы понять, где дело пошло не так. Дополнительные сведения см. в статье "Карта приложений" в Аналитика приложения.

Добавление пользовательского инструментария для приложения

Хотя приложение Аналитика предоставляет данные телеметрии из поля, может потребоваться добавить настраиваемое инструментирование. Возможно, у вас есть бизнес-потребности в пользовательском инструментировании или вы хотите улучшить диагностика, когда вещи идут не так в приложении. Вы можете получать пользовательские события и метрики с помощью API приложения Аналитика.

Затем добавьте некоторые пользовательские события в VoteDataController.csVotingData>Controllers) для отслеживания добавления и удаления голосов из базовой votesDictionaryбазы:

  1. Добавьте using Microsoft.ApplicationInsights; в конце других using инструкций.

  2. Объявите новое значение в TelemetryClient начале класса при создании IReliableStateManager: private TelemetryClient telemetry = new TelemetryClient();.

  3. Put() В функции добавьте событие, которое подтверждает добавление голосования. Добавьте telemetry.TrackEvent($"Added a vote for {name}"); после завершения транзакции прямо перед оператором return OkResult .

  4. В Delete(), есть "if/else" на основе условия, содержащего votesDictionary голоса за конкретный вариант голосования.

    1. Добавьте событие, которое подтверждает удаление голосования в if заявлении после await tx.CommitAsync(): telemetry.TrackEvent($"Deleted votes for {name}");
    2. Добавьте событие, чтобы показать, что удаление не произошло в else инструкции, перед инструкцией return : telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");

Ниже приведен пример того, как выглядят ваши Put() функции и Delete() функции после добавления событий:

// PUT api/VoteData/name
[HttpPut("{name}")]
public async Task<IActionResult> Put(string name)
{
    var votesDictionary = await this.stateManager.GetOrAddAsync<IReliableDictionary<string, int>>("counts");

    using (ITransaction tx = this.stateManager.CreateTransaction())
    {
        await votesDictionary.AddOrUpdateAsync(tx, name, 1, (key, oldvalue) => oldvalue + 1);
        await tx.CommitAsync();
    }

    telemetry.TrackEvent($"Added a vote for {name}");
    return new OkResult();
}

// DELETE api/VoteData/name
[HttpDelete("{name}")]
public async Task<IActionResult> Delete(string name)
{
    var votesDictionary = await this.stateManager.GetOrAddAsync<IReliableDictionary<string, int>>("counts");

    using (ITransaction tx = this.stateManager.CreateTransaction())
    {
        if (await votesDictionary.ContainsKeyAsync(tx, name))
        {
            await votesDictionary.TryRemoveAsync(tx, name);
            await tx.CommitAsync();
            telemetry.TrackEvent($"Deleted votes for {name}");
            return new OkResult();
        }
        else
        {
            telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");
            return new NotFoundResult();
        }
    }
}

Завершив внесение этих изменений, нажмите кнопку "Пуск " в приложении, чтобы она создавала и развертывала последнюю версию. После завершения развертывания приложения перейдите к разделу localhost:8080. Добавьте и удалите некоторые варианты голосования. Затем вернитесь к ресурсу приложения Аналитика, чтобы просмотреть трассировки для последнего выполнения (трассировка занимает от 1 до 2 минут, чтобы отображаться в приложении Аналитика). Для всех добавленных и удаленных голосов теперь должна появиться запись для настраиваемого события с связанной телеметрией ответа.

Снимок экрана: пользовательские события.