แชร์ผ่าน


ใช้การติดตามแบบกระจายในหลายบริการใน Power Platform

การติดตามแบบกระจาย เป็นวิธีการที่ใช้ในการสร้างโปรไฟล์และตรวจสอบแอปพลิเคชัน โดยเฉพาะแอปพลิเคชันที่สร้างขึ้นโดยใช้สถาปัตยกรรมไมโครเซอร์วิส ช่วยให้คุณสามารถติดตามเหตุการณ์ในระบบจากบริการหนึ่งไปยังอีกบริการหนึ่ง และดึงการวินิจฉัยแบบ end-to-end เกี่ยวกับประสิทธิภาพและเวลาแฝง คำแนะนำ W3C Trace Context กำหนดวิธีการส่งข้อมูลบริบทและแก้ไขระหว่างบริการในสถานการณ์การติดตามแบบกระจาย บทความนี้แสดงแอปพลิเคชันที่ใช้งานได้จริงและกรณีการใช้งานสำหรับการติดตามแบบกระจาย และอธิบายวิธีการใช้งานกับบริการต่างๆ ใน Power Platform

ตัวระบุการติดตาม

ในมาตรฐาน W3C Trace Context การติดตามแต่ละรายการจะถูกกำหนดเป็น trace-id 16 ไบต์ที่ไม่ซ้ำกันทั่วโลก ทุกกิจกรรมภายในการติดตามจะถูกกำหนดเป็น span-id 8 ไบต์ที่ไม่ซ้ำกัน trace-id แสดงถึงธุรกรรมโดยรวม และ span-id แสดงถึงการดำเนินการแต่ละรายการภายในธุรกรรมนั้น แต่ละกิจกรรมจะบันทึก trace-id, span-id ของตนเองและ span-id ของรายการหลัก ซึ่งเป็นการสร้างความสัมพันธ์หลัก-รองในกิจกรรมต่างๆ

ในมาตรฐาน W3C traceparent เป็นส่วนหัวที่ใช้ในการติดตามคำขอขณะที่ย้ายผ่านบริการหรือระบบที่แตกต่างกัน ประกอบด้วย trace-id ที่ไม่ซ้ำกัน parent-id ที่แสดงถึงผู้เรียกทันที และ trace-flags สำหรับการตัดสินใจด้วยการสุ่มตัวอย่าง

สถานการณ์ตัวอย่าง

ลองพิจารณาตัวอย่างที่เบราว์เซอร์เริ่มการทำธุรกรรม มีการโต้ตอบของไมโครเซอร์วิสหลายรายการ และมีการเรียก API เว็บของ Dataverse:

ทรัพยากร trace-id และ span-id
Browser trace-parent: 00-11111111111111111111111111111111-2222222222222222-01
Kubernetes trace-parent: 00-11111111111111111111111111111111-3333333333333333-01
Dataverse trace-parent: 00-11111111111111111111111111111111-4444444444444444-01
  1. เบราว์เซอร์เริ่มต้นธุรกรรม: เบราว์เซอร์ส่งคำขอไปยังเว็บเซิร์ฟเวอร์ คำขอได้รับการกำหนด trace-id และ span-id, span-id-1

  2. การโต้ตอบของไมโครเซอร์วิส: เว็บเซิร์ฟเวอร์ประมวลผลคำขอและเรียกใช้ไมโครเซอร์วิส การเรียกจะได้รับการกำหนด span-id (span-id-2) ใหม่ และยังคง trace-id เหมือนเดิม ไมโครเซอร์วิสเรียกไมโครเซอร์วิสอื่นที่สร้าง span-id (span-id-3) อื่น และอื่นๆ ในแต่ละกรณี trace-id ยังคงเดิม แต่มีการสร้าง span-id ใหม่สำหรับแต่ละการดำเนินการ

  3. เรียก API เว็บสำหรับ Dataverse: หนึ่งในไมโครเซอร์วิสทำการเรียก API เว็บสำหรับ Dataverse การเรียกจะได้รับการกำหนด span-id (span-id-4) ใหม่ และยังคง trace-id เหมือนเดิมอีกครั้ง

trace-id และความสัมพันธ์หลัก-รอง

trace-id รวมธุรกรรมทั้งหมดที่มีความสัมพันธ์หลัก-รอง span-id แต่ละรายการแสดงถึงการดำเนินการที่ไม่ซ้ำกันภายในการติดตาม และ span-id หลักจะเชื่อมโยงกับการดำเนินการหลัก โครงสร้างแบบลำดับชั้นนี้ช่วยให้คุณสามารถติดตามธุรกรรมทั้งหมดตั้งแต่คำขอเริ่มต้นไปจนถึงการตอบกลับขั้นสุดท้าย

การแมป trace-id และ Operation Id

Application Insights แมปฟิลด์ W3C trace-id กับ Operation Id ช่วยให้คุณสามารถสอบถามชุดของการดำเนินการที่เกี่ยวข้องที่เกิดขึ้นเป็นส่วนหนึ่งของการติดตามแบบครบวงจรได้อย่างง่ายดาย

ภาพหน้าจอของฟิลด์รหัสการดำเนินงานที่แมปไว้ใน Application Insights

การใช้งานจริงและประโยชน์

มาตรฐาน W3C Trace Context สำหรับการติดตามแบบกระจายมีการใช้งานจริงและประโยชน์หลายประการ:

  • การมองเห็นแบบครบวงจร: บริบทการติดตามให้การมองเห็นธุรกรรมแบบครบวงจร ช่วยให้คุณเข้าใจว่าคำขอแพร่กระจายผ่านระบบของคุณอย่างไร

  • การตรวจสอบประสิทธิภาพการทำงาน: ช่วยให้คุณตรวจสอบประสิทธิภาพของบริการแต่ละรายการและระบุปัญหาคอขวด

  • การวินิจฉัยข้อผิดพลาด: ช่วยให้คุณวินิจฉัยข้อผิดพลาดโดยการติดตามเส้นทางของคำขอและระบุตำแหน่งที่เกิดความล้มเหลว

  • การติดตามการขึ้นต่อกัน: ช่วยให้คุณติดตามการขึ้นต่อกันระหว่างบริการและทำความเข้าใจว่าพวกเขาโต้ตอบอย่างไร

ด้วยการใช้การติดตามแบบกระจายด้วยมาตรฐาน W3C Trace Context คุณจะได้รับข้อมูลเชิงลึกอันมีค่าเกี่ยวกับ ลักษณะการทำงาน ของแอปพลิเคชัน ปรับปรุงประสิทธิภาพ และปรับปรุงประสบการณ์ผู้ใช้โดยรวม

กรณีการใช้งานที่เป็นไปได้

ตารางต่อไปนี้อธิบายกรณีการใช้งานที่เป็นไปได้สำหรับการติดตามแบบกระจายใน Power Platform กรณีการใช้งานแต่ละกรณีแสดงให้เห็นว่าการติดตามแบบกระจายสามารถนำไปใช้กับสถานการณ์ต่างๆ ได้อย่างไร ทำให้คุณสามารถตรวจสอบและวินิจฉัยปัญหาด้านประสิทธิภาพในบริการต่างๆ ได้

ตัวอย่างเช่น Description บันทึกย่อ
ตัวแทนอิสระ เหตุการณ์ข้อมูลทริกเกอร์เอเจนต์อัตโนมัติ ธุรกรรมที่มีอายุนานที่เป็นไปได้รักษาส่วนหลักของการติดตาม ธุรกรรมสามารถข้ามกระบวนการและบริการต่างๆ รวมถึงการส่งต่อไปยังตัวแทนฝ่ายบริการลูกค้าที่เป็นไปได้ Power Automate สามารถขอการติดตามแบบกระจายได้จากปลั๊กอิน Dataverse แต่ละขั้นตอนของกระบวนการจะเพิ่มการวัดและส่งข้อมูลทางไกล Application Insights คุณสามารถสอบถามธุรกรรมแบบครบวงจรใน Application Insights หรือโดยใช้การสอบถาม KQL
ธุรกรรมบนเว็บ มือถือ หรือตัวแทนของผู้ใช้ปลายทาง ผู้ใช้เริ่มทำธุรกรรมเพื่ออัปเดตข้อมูลลูกค้า รายการติดตามจะถูกเพิ่มไปยัง Application Insights จากคำขอและข้อความการติดตามจาก Dataverse บริการ Kubernetes เริ่มธุรกรรมแบบกระจาย โดยจะเรียกใช้ API เว็บสำหรับ Dataverse เพื่ออัปเดตรายละเอียดของลูกค้า
เอเจนต์การสนับสนุนลูกค้า ลูกค้าติดต่อคอลเซ็นเตอร์ ผู้ให้บริการคอลเซ็นเตอร์ใช้ Copilot ใน Dynamics 365 Customer Service และ แอปแบบจำลอง เพื่ออัปเดตรายละเอียดของลูกค้า แต่ละส่วนประกอบในการอัปเดตจะเขียนไปยัง Application Insights การทำธุรกรรมเริ่มต้นด้วยผู้ให้บริการคอลเซ็นเตอร์ แอปแบบจำลองจะร้องขอธุรกรรมแบบกระจายจาก Dataverse

การรวม API เว็บสำหรับ Dataverse

มาดูกันว่า API เว็บสำหรับ Dataverse สามารถรวมเข้ากับ W3C Trace Context สำหรับการติดตามแบบกระจายได้อย่างไร

บริการการเรียกเริ่มต้นการติดตามด้วย trace-id และ span-id ที่ไม่ซ้ำกัน ค่า trace-parent สามารถส่งผ่านไปยัง API เว็บได้ทั้งในเนื้อหาของคำขอ HTTP POST หรือเป็นส่วนหนึ่งของสตริงการสอบถาม HTTP ตัวอย่างเช่น:

  • ตัวเลือกที่ 1: เนื้อความ POST: postData(environmentUrl + "api/data/v9.0/" + customApiName, token, ...)
  • ตัวเลือกที่ 2: สตริงการสอบถามแท็ก: postData(environmentUrl + "api/data/v9.0/" + customApiName + "?tag=01-0af...")

เมื่อใช้วิธีใดวิธีหนึ่ง คุณสามารถกำหนดค่าปลั๊กอิน Dataverse เพื่อรวมการติดตาม Application Insights ซึ่งจะสร้าง span-id และข้อความการติดตามใหม่

การรวม Dataverse

ตอนนี้เรามาสำรวจวิธีการใช้รูปแบบนี้โดยใช้คุณลักษณะของ Dataverse ที่พร้อมใช้งานทั่วไป

หากต้องการใช้การติดตามแบบกระจายกับการเรียกไปยัง API เว็บสำหรับ Dataverse:

  • ใช้ข้อความ Dataverse เพื่อขยายไปป์ไลน์ข้อความ
  • สร้าง API ที่กำหนดเองด้วยปลั๊กอิน Dataverse ที่ใช้ Application Insights SDK เพื่อเพิ่มความสัมพันธ์หลัก-รองที่ต้องการ

เรียกใช้จากบริการอื่นๆ ของ Power Platform

สมมติว่าคุณต้องการอนุญาตให้รวมบริการอื่นๆ ของ Power Platform เช่น Copilot Studio, Power Apps, หรือโฟลว์ระบบคลาวด์ Power Automate ไว้ในโซลูชันการติดตามแบบกระจายโดยรวม พิจารณาการเรียกใช้ฟังก์ชันจากแอป โฟลว์ โค้ด หรือฟังก์ชันอื่น เพื่อเรียก API ที่กำหนดเองของ Dataverse ตามที่กล่าวไว้ในส่วนนี้

ข้อความ Dataverse สำหรับเอนทิตีหรือ API ที่กำหนดเอง

คุณสามารถกำหนดข้อความ Dataverse แบบกำหนดเองที่อนุญาตให้คุณโต้ตอบกับเอนทิตีหรือ API ที่กำหนดเองในสภาพแวดล้อม Dataverse ได้ ข้อความ Dataverse ช่วยให้คุณปรับปรุงกระบวนการการจัดการข้อมูลของคุณและรับประกันการผสานรวมกับความต้องการด้านความสามารถในการสังเกตของคุณได้อย่างราบรื่น เรียนรู้เพิ่มเติมใน สร้างข้อความของคุณเอง

เพิ่มขั้นตอนไปยังปลั๊กอิน

หลังจากที่คุณสร้างชนิดข้อความ Dataverse หรือใช้ชนิดเอนทิตีที่กำหนดไว้ล่วงหน้าในสภาพแวดล้อม ให้ใช้ปลั๊กอินเพื่อกำหนดค่าการดำเนินการในขั้นตอนต่างๆ ของไปป์ไลน์การประมวลผลข้อมูล และอนุญาตการติดตามแบบกระจาย เรียนรู้เพิ่มเติมใน ใช้ปลั๊กอินเพื่อขยายกระบวนการทางธุรกิจ

ขั้นตอนไปป์ไลน์อาจรวมถึงขั้นตอนการตรวจสอบความถูกต้องล่วงหน้า ก่อนดำเนินการ และหลังการดำเนินการ การเพิ่มขั้นตอนลงในปลั๊กอินช่วยให้คุณควบคุมการไหลของข้อมูลและตรวจสอบให้แน่ใจว่ามีการดำเนินการในเวลาที่เหมาะสม

  • การตรวจสอบล่วงหน้า: เกิดขึ้นก่อนดำเนินการหลัก ตรวจสอบความถูกต้องของข้อมูลและตรวจสอบให้แน่ใจว่าตรงตามเกณฑ์ที่กำหนด

  • การดำเนินการล่วงหน้า: เกิดขึ้นหลังจากขั้นตอนการตรวจสอบล่วงหน้า แต่ก่อนดำเนินการหลัก มันดำเนินการเตรียมหรือแก้ไขข้อมูลที่จำเป็น

  • การตรวจสอบหลัง: เกิดขึ้นหลังดำเนินการหลัก มันดำเนินการล้างข้อมูลที่จำเป็นหรือการดำเนินการอื่น ๆ ตามผลลัพธ์ของการดำเนินการหลัก

คุณสามารถกำหนดค่าปลั๊กอินให้ดำเนินการตามขั้นตอนเหล่านี้ได้ทั้งแบบซิงโครนัสหรืออะซิงโครนัส ขึ้นอยู่กับความต้องการของแอปพลิเคชันของคุณ

ค่าการกำหนดค่าที่ไม่ปลอดภัยและปลอดภัย

คุณสามารถใช้ฟิลด์ การกำหนดค่าที่ไม่ปลอดภัย และ การกำหนดค่าที่ปลอดภัย ในเครื่องมือการลงทะเบียนปลั๊กอินเพื่อควบคุมลักษณะการทำงานต่างๆ ของปลั๊กอิน

  • การกำหนดค่าที่ไม่ปลอดภัย: ผู้ใช้ทุกคนสามารถมองเห็นการตั้งค่าที่ไม่ปลอดภัยได้ และอาจรวมถึงการตั้งค่าต่างๆ เช่น ระดับบันทึก การเปิด/ปิดการติดตาม และข้อมูลที่ไม่ละเอียดอ่อนอื่นๆ

  • การกำหนดค่าที่ปลอดภัย: การตั้งค่าความปลอดภัยจะปรากฏเฉพาะผู้ใช้ที่มีสิทธิ์ที่เหมาะสมเท่านั้น และอาจรวมถึงข้อมูลที่ละเอียดอ่อน เช่น สตริงการเชื่อมต่อ คีย์ API และข้อมูลลับอื่นๆ

สำหรับสถานการณ์การติดตามแบบกระจาย ให้ใช้ฟิลด์ การกำหนดค่าที่ไม่ปลอดภัย เพื่อจัดการว่าการติดตามเปิดอยู่หรือไม่ และเพื่อตั้งค่าระดับการบันทึก ใช้ฟิลด์ การกำหนดค่าที่ปลอดภัย เพื่อจัดเก็บข้อมูลสตริงการเชื่อมต่อที่ปลั๊กอินต้องการ

ภาพหน้าจอของการลงทะเบียนปลั๊กอิน

เรียนรู้เพิ่มเติมใน ลงทะเบียนปลั๊กอิน

API ที่กำหนดเองพร้อมพารามิเตอร์คำขอและการตอบกลับ

Dataverse ช่วยให้คุณสร้างและใช้ API ที่กำหนดเองกับพารามิเตอร์คำขอและการตอบกลับเฉพาะเพื่อตอบสนองความต้องการของแอปพลิเคชันของคุณ

  • InputParameters: กำหนดข้อมูลอินพุตที่ต้องการโดย API ที่กำหนดเอง ซึ่งสามารถรวมชนิดข้อมูลต่างๆ เช่น สตริง จำนวนเต็ม และออบเจ็กต์ที่ซับซ้อน

  • OutputParameters: กำหนดข้อมูลเอาต์พุตที่ส่งคืนโดย API ที่กำหนดเอง ซึ่งสามารถรวมข้อมูลชนิดต่างๆ และโครงสร้างต่างๆ ช่วยให้คุณให้คำตอบโดยละเอียดและมีความหมายต่อผู้ใช้งาน API

ภาพหน้าจอการลงทะเบียน API ที่กำหนดเอง

เคล็ดลับ

สำหรับการติดตามแบบกระจาย คุณสามารถติดแท็กค่าสตริงการสอบถามเพื่อส่งตัวแปรที่ใช้ร่วมกันจาก API ได้

ขั้นตอนการประมวลผลแบบกำหนดเอง (ซิงค์และอะซิงโครนัส)

เมื่อใช้ขั้นตอนการประมวลผลแบบกำหนดเองคุณสามารถกำหนดได้ว่าควรดำเนินการขั้นตอนแบบซิงโครนัสหรืออะซิงโครนัส ความยืดหยุ่นนี้ช่วยให้คุณสามารถเพิ่มประสิทธิภาพและการตอบสนองของแอปพลิเคชันของคุณได้

  • การประมวลผลแบบซิงโครนัส: ขั้นตอนจะดำเนินการตามลำดับ ขั้นตอนถัดไปจะไม่เริ่มต้นจนกว่าขั้นตอนปัจจุบันจะเสร็จสมบูรณ์ วิธีนี้ช่วยให้มั่นใจได้ว่าแต่ละขั้นตอนจะเสร็จสมบูรณ์ก่อนที่จะไปยังขั้นตอนถัดไป
  • การประมวลผลแบบอะซิงโครนัส: ขั้นตอนจะดำเนินการอย่างอิสระ ขั้นตอนต่อไปสามารถเริ่มต้นก่อนที่ขั้นตอนปัจจุบันจะเสร็จสมบูรณ์ วิธีนี้ช่วยให้สามารถประมวลผลแบบขนานและสามารถปรับปรุงประสิทธิภาพโดยรวมของแอปพลิเคชันของคุณได้

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

ปลั๊กอิน Dataverse C#

สร้างและปรับใช้ปลั๊กอิน Dataverse C# ที่ใช้ Application Insights SDK เพื่อสร้างความสัมพันธ์หลัก-รองที่ถูกต้องระหว่างบริการ เรียนรู้เพิ่มเติมใน เขียนปลั๊กอิน

การเปรียบเทียบปลั๊กอินแบบกำหนดเองและ ILogger ที่พร้อมใช้งานทันที

Dataverse มี ILogger ที่พร้อมใช้งานทันทีซึ่งสามารถกำหนดค่าได้ที่ระดับสภาพแวดล้อม ILogger ในตัวได้รับการออกแบบมาเพื่อให้มีกลไกการบันทึกที่ได้มาตรฐานในสภาพแวดล้อมต่างๆ เพื่อให้มั่นใจถึงความสม่ำเสมอและใช้งานง่าย อย่างไรก็ตาม อาจไม่ให้ความละเอียดและการปรับแต่งในระดับเดียวกับปลั๊กอิน ILogger แบบกำหนดเอง

ปลั๊กอินที่กำหนดเอง ILogger ใน Dataverse ให้ระดับข้อมูลที่ละเอียดยิ่งขึ้น เช่น การติดตาม การดีบัก และข้อมูล ช่วยให้นักพัฒนาสามารถบันทึกข้อมูลที่เฉพาะเจาะจงและเกี่ยวข้องมากขึ้นในระหว่างการดำเนินการปลั๊กอิน ILogger ใช้ค่าจากคำขอข้อความหรือพารามิเตอร์แท็กของตัวแปรที่ใช้ร่วมกันเพื่อระบุรายการหลักการติดตามการเรียกเพื่อการติดตามและความสัมพันธ์ของบันทึกที่ดีขึ้น

เรียนรู้เพิ่มเติมใน เขียนการวัดและส่งข้อมูลทางไกลไปที่ทรัพยากร Application Insights ของคุณโดยใช้ ILogger

แนวคิด C# ที่สำคัญสำหรับการแยกวิเคราะห์กิจกรรมและการระบุ ID หลัก

เมื่อคุณใช้ ILogger ปลั๊กอินแบบกำหนดเอง คุณจำเป็นต้องเข้าใจแนวคิด C# ที่สำคัญสำหรับการแยกวิเคราะห์กิจกรรมและระบุ ID หลัก ต่อไปนี้คือตัวอย่างวิธีสร้างกิจกรรมใหม่สำหรับการติดตามข้อความ

// Create a new activity for the trace message
var activity = new Activity("CustomActivity");
activity.SetParentId(traceParent);
activity.Start();
// Create a trace telemetry record
var traceTelemetry = new TraceTelemetry(message, ConvertLogLevel(level))
{
    Message = message,
    Context = { Operation = { ParentId = dependencyTelemetry.Id, Id = activity.Id } }
};
// Track the trace telemetry
telemetryClient.TrackTrace(traceTelemetry);

เคล็ดลับ

โครงการตัวอย่าง Dataverse OpenTelemetry มีตัวอย่างของการรวมปลั๊กอิน Dataverse กับ OpenTelemetry OpenTelemetry เป็นชุดของมาตรฐาน W3C, API, SDK และเครื่องมือที่คุณสามารถใช้เพิ่มโค้ดเพื่อตรวจสอบ สร้าง รวบรวมและส่งออกข้อมูลจากการวัดและส่งข้อมูลทางไกล

ผู้สนับสนุน

Microsoft ดูแลบทความนี้ ผู้ร่วมให้ข้อมูลต่อไปนี้เขียนบทความนี้

ผู้เขียนหลัก:

  • Grant Archibald, ผู้จัดการโครงการอาวุโส