Зависимость Azure SQL (на основе EF Core 3.1.7) не отображается в карте приложения в App Insights

Aug 19 2020

У нас есть функции Azure, основанные на .NET Core 3.1. Мы используем последнюю версию EntityFrameworkCore.

Он подключается к Azure SQL для хранения / получения / запроса данных. Иногда мы можем видеть журналы для Azure SQL, такие как открытие соединения, закрытие соединения в Live Stream of App Insights (иногда это может быть из-за включения выборки)

Но мы не видим зависимости Azure SQL в карте приложений аналитики приложений. Даже глядя на таблицу трассировок, я не вижу ничего, связанного с Azure SQL.

Есть ли что-то, что нам нужно включить, чтобы Azure SQL отображался как зависимость? Я читал в нескольких статьях о msdn, что он автоматически обнаруживается для SQL, когда вы используете пакет Microsoft.Data.SqlClient (и я вижу, что ядро ​​EF уже установило этот пакет внутри).

Также последующий вопрос, если выше дан ответ и разрешен - есть ли способ, как я могу проверить, удалено / закрыто ли соединение или когда было открыто / закрыто соединение для данного вызова функции в App Insights?

В соответствии с комментарием ниже, добавляя дополнительную информацию,

Мы добавляем DbContext к службам, используя следующую инструкцию в файле запуска.

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

У класса OurDbContext есть следующий конструктор,

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

Затем мы внедряем класс OurDbContext в разные репозитории, который использует этот контекст для взаимодействия с SQL. Как показано ниже:

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

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

Мы вводим эти репозитории в классы функций и вызываем указанные выше методы, такие как

await _repo.AddAsync()

Мы используем нижеперечисленные пакеты EFCore

у нас есть ниже в файле host.json.

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

Примечание. Я попытался использовать ссылку ниже, чтобы проверить, отображается ли зависимость sql в аналитике приложений, хотя она не использует конфигурацию EFCore / последней версии функций Azure, которую я использую. Единственное, что я добавил, это APPINSIGHTS_INSTRUMENTATIONKEY в мои локальные настройки.

https://dev.to/azure/using-entity-framework-with-azure-functions-50aa Исходный код GitHub: https://github.com/jeffhollan/functions-csharp-entityframeworkcore

С помощью вышесказанного я смог увидеть зависимость от SQL в своих идеях по приложению. Но когда я изменил вышеупомянутую версию функций Azure, .net core, EFCore, которые я использую для своего текущего проекта, зависимости SQL перестали отображаться в аналитике приложений. Однако добавление ниже уровня ведения журнала показывает журналы отладки в консоли.

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

Скриншот из комментария ниже для KrishnenduGhosh-MSFT.

Журналы из stackify.

Ответы

krishg Aug 30 2020 at 10:00

Обновите раздел ведения журнала в host.json, как показано ниже, чтобы разрешить журнал уровня информации (обратите внимание, что я добавил logLevel в существующую конфигурацию, которую вы разместили выше). По умолчанию это предупреждение, если вы не укажете. Как упоминалось в примечании здесь , зависимости регистрируются с информационным уровнем. Также обратите внимание, что excludedTypes (не samplingExcludedTypes) должен находиться внутри samplingSettings согласно документации .

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

Также для функции Azure не следует добавлять microsoft.applicationinsights.aspnetcorenuget и builder.Services.AddApplicationInsightsTelemetry();в Startup. Это для основного приложения asp.net. Функция не должна иметь этогоhttps://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#logging-services