Tutorial: Monitorizar e diagnosticar uma aplicação ASP.NET Core no Service Fabric com o Application InsightsTutorial: Monitor and diagnose an ASP.NET Core application on Service Fabric using Application Insights

Este tutorial é a quinta parte de uma série.This tutorial is part five of a series. Aborda os passos para configurar a monitorização e diagnóstico para uma aplicação ASP.NET Core em execução num cluster de Service Fabric com o Application Insights.It goes through the steps to set up monitoring and diagnostics for an ASP.NET Core application running on a Service Fabric cluster using Application Insights. Iremos recolher telemetria da aplicação desenvolvida na primeira parte do tutorial Criar uma aplicação .NET do Service Fabric.We will collect telemetry from the application developed in the first part of the tutorial, Build a .NET Service Fabric application.

Na quarta parte desta série de tutoriais, ficará a saber como:In part four of the tutorial series, you learn how to:

  • Configurar o Application Insights para a sua aplicaçãoConfigure Application Insights for your application
  • Recolher a telemetria de resposta para rastrear a comunicação baseada em HTTP entre os serviçosCollect response telemetry to trace HTTP-based communication between services
  • Utilizar a funcionalidade da Mapa da Aplicação no Application InsightsUse the App Map feature in Application Insights
  • Adicionar eventos personalizados através da API do Application InsightsAdd custom events using the Application Insights API

Nesta série de tutoriais, ficará a saber como:In this tutorial series you learn how to:

Pré-requisitosPrerequisites

Antes de começar este tutorial:Before you begin this tutorial:

Transferir a aplicação de votação de exemploDownload the Voting sample application

Se não conseguiu criar a aplicação de votação de exemplo na primeira parte desta série de tutoriais, pode transferi-la.If you did not build the Voting sample application in part one of this tutorial series, you can download it. Num terminal ou janela do comando, execute o seguinte comando para clonar o repositório da aplicação de exemplo para o seu computador local.In a command window or terminal, run the following command to clone the sample app repository to your local machine.

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

Configurar um recurso do Application InsightsSet up an Application Insights resource

O Application Insights é a plataforma de gestão de desempenho de aplicações do Azure e a plataforma recomendada do Service Fabric para a monitorização e o diagnóstico de aplicações.Application Insights is Azure's application performance management platform, and Service Fabric's recommended platform for application monitoring and diagnostics.

Para criar um recurso do Application Insights, navegue até ao portal do Azure.To create an Application Insights resource, navigate to Azure portal. Clique em Criar um recurso no menu de navegação esquerdo para abrir a cópia de segurança do Azure Marketplace.Click Create a resource on the left navigation menu to open up Azure Marketplace. Clique em Monitorização + Gestão e, em seguida, em Application Insights.Click on Monitoring + Management and then Application Insights.

Criar novo recurso de IA

Agora tem de preencher as informações necessárias sobre os atributos do recurso a criar.You will now need to fill out required information about the attributes of the resource to be created. Introduza um Nome, Grupo de Recursos, e Subscrição adequados.Enter an appropriate Name, Resource Group, and Subscription. Defina a Localização para onde pretende implementar o cluster do Service Fabric no futuro.Set the Location to where you would deploy your Service Fabric cluster in the future. Neste tutorial, iremos implementar a aplicação num cluster local, por isso, o campo Localização é irrelevante.In this tutorial, we will deploy the app to a local cluster so the Location field is irrelevant. O Tipo de Aplicação deve ser deixado como “Aplicação Web ASP.NET”.The Application Type should be left as "ASP.NET web application."

Atributos de recurso de IA

Assim que tiver preenchido as informações necessárias, clique em Criar para aprovisionar o recurso - deve demorar cerca de um minuto.Once you've filled out the required information, click Create to provision the resource - it should take about a minute.

Adicionar o Application Insights aos serviços da aplicaçãoAdd Application Insights to the application's services

Inicie o Visual Studio 2019 com privilégios elevados ao clicar com o botão direito no ícone do Visual Studio no Menu Iniciar e escolher executar como administrador.Launch Visual Studio 2019 with elevated privileges by right-clicking the Visual Studio icon in the Start Menu and choosing Run as administrator. Clique em Ficheiro > Abrir > Projeto/Solução e navegue para a aplicação de Votação (criada na primeira parte do tutorial ou clonado pelo Git).Click File > Open > Project/Solution and navigate to the Voting application (either created in part one of the tutorial or git cloned). Open voting.Open Voting.sln. Se lhe for pedido para restaurar pacotes NuGet da aplicação, clique em Sim.If prompted to restore the application's NuGet packages, click Yes.

Siga estes passos para configurar o Application Insights para serviços de VotingWeb e VotingData:Follow these steps to configure Application Insights for both the VotingWeb and VotingData services:

  1. Com o botão direito no nome do serviço e clique em adicionar > Serviços ligados > monitorização com o Application Insights.Right-click on the name of the service, and click Add > Connected Services > Monitoring with Application Insights.

    Configurar a IA

Nota

Dependendo do tipo de projeto, quando o botão direito do mouse no nome do serviço, poderá ter de clique em Adicionar -> telemetria do Application Insights...Depending on the project type, when you Right-click on the name of the service, you may need to click Add-> Application Insights Telemetry ...

  1. Clique em começar.Click Get started.

  2. Inicie sessão para a conta que utilizou para configurar a sua subscrição do Azure e selecione a subscrição na qual criou o recurso do Application Insights.Sign in to the account you used to set up your Azure subscription and select the subscription in which you created the Application Insights resource. Localize o recurso em Recurso do Application Insights existente na lista pendente "Recurso".Find the resource under Existing Application Insights resource in the "Resource" dropdown. Clique em Registar para adicionar o Application Insights ao seu serviço.Click Register to add Application Insights to your service.

    Registar IA

  3. Clique em Concluir assim que a caixa de diálogo que aparece concluir a ação.Click Finish once the dialog box that pops up completes the action.

Nota

Garanta que segue os passos acima para ambos os serviços da aplicação para concluir a configuração do Application Insights para a aplicação.Make sure to do the above steps for both of the services in the application to finish configuring Application Insights for the application. O mesmo recurso do Application Insights é utilizado para ambos os serviços para ver pedidos de entrada e saída e a comunicação entre os serviços.The same Application Insights resource is used for both of the services in order to see incoming and outgoing requests and communication between the services.

Adicionar o NuGet Microsoft.ApplicationInsights.ServiceFabric.Native aos serviçosAdd the Microsoft.ApplicationInsights.ServiceFabric.Native NuGet to the services

O Application Insights tem dois NuGets específicos do Service Fabric que podem ser utilizados dependendo do cenário.Application Insights has two Service Fabric specific NuGets that can be used depending on the scenario. Um é utilizado com serviços nativos do Service Fabric e o outro com contentores e executáveis convidados.One is used with Service Fabric's native services, and the other with containers and guest executables. Neste caso, iremos utilizar o NuGet Microsoft.ApplicationInsights.ServiceFabric.Native para tirar partido da compreensão de contexto de serviço que implica.In this case, we'll be using the Microsoft.ApplicationInsights.ServiceFabric.Native NuGet to leverage the understanding of service context that it brings. Para ler mais sobre o Application Insights SDK e os NuGets específicos do Service Fabric, veja Microsoft Application Insights for Service Fabric (Microsoft Application Insights para o Service Fabric).To read more about the Application Insights SDK and the Service Fabric specific NuGets, see Microsoft Application Insights for Service Fabric.

Eis os passos para configurar o pacote NuGet:Here are the steps to set up the NuGet package:

  1. Com o botão direito no solução "Votação" na parte superior do Explorador de soluções e clique em gerir pacotes NuGet para solução de... .Right-click on Solution 'Voting' at the very top of your Solution Explorer, and click Manage NuGet Packages for Solution....
  2. Clique em Procurar no menu de navegação superior da janela de "NuGet – Solução" e selecione a caixa Incluir Pré-lançamento junto à barra de pesquisa.Click Browse on the top navigation menu of the "NuGet - Solution" window, and check the Include prerelease box next to the search bar.

Nota

Poderá ter de instalar o pacote de Microsoft.ServiceFabric.Diagnostics.Internal de forma semelhante, se não for pré-instalado antes de instalar o pacote do Application InsightsYou may need to install the Microsoft.ServiceFabric.Diagnostics.Internal package in a similar fashion if not preinstalled before installing the Application Insights package

  1. Procure Microsoft.ApplicationInsights.ServiceFabric.Native e clique no pacote NuGet adequado.Search for Microsoft.ApplicationInsights.ServiceFabric.Native and click on the appropriate NuGet package.

  2. À direita, clique em duas caixas de seleção ao lado de ambos os serviços do aplicativo VotingWeb e VotingData e clique em instalar.On the right, click on the two check boxes next to the two services in the application, VotingWeb and VotingData and click Install. AI sdk NugetAI sdk Nuget

  3. Clique em OK sobre o pré-visualizar alterações caixa de diálogo que aparece e aceita o aceitação da licença.Click OK on the Preview Changes dialog box that appears, and accept the License Acceptance. Deste modo, irá concluir a adição do NuGet aos serviços.This will complete adding the NuGet to the services.

  4. Agora tem de configurar o inicializador de telemetria nos dois serviços.You now need to set up the telemetry initializer in the two services. Para tal, abra VotingWeb.cs e VotingData.cs.To do this, open up VotingWeb.cs and VotingData.cs. Para ambos os parâmetros, execute os dois passos seguintes:For both of them, do the following two steps:

    1. Adicione estes dois usando declarações na parte superior de cada <ServiceName >. cs, após o existente usando instruções:Add these two using statements at the top of each <ServiceName>.cs, after the existing using statements:
    using Microsoft.ApplicationInsights.Extensibility;
    using Microsoft.ApplicationInsights.ServiceFabric;
    
    1. Em ambos os ficheiros, no aninhada retornar declaração de estado de createserviceinstancelisteners () ou createservicereplicalisteners () , em ConfigureServices > serviços, com os outros serviços singleton declarados, adicione:In both files, in the nested return statement of CreateServiceInstanceListeners() or CreateServiceReplicaListeners(), under ConfigureServices > services, with the other singleton services declared, add:
    .AddSingleton<ITelemetryInitializer>((serviceProvider) => FabricTelemetryInitializerExtension.CreateFabricTelemetryInitializer(serviceContext))
    

    Deste modo, irá adicionar o Contexto do Serviço à sua telemetria, permitindo-lhe compreender melhor a origem da sua telemetria no Application Insights.This will add the Service Context to your telemetry, allowing you to better understand the source of your telemetry in Application Insights. A declaração devolver aninhada no VotingWeb.cs deve ter este aspeto:Your nested return statement in VotingWeb.cs should look like this:

    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();
    

    Da mesma forma, no VotingData.cs, deverá ter:Similarly, in VotingData.cs, you should have:

    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();
    

Volte a verificar que o UseApplicationInsights() método é chamado em ambos VotingWeb.cs e VotingData.cs conforme mostrado acima.Double check that the UseApplicationInsights() method is called in both VotingWeb.cs and VotingData.cs as shown above.

Nota

Esta aplicação de exemplo utiliza http para os serviços para comunicar.This sample app uses http for the services to communicate. Se desenvolver uma aplicação com o serviço Gestão remota V2 também terá de adicionar as seguintes linhas de código no mesmo local como fez acimaIf you develop an app with Service Remoting V2 you'd need to add the following lines of code as well in the same place as you did above

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

Agora, está pronto para implementar a aplicação.At this point, you are ready to deploy the application. Clique em Iniciar na parte superior (ou F5) e o Visual Studio irá criar e empacotar a aplicação, configurar o seu cluster local e implementar a aplicação no mesmo.Click Start at the top (or F5), and Visual Studio will build and package the application, set up your local cluster, and deploy the application to it.

Nota

Poderá receber um erro de compilação se não tiver uma versão atualizada do .NET Core SDK instalado.You may get a build error if you do not have an up-to-date version of the .NET Core SDK installed.

Assim que a aplicação concluir a implementação, aceda a localhost:8080, onde deve ser capaz de ver a aplicação de página única de Votação de Exemplo.Once the application is done deploying, head over to localhost:8080, where you should be able to see the Voting Sample single page application. Vote nalguns itens da sua preferência para criar alguns dados e telemetria de exemplo – escolhi as sobremesas!Vote for a few different items of your choice to create some sample data and telemetry - I went for desserts!

Votos de exemplo de IA

Não hesite em Remover algumas das opções de votos, bem como quando tiver terminado de adicionar alguns votos.Feel free to Remove some of the voting options as well when you're done adding a few votes.

Ver a telemetria e o mapa da aplicação no Application InsightsView telemetry and the App map in Application Insights

Vá para recurso do Application Insights no Portal do Azure.Head over to your Application Insights resource in Azure portal.

Clique em Descrição Geral para voltar à página de destino do seu recurso.Click Overview to go back to the landing page of your resource. Em seguida, clique em Pesquisar na parte superior para ver os rastreios a chegar.Then click Search in the top to see the traces coming in. Demora alguns minutos para que os rastreios apareçam no Application Insights.It takes a few minutes for traces to appear in Application Insights. Se não vir nenhum, aguarde um pouco e toque no botão Atualizar na parte superior.In the case that you do not see any, wait a minute and hit the Refresh button at the top. IA a ver rastreiosAI see traces

Desloque-se para baixo na janela Pesquisar para mostrar toda a telemetria de entrada que obtém inicialmente com o Application Insights.Scrolling down on the Search window will show you all the incoming telemetry you get out-of-the-box with Application Insights. Para cada ação realizada na aplicação de Votação, deverá haver um pedido PUT de saída de VotingWeb (Votos PUT/Put [nome]), um pedido PUT recebido de VotingData (PUT VoteData/Put [nome]), seguido de um par de pedidos GET para atualizar os dados que estão a ser apresentados.For each action that you took in the Voting application, there should be an outgoing PUT request from VotingWeb (PUT Votes/Put [name]), an incoming PUT request from VotingData (PUT VoteData/Put [name]), followed by a pair of GET requests for refreshing the data being displayed. Também haverá um rastreio de dependência de HTTP no localhost, uma vez que estes são pedidos HTTP.There will also be a dependency trace for HTTP on localhost, since these are HTTP requests. Eis um exemplo de que irá verá sobre como um voto é adicionado:Here is an example of what you will see for how one vote is added:

Rastreio de pedido de exemplo de IA

Pode clicar num dos rastreios para ver mais detalhes acerca do mesmo.You can click on one of the traces to view more details about it. Não há informações úteis sobre o pedido realizado pelo Application Insights, incluindo o Tempo de resposta e o URL do Pedido.There is useful information about the request that is provided by Application Insights, including the Response time and the Request URL. Além disso, uma vez que adicionou o NuGet específico do Service Fabric, irá também obter dados sobre a sua aplicação no contexto de um cluster do Service Fabric na secção Dados Personalizados abaixo.In addition, since you added the Service Fabric specific NuGet, you will also get data about your application in the context of a Service Fabric cluster in the Custom Data section below. Esta secção inclui o contexto de serviço, para que possa ver o PartitionID e ReplicaId da origem do pedido e localizar melhor os problemas quando diagnosticar erros na sua aplicação.This includes the service context, so you can see the PartitionID and ReplicaId of the source of the request, and better localize issues when diagnosing errors in your application.

Detalhes de rastreio de IA

Além disso, pode clicar em mapeamento da Aplicação no menu à esquerda na página Descrição Geral, ou clicar no ícone mapa da Aplicação de modo ser levado para o Mapa da Aplicação que mostra os dois serviços ligados.Additionally, you can click Application map on the left menu on the Overview page, or click on the App map icon to take you to the App Map showing your two services connected.

Detalhes de rastreio de IA

O Mapa da aplicação pode ajudar a compreender melhor a topologia da aplicação, especialmente quando começar a adicionar vários serviços que funcionam em conjunto.The App map can help you understand your application topology better, especially as you start adding multiple different services that work together. Também lhe dá dados básicos sobre taxas de êxito de pedidos e pode ajudar a diagnosticar pedidos falhados para compreender onde as coisas poderão ter corrido mal.It also gives you basic data on request success rates, and can help you diagnose failed request to understand where things may have gone wrong. Para saber mais sobre como utilizar o Mapa da aplicação, veja Mapa da Aplicação no Application Insights.To learn more about using the App map, see Application Map in Application Insights.

Adicionar instrumentação personalizada à sua aplicaçãoAdd custom instrumentation to your application

Apesar de o Application Insights proporcionar muita telemetria desde o início, poderá querer adicionar mais instrumentação personalizada.Though Application Insights provides a lot of telemetry out of the box, you may want to add further custom instrumentation. Tal pode ser baseado nas suas necessidades de negócio ou para melhorar o diagnóstico quando as coisas correrem mal na sua aplicação.This could be based on your business needs or to improve diagnostics when things go wrong in your application. O Application Insights tem um API para ingerir eventos e métricas personalizadas, sobre o qual pode ler mais aqui.Application Insights has an API to ingest custom events and metrics, which you can read more about here.

Vamos adicionar alguns eventos personalizados a VoteDataController.cs (em Controladores > VotingData) para controlar quando os votos estão a ser adicionados e eliminados do votesDictionary subjacente.Let's add some custom events to VoteDataController.cs (under VotingData > Controllers) to track when votes are being added and deleted from the underlying votesDictionary.

  1. Adicione using Microsoft.ApplicationInsights; no fim do outro através de declarações.Add using Microsoft.ApplicationInsights; at the end of the other using statements.
  2. Declare um novo TelemetryClient no início da classe, abaixo da criação do IReliableStateManager: private TelemetryClient telemetry = new TelemetryClient();.Declare a new TelemetryClient at the start of the class, under the creation of the IReliableStateManager: private TelemetryClient telemetry = new TelemetryClient();.
  3. Na função Put() , adicione um evento que confirme que um voto foi adicionado.In the Put() function, add an event that confirms a vote has been added. Adicione telemetry.TrackEvent($"Added a vote for {name}"); após a transação estar concluída, mesmo antes da declaração OkResult.Add telemetry.TrackEvent($"Added a vote for {name}"); after the transaction has completed, right before the return OkResult statement.
  4. Em Delete() , há um "if/else" com base na condição de que o votesDictionary contém votos para uma determinada opção de voto.In Delete(), there is an "if/else" based on the condition that the votesDictionary contains votes for a given voting option.
    1. Adicione um evento que confirme a eliminação de um voto na declaração if, após await tx.CommitAsync() : telemetry.TrackEvent($"Deleted votes for {name}");Add an event that confirms the deletion of a vote in the if statement, after the await tx.CommitAsync(): telemetry.TrackEvent($"Deleted votes for {name}");
    2. Adicione um evento para mostrar que a eliminação não ocorreu na declaração else, antes do elemento de matriz: telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");Add an event to show that the deletion did not take place in the else statement, before the return statement: telemetry.TrackEvent($"Unable to delete votes for {name}, voting option not found");

Eis um exemplo do aspeto que as funções Put() e Delete() poderão ter depois de adicionar os eventos:Here's an example of what your Put() and Delete() functions may look like after adding the events:

// 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();
        }
    }
}

Depois de realizar estas alterações, Inicie a aplicação para criar e implementar a versão mais recente da mesma.Once you're done making these changes, Start the application so that it builds and deploys the latest version of it. Assim que a aplicação concluir a implementação, aceda a localhost:8080 e adicione e elimine algumas opções de votos.Once the application is done deploying, head over to localhost:8080, and add and delete some voting options. Em seguida, volte para o recurso do Application Insights para ver os rastreios para a execução mais recente (como anteriormente, os rastreios podem demorar 1 a 2 minutos a aparecer no Application Insights).Then, go back to your Application Insights resource to see the traces for the latest run (as before, traces can take 1-2 min to show up in Application Insights). Para todos os votos adicionados e eliminados, deverá ver agora um "Evento Personalizado* juntamente com toda a telemetria de resposta.For all the votes you added and deleted, you should now see a "Custom Event* along with all the response telemetry.

eventos personalizados

Passos seguintesNext steps

Neste tutorial, ficou a saber como:In this tutorial, you learned how to:

  • Configurar o Application Insights para a sua aplicaçãoConfigure Application Insights for your application
  • Recolher a telemetria de resposta para rastrear a comunicação baseada em HTTP entre os serviçosCollect response telemetry to trace HTTP-based communication between services
  • Utilizar a funcionalidade da Mapa da Aplicação no Application InsightsUse the App Map feature in Application Insights
  • Adicionar eventos personalizados através da API do Application InsightsAdd custom events using the Application Insights API

Agora que concluiu a configuração da monitorização e diagnóstico para a sua aplicação ASP.NET, experimente o seguinte:Now that you have completed setting up monitoring and diagnostics for your ASP.NET application, try the following: