Ejercicio: adición de OpenTelemetry a una aplicación nativa de nube
En este ejercicio, añadirás un nuevo proyecto de diagnóstico a esta eShopLite solución. Verá cómo incluir los paquetes NuGet de OpenTelemetry y, a continuación, agregar observabilidad al servicio Products .
Abra el entorno de desarrollo y cree los recursos de Azure.
Puede optar por usar un espacio de código de GitHub que hospede el ejercicio o complete el ejercicio localmente en Visual Studio Code.
Para usar un espacio de código, cree un espacio de código de GitHub preconfigurado con esta plantilla de creación de Codespace.
Este paso tarda varios minutos mientras GitHub crea y configura el espacio de código. Una vez finalizado el proceso, verá los archivos de código del ejercicio. El código usado para el resto de este módulo está en el directorio /dotnet-observability .
Para usar Visual Studio Code, clone el repositorio https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative en la máquina local. A continuación:
- Instale cualquier requisito del sistema para ejecutar Dev Container en Visual Studio Code.
- Asegúrese de que Docker se está ejecutando.
- En una nueva ventana de Visual Studio Code, abra la carpeta del repositorio clonado.
- Presione Ctrl+Mayús+P para abrir la paleta de comandos.
- Búsqueda: >Contenedores de desarrollo: Recompile y vuelva a abrir en el contenedor.
- Seleccione eShopLite - dotnet-observability en la lista desplegable. Visual Studio Code crea el contenedor de desarrollo localmente.
Adición de un proyecto de diagnóstico a la solución
El primer paso para agregar observabilidad a la eShopLite aplicación es introducir un nuevo proyecto de diagnóstico en la solución. Este proyecto contiene todos los paquetes y configuraciones de OpenTelemetry que usará para agregar observabilidad a la aplicación.
- En la paleta de comandos de Codespace, escriba >.NET: Abrir solución.
- Seleccione dotnet-observability/eShopLite/eShopLite.sln.
- En el Explorador de soluciones, en la parte inferior del panel EXPLORADOR , haga clic con el botón derecho en la solución eShopLite y, a continuación, seleccione Nuevo proyecto.
- En el cuadro de diálogo Seleccionar una plantilla para crear un nuevo proyecto de .NET , seleccione Biblioteca de clases (Común, Biblioteca).
- En el campo Nombre , escriba Diagnósticos.
- En el menú desplegable Proyecto será creado en, asegúrese de que el directorio de ruta de acceso del archivo sea /workspaces/mslearn-dotnet-cloudnative/dotnet-observability/eShopLite/.
Adición de paquetes de OpenTelemetry
Ahora agregue los paquetes de OpenTelemetry al nuevo proyecto de diagnóstico.
Con el panel TERMINAL situado en la parte inferior de Codespace, vaya a la carpeta del proyecto Diagnósticos :
cd dotnet-observability/eShopLite/DiagnosticsEjecute estos
dotnet addcomandos:dotnet add package OpenTelemetry.Exporter.Console dotnet add package OpenTelemetry.Extensions.Hosting dotnet add package OpenTelemetry.Instrumentation.AspNetCore dotnet add package OpenTelemetry.Instrumentation.EventCounters --prerelease dotnet add package OpenTelemetry.Instrumentation.Runtime dotnet add package OpenTelemetry.Instrumentation.SqlClient --prerelease dotnet add package OpenTelemetry.Instrumentation.HttpEn el panel EXPLORADOR , expanda la carpeta Diagnostics y, a continuación, seleccione Diagnostics.csproj.
Cambie el
Project Sdkde la parte superior a:<Project Sdk="Microsoft.NET.Sdk.Web">El código anterior permite usar la clase
IConfigurationen tu código.En el
<PropertyGroup>, agregue el tipo de salida.<OutputType>Library</OutputType>El código anterior garantiza que el proyecto se compila como una biblioteca. De lo contrario, el compilador espera un
Program.csarchivo con unmainmétodo .
Adición del código para usar OpenTelemetry
Con los paquetes de OpenTelemetry agregados, ahora se introduce el código para hacer uso de ellos.
En el panel EXPLORADOR , haga clic con el botón derecho en el archivo Class1.cs y seleccione Cambiar nombre.
Cambie el nombre del archivo a DiagnosticServiceCollectionExtensions.cs.
Reemplace el código del archivo por el siguiente código:
using OpenTelemetry.Metrics; using OpenTelemetry.Resources; using OpenTelemetry.Trace; namespace Microsoft.Extensions.DependencyInjection; public static class DiagnosticServiceCollectionExtensions { public static IServiceCollection AddObservability(this IServiceCollection services, string serviceName, IConfiguration configuration) { // create the resource that references the service name passed in var resource = ResourceBuilder.CreateDefault().AddService(serviceName: serviceName, serviceVersion: "1.0"); // add the OpenTelemetry services var otelBuilder = services.AddOpenTelemetry(); otelBuilder // add the metrics providers .WithMetrics(metrics => { metrics .SetResourceBuilder(resource) .AddRuntimeInstrumentation() .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddEventCountersInstrumentation(c => { c.AddEventSources( "Microsoft.AspNetCore.Hosting", "Microsoft-AspNetCore-Server-Kestrel", "System.Net.Http", "System.Net.Sockets"); }) .AddMeter("Microsoft.AspNetCore.Hosting", "Microsoft.AspNetCore.Server.Kestrel") .AddConsoleExporter(); }) // add the tracing providers .WithTracing(tracing => { tracing.SetResourceBuilder(resource) .AddAspNetCoreInstrumentation() .AddHttpClientInstrumentation() .AddSqlClientInstrumentation(); }); return services; } }En el panel TERMINAL , ejecute este comando para compilar el proyecto:
dotnet buildDebería mostrarse una salida similar a esta de ejemplo:
Build succeeded. 0 Warning(s) 0 Error(s)El proyecto Diagnostics ya está listo para ser utilizado por el servicio Products .
En el panel EXPLORADOR , en EXPLORADOR DE SOLUCIONES, haga clic con el botón derecho en el proyecto Productos y, a continuación, seleccione Agregar referencia de proyecto.
Seleccione Diagnósticos.
En el panel EXPLORADOR , expanda la carpeta Products y, a continuación, seleccione Program.cs.
En el comentario de código
// Add observability code here, agregue una llamada al método Diagnóstico:builder.Services.AddObservability("Products", builder.Configuration);En el panel TERMINAL , vaya a la carpeta Productos :
cd ../ProductsEjecute este comando para compilar el proyecto:
dotnet buildDebería mostrarse una salida similar a esta de ejemplo:
Build succeeded. 0 Warning(s) 0 Error(s)
Actualización de la configuración de Docker y ejecución de la aplicación
En el panel TERMINAL , vaya a la raíz de la carpeta dotnet-observability :
cd .. dotnet publish /p:PublishProfile=DefaultContainerEjecute estos comandos de Docker:
cd /workspaces/mslearn-dotnet-cloudnative/dotnet-observability/ docker compose upLos contenedores de back-end (servicio de Productos) y front-end (servicio de Store) deberían compilarse. A continuación, se inicia la aplicación.
Si va a realizar este ejercicio en un espacio de código, seleccione la pestaña PUERTOS en la parte inferior de la ventana de Visual Studio Code. Seleccione el vínculo Abrir en el explorador junto al servicio front-end .
Si va a realizar este ejercicio localmente en Visual Studio Code, en una nueva pestaña del explorador, vaya a la aplicación en
http://localhost:32000.En la aplicación, seleccione Productos en la barra de navegación.
Seleccione Actualizar stock para varios de los productos. A continuación, en el cuadro de diálogo, cambie el valor de stock y seleccione Actualizar.
Seleccione la pestaña TERMINAL y desplácese por los mensajes. Tenga en cuenta que hay mensajes de OpenTelemetry como:
backend-1 | Export ec.Microsoft-AspNetCore-Server-Kestrel.connection-queue-length, Meter: OpenTelemetry.Instrumentation.EventCounters/1.5.1.1 backend-1 | (2023-11-09T19:55:14.8933518Z, 2023-11-09T20:04:44.8596671Z] http.request.method: PUT http.response.status_code: 200 http.route: /api/Stock/{id} network.protocol.name: http network.protocol.version: 1.1 url.scheme: http Histogram backend-1 | Value: Sum: 0.05144170000000001 Count: 4 Min: 0.0039736 Max: 0.0359739Presione Ctrl+C para detener la aplicación.
Ha agregado correctamente OpenTelemetry al servicio Products . En la siguiente unidad, verá cómo hacer un mejor uso de los datos de telemetría mediante su visualización en herramientas como Prometheus y Grafana.
