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 Functions v3 ya no realiza un seguimiento automático de las dependencias después de agregar la TelemetryConfiguration inyectada.

Actualmente tengo una función de Azure v3 en .netcore 3.1 con el siguiente host.json:

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": false,
        "excludedTypes": "Exception"
      },
      "dependencyTrackingOptions": {
        "enableSqlCommandTextInstrumentation": true
      }
    },
    "logLevel": {
      "Function": "Information",
      "Host.Aggregator": "Information",
      "Host.Results": "Information",
      "default": "Warning"
    }
  }
}

Las cosas estaban funcionando bien con las dependencias de SQL que se rastreaban automáticamente en la aplicación Insights. Sin embargo, necesito también rastrear las llamadas a Redis, así que he añadido telemetryClient a través de la inyección de dependencias como se recomienda con:

telemetryClient = new TelemetryClient(telemetryConfiguration);

Después de hacer esto, solo recibo las llamadas de dependencia que escribo manualmente a través del cliente de telemetría y ya no obtengo las llamadas SQL predeterminadas.

He intentado crear manualmente un DependencyCollector.DependencyTrackingTelemetryModule e inicializarlo con la telemetryConfiguration inyectada y estableciendo EnableSqlCommandTextInstrumentation = true, pero aunque esto habilita el seguimiento de SQL, no lo vincula al contexto de llamada.

¿Alguien ha tenido este problema antes o tiene algún consejo sobre cómo implementar adecuadamente la telemetría personalizada y al mismo tiempo mantener el rastreo de dependencias predeterminado?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que después de agregar telemetryClient mediante la inyección de dependencia, el seguimiento de dependencias SQL predeterminado en app insights dejó de funcionar. El OP intentó crear manualmente un DependencyTrackingTelemetryModule e inicializarlo con la telemetryConfiguration inyectada, pero no funcionó.

    Una posible solución a este problema es usar la clase DependencyTelemetry para realizar el seguimiento de las llamadas a Redis en lugar de crear manualmente la telemetría. La clase DependencyTelemetry es parte del paquete Microsoft.ApplicationInsights.DependencyCollector y realiza automáticamente el seguimiento de las dependencias en función de la configuración host.json en Azure Functions.

    Para usar DependencyTelemetry, deben seguirse los siguientes pasos:

    1. Agregar el paquete Microsoft.ApplicationInsights.DependencyCollector al proyecto.
    2. Registrar la clase DependencyTelemetryInitializer en el archivo startup.cs de la siguiente manera:

    services.AddSingleton<itelemetryinitializer>(new DependencyTelemetryInitializer());

    1. En el código de la función, utilizar el siguiente código para crear DependencyTelemetry:
    using (var operation = _telemetryClient.StartOperation<dependencytelemetry>("Llamada a Redis"))
    {
        try
        {
            // Código de llamada a Redis aquí
            operation.Telemetry.Success = true;
        }
        catch (Exception ex)
        {
            operation.Telemetry.Success = false;
            operation.Telemetry.Properties.Add("Error", ex.Message);
            throw;
        }
    }
    

    Este código crea una nueva operación basada en la llamada a Redis, la inicia, realiza la llamada a Redis y marca la operación como exitosa o no. Cualquier excepción que ocurra durante la llamada a Redis se registra como un error en la telemetría de la operación.

    Al utilizar DependencyTelemetryInitializer, el seguimiento de dependencias predeterminado para SQL debería seguir funcionando.

Comments are closed.