การพึ่งพา Azure SQL (อิงตาม EF Core 3.1.7) ไม่ปรากฏใน Application Map ของ App Insights

Aug 19 2020

เรามีฟังก์ชัน Azure ตาม. net Core 3.1 เราใช้ EntityFrameworkCore เวอร์ชันล่าสุด

เชื่อมต่อกับ Azure SQL เพื่อจัดเก็บ / ดึง / สืบค้นข้อมูล เราสามารถดูบันทึกสำหรับ Azure SQL เช่นการเปิดการเชื่อมต่อการปิดการเชื่อมต่อใน Live Stream ของข้อมูลเชิงลึกของแอปในบางครั้ง (บางครั้งอาจเป็นเพราะการเปิดใช้งานการสุ่มตัวอย่าง)

แต่เราไม่เห็นการพึ่งพา Azure SQL ในแผนที่แอปพลิเคชันของข้อมูลเชิงลึกของแอป แม้ดูตารางการติดตามฉันก็ไม่เห็นอะไรที่เกี่ยวข้องกับ Azure SQL

มีบางอย่างที่เราต้องเปิดใช้เพื่อให้ Azure SQL แสดงการอ้างอิงหรือไม่ ฉันอ่านบทความ msdn ไม่กี่บทความพบว่ามีการตรวจพบโดยอัตโนมัติสำหรับ SQL เมื่อคุณใช้แพ็คเกจ Microsoft.Data.SqlClient (และฉันเห็นว่า EF core มีแพ็คเกจนั้นติดตั้งอยู่แล้วภายใน)

นอกจากนี้คำถามติดตามผลหากมีคำตอบและแก้ไขข้างต้น - มีวิธีใดบ้างที่ฉันสามารถตรวจสอบได้ว่าการเชื่อมต่อถูกกำจัด / ปิดหรือเมื่อใดที่การเชื่อมต่อถูกเปิด / ปิดสำหรับการเรียกใช้ฟังก์ชันที่ระบุในข้อมูลเชิงลึกของแอป

ตามความคิดเห็นด้านล่างเพิ่มข้อมูลเพิ่มเติม

เราเพิ่ม 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()
  }
}

เราฉีด repos เหล่านี้ในคลาสฟังก์ชันและเรียกใช้เมธอดด้านบนเช่น

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