La dépendance Azure SQL (basée sur EF Core 3.1.7) n'apparaît pas dans Application Map of App Insights

Aug 19 2020

Nous avons des fonctions Azure basées sur .net Core 3.1. Nous utilisons la dernière version d'EntityFrameworkCore.

Il se connecte à Azure SQL pour stocker / récupérer / interroger des données. Nous pouvons parfois voir les journaux pour Azure SQL tels que l'ouverture de la connexion, la fermeture de la connexion dans Live Stream of App insights (parfois peut-être en raison de l'activation de l'échantillonnage)

Mais, nous ne voyons pas la dépendance Azure SQL dans la carte des applications des insights sur les applications. Même en regardant la table des traces, je ne vois rien lié à Azure SQL.

Y a-t-il quelque chose que nous devons activer pour qu'Azure SQL s'affiche en tant que dépendance? J'ai lu dans quelques articles msdn, qu'il est automatiquement détecté pour SQL lorsque vous utilisez le package Microsoft.Data.SqlClient (et je vois que EF core a déjà installé ce package en interne).

Également une question de suivi si ci-dessus est répondu et résolu - y a-t-il un moyen, je peux vérifier si la connexion est supprimée / fermée ou quand la connexion a-t-elle été ouverte / fermée pour l'appel de fonction donnée dans App insights?

Selon le commentaire ci-dessous, en ajoutant plus d'informations,

Nous ajoutons DbContext aux services en utilisant l'instruction suivante dans le fichier de démarrage.

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

La classe OurDbContext a le constructeur suivant,

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

Et puis nous injectons la classe OurDbContext dans différents référentiels qui utilise ce contexte pour parler à SQL. Similaire à ci-dessous:

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

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

Nous injectons ces dépôts dans les classes Function et appelons les méthodes ci-dessus telles que

await _repo.AddAsync()

Nous utilisons ci-dessous les packages EFCore

nous avons ci-dessous dans le fichier host.json.

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

Remarque: J'ai essayé le lien ci-dessous juste pour vérifier si la dépendance SQL apparaît dans App insights, bien qu'il n'utilise pas la configuration d'EFCore / dernière version des fonctions Azure que j'utilise. La seule chose que j'ai ajoutée est APPINSIGHTS_INSTRUMENTATIONKEY dans mes paramètres locaux.

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

Avec ci-dessus, j'ai pu voir la dépendance SQL dans mes insights d'application. Mais, lorsque j'ai modifié ci-dessus la version des fonctions Azure, .net core, EFCore, que j'utilise pour mon projet actuel, les dépendances SQL ont cessé d'apparaître dans App insights. Cependant, l'ajout d'un niveau de journalisation inférieur affiche les journaux de débogage dans la console.

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

Capture d'écran selon le commentaire ci-dessous pour KrishnenduGhosh-MSFT.

Journaux de stackify.

Réponses

krishg Aug 30 2020 at 10:00

Mettez à jour votre section de journalisation dans host.json comme ci-dessous pour autoriser le journal du niveau d'information (notez que j'ai ajouté logLevel dans la configuration existante que vous avez publiée ci-dessus). Par défaut, c'est Avertissement si vous ne spécifiez pas. Comme mentionné dans la note ici , les dépendances sont enregistrées avec le niveau d'information. Notez également qu'excludedTypes (et non samplingExcludedTypes) doit être à l'intérieur de samplingSettings selon la documentation .

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

Aussi pour la fonction Azure, vous ne devez pas ajouter microsoft.applicationinsights.aspnetcorenuget et builder.Services.AddApplicationInsightsTelemetry();dans Startup. C'est pour l'application principale asp.net. La fonction ne devrait pas avoir çahttps://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#logging-services