เหตุการณ์การวัดและส่งข้อมูลทางไกลสำหรับ Microsoft Dataverse
สตรีมข้อมูลในปัจจุบันให้ข้อมูลประสิทธิภาพที่เกี่ยวข้องกับ สายเรียกเข้าของ API Dataverse การเรียกใช้งานปลั๊กอิน Dataverse และการเรียก SDK Dataverse นอกจากนี้ยังให้ข้อมูลสำหรับความล้มเหลวในปลั๊กอินและการดำเนินงาน SDK Dataverse
Dataverse สายเรียกเข้า API
เหล่านี้คือการโทรไปยัง Dataverse API โดยอาจมาจาก ส่วนติดต่อแบบรวม (UCI) เว็บไคลเอ็นต์ดั้งเดิม ไคลเอ็นต์แบบกำหนดเองที่ใช้ SDK และอื่นๆ สามารถพบได้ในตาราง คำขอ ของ Application Insights ซึ่งมีฟิลด์ดังต่อไปนี้
ชื่อ: ประเภทของการร้องขอ เหล่านี้แบ่งออกเป็นสองประเภท:
- คำขอ Web API: คำขอไปยัง OData v4 ตำแหน่งข้อมูล ที่ใช้กันทั่วไปโดย ส่วนติดต่อแบบรวม และไคลเอนต์สมัยใหม่ คำขอนี้เปลี่ยนเป็นการดำเนินการที่เหมือนกันสำหรับทั้งสองอย่าง Web API เป็น "ตัวห่อหุ้ม" เพื่อเปิดใช้งานโมเดลการเขียนโปรแกรม RESTful แต่หลังจากได้รับข้อมูลแล้ว ทุกอย่างจะเหมือนกันภายในเซิร์ฟเวอร์ เมื่อการตอบกลับถูกส่งกลับ จะถูกแปลงเป็น JSON หากคำขอมาจาก Web API
- คำขอรับบริการองค์กร: คำขอไปยัง Organization API ตำแหน่งข้อมูล ที่ใช้โดยไคลเอนต์ SDK หรือไคลเอนต์เว็บแบบดั้งเดิม
ระยะเวลา : จำนวนเวลาที่เซิร์ฟเวอร์ใช้ในการตอบสนองต่อคำขอ
Url: URL ที่ทำการโทร
ขนาดที่กำหนดเอง:
UserAgent: Application Insights เติมข้อมูลลงในฟิลด์ตัวแทนผู้ใช้โดยอัตโนมัติด้วย PC ขณะที่บันทึกเหล่านี้ถูกส่งจากเซิร์ฟเวอร์ในศูนย์ข้อมูล Application Insights ไม่อนุญาตให้แทนที่ฟิลด์ตัวแทนผู้ใช้ บางครั้ง ฟิลด์ตัวแทนผู้ใช้ไม่สามารถเติมข้อมูลได้ ตัวแทนผู้ใช้ที่ทำการโทรสามารถดูได้โดยใช้การสอบถามต่อไปนี้:
requests | summarize count() by tostring(customDimensions.userAgent)
Operation_Name: ชื่อที่อ่านได้ของการดำเนินการที่จะแสดงบนมุมมอง เช่น มุมมองธุรกรรมแบบครบวงจร
Dataverse บันทึกการดำเนินการปลั๊กอิน
บันทึกเหล่านี้สำหรับปลั๊กอินแบบกำหนดเองที่ทำงานสำหรับการดำเนินการที่กำหนด มีอยู่ในตาราง การขึ้นต่อกัน ต่อไปนี้เป็นการสอบถามตัวอย่าง:
dependencies
| where type == "Plugin"
| take 100
- ชื่อ/เป้าหมาย: ชื่อประเภทที่มีคุณสมบัติครบถ้วนสำหรับปลั๊กอินที่กำลังดำเนินการ
- ระยะเวลา: จำนวนเวลาที่ใช้ในการดำเนินการปลั๊กอิน
- ขนาดที่กำหนดเอง:
- ความลึก: ความลึก ปัจจุบันของการดำเนินการในสแต็กการเรียก
- EntityName: ชื่อของเอนทิตีที่กำลังดำเนินการโดยปลั๊กอิน
- IsolationType: A ค่า ที่ระบุว่าปลั๊กอินกำลังถูกดำเนินการในแซนด์บ็อกซ์หรือไม่:
- 1: ไม่มี
- 2: Sandbox
- 3: ภายนอก
- PluginName: ชื่อปลั๊กอินที่เป็นมิตรกับผู้ใช้
- PluginType: ชื่อของประเภทปลั๊กอินที่กำลังดำเนินการ
- PluginVersion: เวอร์ชันของปลั๊กอินที่เผยแพร่ ความตั้งใจในที่นี้คือสามารถใช้ข้อมูลนี้เพื่อแก้ไขปัญหาการอัปเดตเวอร์ชันได้
- ระยะ: แมปไปยังค่าต่อไปนี้:
- PreValidation = 10
- PreOperation = 20
- PreOperationBeforeExternalPlugins = 15
- PreOperationAfterExternalPlugins = 25
- MainOperation = 30
- PostOperationBeforeExternalPlugins = 35
- PostOperationAfterExternalPlugins = 45
- PostOperation = 40
- PostOperationDeprecated = 50
- StepName: ชื่อของการประมวลผลข้อความ SDK ขั้นตอน ซึ่งมักจะสร้างโดยเครื่องมือการลงทะเบียนปลั๊กอิน โดยใช้ข้อมูลเกี่ยวกับ PluginName, PluginType และชื่อของการดำเนินการ —ตัวอย่างเช่น ErrorMessageTest.ThrowException: การสร้างบัญชี
การวัดและส่งข้อมูลทางไกลภายในโค้ดปลั๊กอินของคุณ
ในการทำความเข้าใจสิ่งที่เกิดขึ้น ภายใน โค้ดปลั๊กอินของคุณ คุณสามารถรวมข้อมูลระยะไกลแบบกำหนดเองจากภายในปลั๊กอินของคุณได้โดยใช้อินเทอร์เฟซ Microsoft.Xrm.Sdk.PluginTelemetry.ILogger ในโค้ดปลั๊กอินของคุณเพื่อเขียนข้อมูลระยะไกลโดยตรงไปยัง Application Insights ทรัพยากรของคุณ ข้อมูลเพิ่มเติม: เขียนการวัดและส่งข้อมูลทางไกลไปที่ ทรัพยากร Application Insights ของคุณ โดยใช้ ILogger (พรีวิว)
บันทึก Dataverse SDK
บันทึกเหล่านี้เป็นบันทึกสำหรับการดำเนินการ SDK ที่ทริกเกอร์โดยเป็นส่วนหนึ่งของคำขอที่เข้ามา สิ่งเหล่านี้ถูกบันทึกไว้ในตาราง การขึ้นต่อกัน ใน Application Insights เนื่องจากถูกติดตามเป็นการขึ้นต่อกันสำหรับคำขอที่จะดำเนินการ บันทึกจะถูกระบุด้วยชื่อชนิด ที่ขึ้นต้นด้วย SDK ต่อไปนี้เป็นการสอบถามตัวอย่าง:
dependencies
| where type startswith "SDK"
| take 10
- ประเภท : ประเภทของคำขอ SDK ที่ถูกเรียกใช้ ตัวอย่าง ได้แก่ Retrieve, RetrieveMultiple, FetchXmlToQueryExpression และ WhoAmI
- ชื่อ/เป้าหมาย: นี่คือชื่อของเอนทิตีที่ถูกกำหนดเป้าหมายโดยการดำเนินการ SDK
- ขนาดที่กำหนดเอง:
- ClientType: ประเภทของไคลเอนต์ที่มาของการโทร ค่าที่เป็นไปได้บางค่า ได้แก่ Web, UCIClient และ OutlookFull
- EntityId: ตัวระบุเฉพาะของเอนทิตีที่กำลังใช้
- EntityName: ชื่อของเอนทิตีที่กำลังใช้งาน
ข้อยกเว้น
คุณจะเห็นรายละเอียดของความล้มเหลวในปลั๊กอินและการดำเนินการ SDK ใน Application Insights ตาราง ข้อยกเว้นใน ใน Application Insights ให้ความสามารถในแผง ความล้มเหลว รายละเอียดความล้มเหลวเหล่านี้สัมพันธ์กับเหตุการณ์ที่เหลือในการเรียกปลั๊กอินและ SDK ในมุมมองแบบครบวงจร ข้อมูลที่มีอยู่ทั้งหมดจะถูกเพิ่มลงในคอลัมน์เมื่อเป็นไปได้ และเพิ่มลงใน customDimensions เมื่อไม่มีคอลัมน์ที่ตรงกันทุกประการ
คุณจะสังเกตเห็นว่าบางส่วนของฟิลด์ในตาราง ข้อยกเว้น ไม่ถูกเติมข้อมูล เนื่องจากฟิลด์เหล่านี้สามารถตั้งค่าได้ก็ต่อเมื่อ Application Insights SDK ถูกใช้เพื่อปล่อยบันทึกจากแหล่งที่มา คุณลักษณะนี้รวบรวมการวัดและส่งข้อมูลทางไกลของแพลตฟอร์มแล้วส่งไปยัง Application Insights ให้สอดคล้องกับสคีมา Application Insights
exceptions
| take 10
การสอบถามนี้จะส่งคืนรายละเอียดแอตทริบิวต์ทั้งหมดจากตาราง ข้อยกเว้น
- problemId/type: ประเภทของข้อยกเว้น
- outerMessage: ข้อความข้อยกเว้น
- มิติที่กำหนดเอง:
- clientType: ประเภทของไคลเอนต์ที่มาของการโทร ค่าที่เป็นไปได้บางค่า ได้แก่ Web, UCIClient และ OutlookFull
- exceptionSource: ปลั๊กอินหรือจุดที่เกิดข้อยกเว้น
- entityName: ชื่อของเอนทิตีที่กำลังใช้งาน
- pluginName: ชื่อของปลั๊กอินที่เกิดข้อยกเว้น
หากผู้ใช้รายงานข้อผิดพลาด คุณสามารถใช้ รหัสผู้ใช้ (รหัสของ Microsoft Entra ID) เพื่อทำความเข้าใจรายละเอียดจากตาราง ข้อยกเว้น
exceptions
| where user_Id == '00aa00aa-bb11-cc22-dd33-44ee44ee44ee'
รหัสเอนทิตีและชื่อเอนทิตีมีอยู่ใน customDimensions ในตาราง การขึ้นต่อกัน
dependencies
| where type == "SDK Retrieve"
คำถามที่ถามบ่อย (FAQs)
ต่อไปนี้เป็นคำถามที่พบบ่อยเกี่ยวกับเหตุการณ์การวัดและส่งข้อมูลทางไกลสำหรับ Dataverse
ฉันจะทราบได้อย่างไรว่าการอัปเกรดปลั๊กอินของฉันทำให้ประสิทธิภาพการทำงานลดลงหรือไม่
dependencies
| where ['type'] == "Plugin"
| where name startswith "[InsertYourPluginName]"
| summarize avg(duration) by name
ชื่อปลั๊กอินควรมีเวอร์ชันสำหรับปลั๊กอินที่กำหนดเองด้วย
API ทำงานอย่างไรก่อนเกิดปัญหาที่รายงาน ตามเวลาของวันหรือสถานที่ API ลดลงทีละน้อยหรือกะทันหัน
requests
| where url == "https://<URLHere>"
| summarize avg(duration), count() by bin(timestamp, 1h)
| render timechart
ในแผนภูมินี้ เราจะเห็นประสิทธิภาพของจุดสิ้นสุด API ในช่วงระยะเวลาหนึ่งเทียบกับจำนวนคำขอที่ส่ง
นอกจากนี้คุณยังสามารถ ตั้งค่าการแจ้งเตือน ตามประสิทธิภาพของ API เฉพาะที่นี่ ภายใน Application Insights
ฉันสามารถดูรายละเอียดแนวลึกเกี่ยวกับข้อผิดพลาดหรือความล้มเหลวในเวลาที่กำหนด หรือสำหรับผู้ใช้เฉพาะเพื่อให้เข้าใจสแตกการเรียกได้หรือไม่
ดูที่แผง ความล้มเหลว ให้ภาพรวมของความล้มเหลวในช่วงเวลาที่กำหนด จากนั้นคุณสามารถจำกัดความล้มเหลวให้แคบลงตามการเรียก API หรือชนิดการขึ้นต่อกัน เพื่อดูมุมมองแบบครบวงจร
ฉันสามารถสร้างแดชบอร์ดแบบกำหนดเองได้หรือไม่
ใช่ คุณสามารถสร้าง แดชบอร์ดแบบกำหนดเอง ด้วย Application Insights
ฉันสามารถกำหนดประสิทธิภาพการใช้งานปลั๊กอิน (เวลาตอบสนอง) และอัตราความล้มเหลวระหว่างการใช้งานสูงสุดได้หรือไม่
ใช่ ดูตัวอย่างการสอบถามต่อไปนี้ เพื่อทำความเข้าใจว่าปลั๊กอินของคุณทำงานอย่างไร
dependencies
| where ['type'] == "Plugin"
| where name == "[Plugin name here]"
| summarize avg(duration) by bin(timestamp, 1h)
| render timechart
การวัดและส่งข้อมูลทางไกลนี้จะมีการควบคุมปริมาณหรือไม่
ใช่ ขณะนี้มีรายละเอียดข้อผิดพลาดพื้นฐาน 429
ฉันสามารถเข้าใจเส้นทางการดำเนินการได้หรือไม่ การโทรโดยปลั๊กอินทำให้ปลั๊กอินช้าลงหรือไม่
ใช่ คุณสามารถดูข้อความและปลั๊กอินทั้งหมดที่ดำเนินการตามคำขอใดๆ
ระยะเวลาของข้อความและการทำงานของปลั๊กอินทั้งหมดจะถูกบันทึก หากปลั๊กอินใดใช้เวลานานกว่านั้น คุณสามารถระบุปลั๊กอินนั้นได้ หากปลั๊กอินกำลังติดต่อกลับไปยัง Dataverse ระยะเวลาของการโทรนั้นจะถูกบันทึก มีการวางแผนข้อมูลเพิ่มเติมเกี่ยวกับปลั๊กอินสำหรับการปรับใช้ในอนาคต
การโทรออกโดยปลั๊กอินจะถูกบันทึกโดยอัตโนมัติเป็นการขึ้นต่อกัน
ฉันสามารถดูการวัดและส่งข้อมูลทางไกลสำหรับคำขอเฉพาะได้หรือไม่
Dataverse ส่งคืน x-ms-service-requestId ในการตอบสนองส่วนหัวของคำขอทั้งหมด เมื่อใช้ requestId นี้ คุณสามารถค้นหาการวัดและส่งข้อมูลทางไกลทั้งหมดได้
union *
| where operation_ParentId contains <requestId>