La dipendenza SQL di Azure (basata su EF Core 3.1.7) non viene visualizzata nella mappa dell'applicazione di App Insights

Aug 19 2020

Abbiamo funzioni di Azure basate su .net Core 3.1. Usiamo l'ultima versione di EntityFrameworkCore.

Si connette ad Azure SQL per archiviare / recuperare / eseguire query sui dati. A volte siamo in grado di vedere i log per SQL di Azure come l'apertura della connessione, la chiusura della connessione in Live Stream di informazioni sull'app (a volte può essere dovuto al campionamento abilitato)

Tuttavia, non vediamo la dipendenza SQL di Azure nella mappa dell'applicazione di App Insights. Anche, guardando la tabella delle tracce, non vedo nulla di correlato ad Azure SQL.

C'è qualcosa che dobbiamo abilitare affinché SQL di Azure venga visualizzato come dipendenza? Ho letto in alcuni articoli msdn che viene rilevato automaticamente per SQL quando si utilizza il pacchetto Microsoft.Data.SqlClient (e vedo che EF core ha quel pacchetto già installato internamente).

Anche una domanda di follow-up se sopra viene data una risposta e risolta: esiste un modo, posso verificare se la connessione è stata eliminata / chiusa o quando è stata aperta / chiusa la connessione per una determinata chiamata di funzione in App Insights?

Come da commento sotto, aggiungendo ulteriori informazioni,

Aggiungiamo DbContext ai servizi utilizzando la seguente istruzione nel file di avvio.

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

La classe OurDbContext ha il seguente costruttore,

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

E poi iniettiamo la classe OurDbContext in diversi repository che usano questo contesto per parlare con SQL. Simile a sotto:

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

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

Iniettiamo questi repository nelle classi Function e chiamiamo metodi precedenti come

await _repo.AddAsync()

Usiamo i seguenti pacchetti EFCore

abbiamo di seguito nel file host.json.

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

Nota: ho provato il collegamento sottostante solo per verificare se la dipendenza sql viene visualizzata in App Insights, sebbene non utilizzi la configurazione di EFCore / ultima versione delle funzioni di Azure che sto utilizzando. L'unica cosa che ho aggiunto è APPINSIGHTS_INSTRUMENTATIONKEY nelle mie impostazioni locali.

https://dev.to/azure/using-entity-framework-with-azure-functions-50aa Codice sorgente di GitHub: https://github.com/jeffhollan/functions-csharp-entityframeworkcore

Con sopra, sono stato in grado di vedere la dipendenza SQL nelle mie informazioni sull'app. Ma, quando ho modificato sopra alla versione delle funzioni di Azure, .net core, EFCore, che sto usando per il mio progetto corrente, le dipendenze SQL hanno smesso di apparire in App Insights. Tuttavia, l'aggiunta di un livello di registrazione inferiore mostra i log di debug nella Console.

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

Screenshot come da commento sotto per KrishnenduGhosh-MSFT.

Registri da stackify.

Risposte

krishg Aug 30 2020 at 10:00

Aggiorna la sezione di registrazione in host.json come di seguito per consentire il log a livello di informazioni (nota che ho aggiunto logLevel nella configurazione esistente che hai pubblicato sopra). Per impostazione predefinita è Avviso se non si specifica. Come menzionato nella Nota qui , le dipendenze vengono registrate con il livello di informazioni. Si noti inoltre che excludedTypes (non samplingExcludedTypes) dovrebbe essere all'interno di samplingSettings come da documentazione .

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

Anche per la funzione Azure, non aggiungere microsoft.applicationinsights.aspnetcorenuget e builder.Services.AddApplicationInsightsTelemetry();in Startup. Questo è per l'applicazione principale asp.net. La funzione non dovrebbe averlohttps://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#logging-services