Exercício – Use a telemetria em um projeto .NET Aspire

Concluído

Neste exercício, use as APIs do OpenTelemetry para adicionar dados personalizados aos logs. Você também examina os logs para encontrar seus eventos personalizados.

Instalar pré-requisitos

Os pré-requisitos para esse exercício são:

  • .NET 8
  • Visualização do Visual Studio 2022
  • Docker Desktop
  • Carga de trabalho do .NET Aspire no Visual Studio

Se esses pacotes já estiverem instalados, você poderá pular para o início do trabalho com o log do OpenTelemetry.

Instalar o .NET 8

Siga esse link do .NET 8 e selecione o instalador correto para o seu sistema operacional. Por exemplo, se você estiver usando o Windows 11 e um processador moderno, selecione x64 .NET 8 SDK para Windows.

Após a conclusão do download, execute o instalador e siga as instruções. Em uma janela de terminal, execute o seguinte comando para verificar se a instalação foi bem-sucedida:

dotnet --version

Você deverá ver o número da versão do SDK do .NET instalado. Por exemplo:

8.0.300-preview.24203.14

Instale a versão prévia do Visual Studio 2022

Siga esse link Visual Studio 2022 Preview e selecione Baixar versão prévia. Após a conclusão do download, execute o instalador e siga as instruções.

Instalar o Docker Desktop

Siga esse link Docker Desktop e selecione o instalador correto para o seu sistema operacional. Após a conclusão do download, execute o instalador e siga as instruções. Para o melhor desempenho e compatibilidade, use o back-end WSL 2.

Abra o aplicativo Docker Desktop e aceite o contrato de serviço.

Instale a carga de trabalho do .NET Aspire no Visual Studio

Instale a carga de trabalho do .NET Aspire usando a CLI do .NET:

  1. Abra um terminal.

  2. Atualize as cargas de trabalho do .NET com esse comando:

    dotnet workload update
    

    Você deverá ver uma mensagem informando que as cargas de trabalho foram atualizadas com sucesso.

    No workloads installed for this feature band. To update workloads installed with earlier SDK versions, include the --from-previous-sdk option.
    Updated advertising manifest microsoft.net.sdk.ios.
    Updated advertising manifest microsoft.net.workload.mono.toolchain.net6.
    Updated advertising manifest microsoft.net.sdk.android.
    Updated advertising manifest microsoft.net.workload.emscripten.net7.
    Updated advertising manifest microsoft.net.workload.emscripten.net6.
    Updated advertising manifest microsoft.net.sdk.macos.
    Updated advertising manifest microsoft.net.workload.emscripten.current.
    Updated advertising manifest microsoft.net.workload.mono.toolchain.current.
    Updated advertising manifest microsoft.net.sdk.maui.
    Updated advertising manifest microsoft.net.workload.mono.toolchain.net7.
    Updated advertising manifest microsoft.net.sdk.maccatalyst.
    Updated advertising manifest microsoft.net.sdk.tvos.
    Updated advertising manifest microsoft.net.sdk.aspire.
    No workloads installed for this feature band. To update workloads installed with earlier SDK versions, include the --from-previous-sdk option.
    
    Successfully updated workload(s): .
    
  3. Instale a carga de trabalho do .NET Aspire com esse comando:

    dotnet workload install aspire
    

    Você deve ver uma mensagem informando que a carga de trabalho do Aspire foi instalada com sucesso.

    Installing Aspire.Hosting.Sdk.Msi.x64 ...... Done
    Installing Aspire.ProjectTemplates.Msi.x64 ..... Done
    Installing Aspire.Hosting.Orchestration.win-x64.Msi.x64 ............. Done
    Installing Aspire.Hosting.Msi.x64 ..... Done
    Installing Aspire.Dashboard.Sdk.win-x64.Msi.x64 ....... Done
    
    Successfully installed workload(s) aspire.
    
  4. Verifique se a carga de trabalho do .NET Aspire está instalada com esse comando:

    dotnet workload list
    

    Você deverá ver os detalhes da carga de trabalho do .NET Aspire.

     Installed Workload Id      Manifest Version      Installation Source
    ---------------------------------------------------------------------------------------------
    aspire                     8.0.0/8.0.100         SDK 8.0.300-preview.24203, VS 17.10.34902.84
    
    Use `dotnet workload search` to find additional workloads to install.
    

Clonar o aplicativo de exemplo

Vamos usar git para obter um aplicativo de exemplo. Como o aplicativo inclui o .NET Aspire, OpenTelemetry está incluído no registro em log, nas métricas e no rastreamento distribuído padrão:

  1. Na linha de comando, navegue até uma pasta de sua escolha onde você possa trabalhar com o código.

  2. Execute o seguinte comando para clonar o aplicativo de amostra Northern Mountains eShop:

    git clone -b aspire-telemetry https://github.com/MicrosoftDocs/mslearn-aspire-starter
    

Registrar uma mensagem usando a geração de origem em tempo de compilação

Podemos usar a geração de fonte em tempo de compilação para criar código de registro de desempenho automaticamente. Vamos implementar essa técnica para obter marcas de produtos:

  1. Abra o Visual Studio e selecione Abrir um projeto ou solução.

  2. Navegue até a pasta em que você clonou o projeto inicial. Abra a pasta iniciar, selecione eShop.aspiretelemetry.sln e, em seguida, selecione Abrir.

  3. No Gerenciador de Soluções, expanda WebApp > Services e clique duas vezes em CatalogService.cs.

  4. Localize a seguinte linha de código, que declara a classe CatalogService:

    public class CatalogService(HttpClient httpClient)
    
  5. Para usar a geração de fonte em tempo de compilação, temos que fazer essa classe partial e usar injeção de dependência para obter o logger. Modifique a linha para corresponder a esse código:

    public partial class CatalogService(HttpClient httpClient, ILogger<CatalogService> logger)
    
  6. A seguir, em qualquer lugar da classe CatalogService fora de outros métodos, crie um novo método static partial chamado LogGetBrands:

    public static partial void LogGetBrands(string uri, ILogger logger);
    
  7. Imediatamente antes dessa linha, adicione LoggerMessageAttribute e defina o nível de registro e a mensagem:

    [LoggerMessage(
    EventId = 0,
    Level = LogLevel.Information,
    Message = "Getting brands from URI: {uri}")]
    
  8. Localize o método GetBrands() e a seguinte linha de código nele:

    var uri = $"{remoteServiceBaseUrl}catalogBrands";
    
  9. Para chamar seu novo método de registro, insira o seguinte código após essa linha:

    LogGetBrands(uri, logger);
    
  10. Para salvar suas alterações pressione CTRL + S ou selecione Arquivo > Salvar tudo.

Teste a instrumentação

Agora, testamos o log de eventos de geração de código em tempo de compilação:

  1. No Visual Studio, para iniciar o aplicativo no modo de depuração, pressione F5 ou selecione Depurar > Iniciar Depuração.

  2. Se a mensagem Iniciar Docker Desktop aparecer, selecione Sim. O aplicativo é iniciado e exibe o painel do .NET Aspire em uma guia do navegador.

  3. Para fazer algumas solicitações, localize o projeto webapp na lista Recursos e selecione uma de suas entradas na coluna Ponto de extremidade:

    Captura de tela mostrando o painel do .NET Aspire e a localização dos links de endpoint do webapp.

  4. Uma nova guia do navegador aparece e exibe a página inicial das Montanhas do Norte. A lista de marcas está incluída no lado esquerdo. Alterne de volta para o painel do .NET Aspire e, no menu à esquerda, selecione Estruturado.

  5. Na caixa de texto Filtrar, digite Obter marcas. A página exibe seu evento registrado:

    Captura de tela mostrando eventos filtrados no painel do .NET Aspire.

  6. Na coluna Detalhes do seu evento, selecione Exibir. O painel abre um painel inferior para exibir os detalhes da entrada.

  7. Feche as guias do navegador e no Visual Studio pressione SHIFT + F5 ou selecione Depurar> Parar Depuração.

  8. Feche o Visual Studio.