La dependencia de Azure SQL (basada en EF Core 3.1.7) no aparece en el mapa de aplicaciones de App Insights

Aug 19 2020

Contamos con funciones de Azure basadas en .net Core 3.1. Usamos la última versión de EntityFrameworkCore.

Se conecta a Azure SQL para almacenar / recuperar / consultar datos. Podemos ver registros para Azure SQL, como Abrir conexión, cerrar conexión en Live Stream de información de la aplicación a veces (a veces puede deberse a que el muestreo está habilitado)

Sin embargo, no vemos la dependencia de Azure SQL en el mapa de aplicaciones de información de aplicaciones. Incluso, mirando la tabla de seguimientos, no veo nada relacionado con Azure SQL.

¿Hay algo que debamos habilitar para que Azure SQL se muestre como dependencia? Leí en algunos artículos de msdn que se detecta automáticamente para SQL cuando usa el paquete Microsoft.Data.SqlClient (y veo que EF core ya tiene ese paquete instalado internamente).

También hay una pregunta de seguimiento si se responde y se resuelve lo anterior: ¿hay alguna manera de que pueda verificar si la conexión está eliminada / cerrada o cuándo se abrió / cerró la conexión para la invocación de una función determinada en App Insights?

Según el comentario a continuación, agregando más información,

Agregamos DbContext a los servicios usando la siguiente declaración en el archivo de inicio.

builder.Services.AddDbContextPool<OurDbContext>(options =>
{
    options.UseSqlServer("connectionstring"), builder =>
    {
       builder.EnableRetryOnFailure(3, TimeSpan.FromSeconds(2), null);
    });
});

OurDbContext clase tiene el siguiente constructor,

public OurDbContext(DbContextOptions<OurDbContext> options)
    : base(options)
{
}

Y luego inyectamos la clase OurDbContext en diferentes repositorios que usa este contexto para hablar con SQL. Similar al siguiente:

public class Repo : IRepo
{
  public Repo(OurDbContext ourDbContext)
  {

  }
  
  public async Task AddAsync(Entity entity)
  {
    ourDbContext.AddAsync(entity);
    ourDbContext.SaveChangesAsync()
  }
}

Inyectamos estos repositorios en clases de funciones y llamamos a los métodos anteriores, como

await _repo.AddAsync()

Usamos los siguientes paquetes EFCore

tenemos a continuación en el archivo host.json.

{
    "version": "2.0",
    "logging": {
        "applicationInsights": {
            "samplingExcludedTypes": "Request",
            "samplingSettings": {
                "isEnabled": true
            }
        }
    }
}

Nota: Intenté el siguiente enlace solo para verificar si la dependencia de sql aparece en la información de la aplicación, aunque no usa la configuración de EFCore / la última versión de las funciones de Azure que estoy usando. Lo único que he agregado es APPINSIGHTS_INSTRUMENTATIONKEY en mi configuración local.

https://dev.to/azure/using-entity-framework-with-azure-functions-50aa Código fuente de GitHub: https://github.com/jeffhollan/functions-csharp-entityframeworkcore

Con lo anterior, pude ver la dependencia de SQL en los conocimientos de mi aplicación. Pero, cuando modifiqué arriba a la versión de las funciones de Azure, .net core, EFCore, que estoy usando para mi proyecto actual, las dependencias de SQL dejaron de aparecer en App Insights. Sin embargo, agregar un nivel de registro por debajo muestra los registros de depuración en la consola.

"Logging": {
    "LogLevel": {
      "Default": "Debug",
    }
}

Captura de pantalla según el comentario a continuación para KrishnenduGhosh-MSFT.

Registros de stackify.

Respuestas

krishg Aug 30 2020 at 10:00

Actualice su sección de registro en host.json como se muestra a continuación para permitir el registro de nivel de información (tenga en cuenta que agregué logLevel en la configuración existente que publicó anteriormente). De forma predeterminada, es Advertencia si no lo especifica. Como se menciona en la Nota aquí , las dependencias se registran con el nivel de información. También tenga en cuenta que los tipos excluidos (no los tipos de muestreo excluidos ) deben estar dentro de los ajustes de muestreo según la documentación .

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
            "samplingSettings": {
                "isEnabled": true,
                "excludedTypes": "Dependency;Request"
            }
        },
    "logLevel": {"default": "Information"}
  }
}

También para la función de Azure, no debe agregar microsoft.applicationinsights.aspnetcorenuget y builder.Services.AddApplicationInsightsTelemetry();en Startup. Eso es para la aplicación principal de asp.net. La función no debería tener esohttps://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#logging-services