es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Azure Insights: seguimiento de propiedad personalizada a través de la cadena de ejecuciones de funciones.

Tengo un flujo de llamadas de Función1->Función2->Servicio en mi aplicación de Azure. Hay múltiples llamadas concurrentes a Función1 y cada una podría ser identificada por algún ID de documento único de entrada. Me pregunto cómo puedo establecer algo en el contexto de Azure Insight en el código de C# al comienzo de Función1, para que cualquier [traces] o [exceptions] o [dependencies] registrado en Azure Insights en cualquiera de las llamadas de seguimiento contenga el ID del documento. Me di cuenta de que todos ellos tienen una lista anidada de propiedades customDimension, por lo que tal vez pueda agregar una propiedad más allí. Además, si Función1 se ejecuta varias veces en paralelo, no quiero que se mezclen estos ID de documentos.

El objetivo es poder rastrear este ID de documento en todo tipo de registros con la menor cantidad adicional de código en C#, evitando pasar el ID de documento de una función a otras funciones y otros servicios, para poder identificar inmediatamente a qué documento pertenecía la ejecución, ya sea en registros de seguimiento, excepciones u otros. ¿Es posible?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, es posible establecer una dimensión personalizada en Azure Application Insights en código C# para rastrear el ID del documento. Esto se puede lograr agregando el siguiente código al comienzo de la función Function1:

    TelemetryClient telemetryClient = new TelemetryClient();
    telemetryClient.Context.Operation.Properties["DocumentId"] = documentId;
    

    Este código establece una dimensión personalizada “DocumentId” con el valor del ID del documento de entrada en el contexto de la operación actual en Azure Insights. Esto significa que cualquier registro generado por Function1, Function2 o el Servicio asociado a esta operación tendrá esta dimensión personalizada adjunta.

    Para asegurarse de que los ID de los documentos no se mezclen cuando Function1 se ejecute múltiples veces en paralelo, puede utilizar la función async local introducida en C# 7. Esto le permite almacenar el ID del documento de manera segura para el subproceso en una variable local que solo es accesible dentro del ámbito de la operación actual. Puede agregar el siguiente código al comienzo de la función Function1:

    AsyncLocal<string> documentIdAsyncLocal = new AsyncLocal<string>();
    documentIdAsyncLocal.Value = documentId;
    

    Este código crea un nuevo objeto AsyncLocal que puede almacenar el ID del documento y establece su valor en el ID del documento de entrada. Este valor está vinculado al contexto de la operación actual y no se comparte con otras operaciones concurrentes.

    Con estas adiciones a su código, puede rastrear fácilmente el ID del documento en todos los registros generados por la aplicación de Azure.

Comments are closed.