Azure SQL 종속성 (EF Core 3.1.7 기반)이 App Insights의 애플리케이션 맵에 표시되지 않습니다.

Aug 19 2020

.net Core 3.1을 기반으로하는 Azure 기능이 있습니다. 최신 버전의 EntityFrameworkCore를 사용합니다.

Azure SQL에 연결하여 데이터를 저장 / 검색 / 쿼리합니다. 연결 열기, 앱 인사이트의 라이브 스트림에서 연결 닫기와 같은 Azure SQL에 대한 로그를 볼 수 있습니다 (때로는 샘플링이 활성화되어 있기 때문일 수 있음).

그러나 앱 인사이트의 애플리케이션 맵에는 Azure SQL 종속성이 표시되지 않습니다. 심지어 traces 테이블을 보면 Azure SQL과 관련된 내용이 보이지 않습니다.

Azure SQL이 종속성으로 표시되도록 활성화해야하는 것이 있습니까? 몇 가지 msdn 기사에서 Microsoft.Data.SqlClient 패키지를 사용할 때 SQL에 대해 자동으로 감지된다는 내용을 읽었습니다 (그리고 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)
{
}

그런 다음이 컨텍스트를 사용하여 SQL과 통신하는 다른 저장소에 OurDbContext 클래스를 삽입합니다. 아래와 비슷합니다.

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

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

이러한 저장소를 Function 클래스에 삽입하고 위의 메소드를 다음과 같이 호출합니다.

await _repo.AddAsync()

우리는 아래 EFCore 패키지를 사용합니다.

아래 host.json 파일에 있습니다.

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

참고 : 사용중인 EFCore / 최신 버전의 Azure 함수 구성을 사용하지 않지만 SQL 종속성이 App insights에 표시되는지 확인하기 위해 아래 링크를 시도했습니다. 내가 추가 한 유일한 것은 내 로컬 설정에서 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 (샘플링 ExcludedTypes가 아님)는 설명서에 따라 samplingSettings 내에 있어야합니다 .

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

또한 Azure 함수의 경우 시작 microsoft.applicationinsights.aspnetcorebuilder.Services.AddApplicationInsightsTelemetry();시작 에 너겟을 추가하면 안됩니다 . 그것은 asp.net 핵심 애플리케이션을위한 것입니다. 기능이 없어야합니다https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#logging-services