Distributed tracing ด้วย AWS X-Ray และ structured logging

การ Deploy แอปพลิเคชันบน AWS

Dunieski Otano

Amazon Web Services Solutions Architect

คำขอที่ช้าซึ่งไม่มีใครหาเจอ

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

แว่นขยายติดตามคำขอที่ช้าผ่าน service map แบบกระจายที่มีโหนดคอขวดสีแดง

การ Deploy แอปพลิเคชันบน AWS

ปัญหาที่ distributed tracing แก้ได้

ล็อกแยกรายเซอร์วิสสีแดงทางซ้าย เทียบกับ X-Ray Gantt trace timeline สีเขียวที่รวมคำขอเดียวกันผ่าน API Gateway, Lambda, DynamoDB และ external API

  • คำขอหนึ่งผ่านหลายเซอร์วิส
  • ล็อกอย่างเดียวไม่แสดงเส้นทางตั้งแต่ต้นจนจบ
  • trace เชื่อมคำขอทั้งหมดเข้าด้วยกัน
  • เห็นได้ชัดว่าเวลาหายไปที่จุดใด
การ Deploy แอปพลิเคชันบน AWS

Segment, subsegment และ service map

  • Segment: งานที่เซอร์วิสหนึ่งทำ
  • Subsegment: หน่วยย่อยใน segment เช่น การเรียก DB
  • Service map: กราฟแสดง segment ทั้งหมด
  • แต่ละโหนดแสดง latency และข้อผิดพลาด

โครงสร้าง X-Ray trace: segment ต่อเซอร์วิสพร้อม subsegment สำหรับการเรียก DB รวมเป็น service map graph แสดง latency และ error rate บนแต่ละโหนด

การ Deploy แอปพลิเคชันบน AWS

Annotations กับ metadata


Annotations

  • คู่ key-value ที่ถูก index ทำให้กรองข้อมูลได้
  • ใช้กับสิ่งที่จะค้นหา เช่น customer tier

Metadata

  • รายละเอียดเพิ่มเติมที่ไม่ถูก index
  • แนบไว้เพื่อบริบท แต่ไม่สามารถค้นหาได้
การ Deploy แอปพลิเคชันบน AWS

เชื่อมล็อกกับ trace ID

  • แต่ละ trace มีtrace IDที่ไม่ซ้ำกัน
  • ใส่ trace ID ไว้ในstructured log
  • ข้ามจาก trace ที่ช้าไปยังบรรทัดล็อกที่ตรงกันได้ทันที
  • ล็อกและ trace กลายเป็นการตรวจสอบเดียวกัน

บรรทัด structured log ที่ไฮไลต์ฟิลด์ xray_trace_id พร้อมลูกศรชี้จาก X-Ray trace view ไปยังบรรทัดล็อกที่ตรงกันใน CloudWatch Logs เพื่อการตรวจสอบแบบสัมพันธ์กัน

การ Deploy แอปพลิเคชันบน AWS

อ่าน service map เพื่อหาคอขวด

X-Ray service map ที่ไฮไลต์โหนด latency สูง พร้อม drill-down ลงใน trace timeline แสดง segment ที่ยาวที่สุดในฐานะคอขวด

  • เริ่มที่service map ไม่ใช่ล็อก
  • หาโหนดที่มีlatencyสูงสุด
  • เจาะลึกลงในtrace timeline
  • segment ที่ยาวที่สุดคือจุดที่ต้องสงสัย
การ Deploy แอปพลิเคชันบน AWS

Tracing ตลอดคำขอทั้งหมด

  • API Gateway, Lambda และการเรียก downstream ล้วนถูก trace
  • แต่ละรายการเพิ่มsegmentเข้า trace เดียวกัน
  • trace ID เดียวเชื่อมล็อกและ segment ทั้งหมด
  • มองเห็นทุกคำขอตั้งแต่ต้นจนจบ

Distributed trace ตั้งแต่ต้นจนจบจาก API Gateway ผ่าน Lambda ไปยัง DynamoDB และ external API โดยมี trace ID เดียวปรากฏในส่วนหัวของแต่ละ segment

การ Deploy แอปพลิเคชันบน AWS

มาฝึกกันเถอะ!

การ Deploy แอปพลิเคชันบน AWS

Preparing Video For Download...