การแก้ปัญหาแอปพลิเคชันที่ใช้งานจริง

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

Dunieski Otano

Amazon Web Services Solutions Architect

Task timed out

  • ฟังก์ชันล้มเหลว แต่ไม่ใช่ทุกครั้ง
  • ล็อกแสดง "Task timed out"
  • ลายเซ็นข้อผิดพลาดชี้ไปยังสาเหตุที่แท้จริง

นาฬิกาจับเวลาวางข้างบรรทัดล็อกข้อผิดพลาดที่แสดงว่า Lambda task หมดเวลา

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

ลายเซ็นความล้มเหลวที่พบบ่อยใน Lambda

ตารางสี่ช่องแสดงลายเซ็นความล้มเหลวของ Lambda: Timeout พร้อมล็อก task-timed-out, Throttled พร้อม TooManyRequestsException, Access Denied พร้อม AccessDeniedException และ Out of Memory พร้อม signal-killed error

  • Timeout: "Task timed out after N seconds"
  • Throttle: TooManyRequestsException
  • IAM denial: AccessDenied, not authorized
  • Out of memory: runtime ถูกยุติกลางการทำงาน
การ Deploy แอปพลิเคชันบน AWS

การตอบสนองครั้งแรกเมื่อฟังก์ชันล้มเหลว

  • อ่านข้อความข้อผิดพลาดก่อนเปลี่ยนแปลงสิ่งใด
  • จับคู่กับลายเซ็นที่รู้จัก
  • ตรวจสอบ latency ของการเรียกdownstreamเมื่อเกิด timeout
  • เปลี่ยนทีละอย่าง แล้วทดสอบใหม่

วงจรการแก้ปัญหา: อ่านข้อความข้อผิดพลาด จับคู่กับลายเซ็นที่รู้จัก ตรวจสอบ latency ของ downstream เปลี่ยนทีละอย่าง แล้วทดสอบใหม่

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

CloudWatch Logs Insights

คิวรี Logs Insights ใช้ filter เพื่อกรองข้อมูล และ stats เพื่อรวมผล ตัวอย่างนี้นับจำนวนข้อผิดพลาดต่อนาที:

fields @timestamp, @message
| filter level = "ERROR"
| stats count() as errors by bin(1m)
| sort errors desc
การ Deploy แอปพลิเคชันบน AWS

การดีบักความล้มเหลวของการเชื่อมต่อจากทั้งสองฝั่ง

  • ความล้มเหลวมักเกิดระหว่างบริการ
  • อ่านล็อกของ caller และล็อกของ callee
  • จับคู่ด้วยrequest IDหรือtrace ID
  • ช่องว่างระหว่างกันเผยให้เห็นจุดที่ขาด

ล็อกของ caller และ callee วางเรียงกันโดยใช้ request ID พร้อมช่องว่างที่ระบุว่าเป็นจุดที่การเชื่อมต่อขาดและ request หยุดลง

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

Health check และ readiness probe

Load balancer กระจาย traffic ไปยัง target ที่ปกติพร้อมเครื่องหมายถูกสีเขียว และ target ที่ล้มเหลวถูกนำออกจากการหมุนเวียนหลังตรวจสอบสุขภาพไม่ผ่านหลายครั้ง

  • Health check: instance ยังทำงานและให้บริการอยู่หรือไม่
  • Load balancer กระจายงานเฉพาะไปยังtarget ที่ปกติ
  • Readiness: พร้อมรับ traffic แล้วหรือยัง
  • การตรวจสอบที่ล้มเหลวจะนำ target ออกจากการหมุนเวียน
การ Deploy แอปพลิเคชันบน AWS

แนวทางการแก้ปัญหา

  • อ่านข้อผิดพลาดและจับคู่กับลายเซ็น
  • คิวรีล็อกด้วย Logs Insights เพื่อระบุขอบเขต
  • เชื่อมโยงทั้งสองฝั่งด้วย request หรือ trace ID
  • เปลี่ยนทีละอย่างแล้วตรวจสอบ

แนวทางแก้ปัญหา 4 ขั้นตอน: อ่านข้อผิดพลาดและจับคู่ลายเซ็น คิวรีล็อกด้วย Insights เพื่อระบุขอบเขต เชื่อมโยงทั้งสองฝั่งด้วย trace ID เปลี่ยนทีละอย่างแล้วตรวจสอบ

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

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

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

Preparing Video For Download...