Digamos que este artículo es la segunda parte de: OpenTelemetry en .NET con Docker Compose…

Cuando hacemos microservicios debemos poder hacer un header propagation del Correlation Id.

¿qué es Correlation Id?

«Correlation ID» (Identificador de Correlación) es un concepto utilizado en la arquitectura de microservicios para rastrear y correlacionar las solicitudes que se propagan a través de diferentes componentes y servicios.

El «Correlation ID» es un identificador único que se agrega a una solicitud inicial y se transfiere a través de los distintos microservicios que intervienen en su procesamiento. Su objetivo principal es permitir un seguimiento efectivo y una depuración más fácil de las transacciones distribuidas en un entorno de microservicios.

Al utilizar un «Correlation ID», se facilita la identificación y el análisis de las interacciones entre microservicios relacionados, lo que resulta especialmente valioso en sistemas distribuidos complejos. Este identificador permite seguir el flujo de una solicitud a medida que se mueve a través de los diferentes servicios, lo que ayuda a identificar posibles problemas, errores o cuellos de botella en el camino.

 ¿header propagation?

La «header propagation» o propagación de encabezados se refiere al proceso de transferir información relevante, como el Correlation ID, a través de las solicitudes y respuestas en un entorno de microservicios.que genere.

Al propagar el Correlation ID en los encabezados de las solicitudes, se logra que cada microservicio que procesa la solicitud pueda acceder a ese identificador y utilizarlo para rastrear y correlacionar las transacciones relacionadas. Esto es fundamental para tener una visibilidad completa del flujo de la solicitud a través de los microservicios y poder realizar un seguimiento efectivo en caso de problemas o necesidad de análisis.

Y ¿cómo se hace en .NET?

Pues muy sencillo:

        services.AddOpenTelemetry()
            .WithTracing(builder => builder
                .AddAspNetCoreInstrumentation((options) =>
                {
                    options.RecordException = true;
                    options.EnrichWithHttpRequest = (activity, httpWebRequest) =>
                    {
                        activity.SetTag("CorrelationId", httpWebRequest.Headers["CorrelationId"]);
                    };
                    options.EnrichWithException = (activity, exception) =>
                    {
                        activity.SetTag("ExceptionType", exception.GetType().ToString());
                        activity.SetTag("stackTrace", exception.StackTrace);
                    };
                })

Tambien puedes ampliar o usar el AddHttpClientInstrumentation, para dejar un poco más de información a este ejemplo. Solo tienes que añadir ese NuGet.

Esto viene a completar el ejemplo del anterior artículo.

Modificamos nuestra API para que salte un error:

int j = 0;
int i = 1 / j;

Y observamos la traza :