อ่านประมาณ 8 นาที
ระดับกลาง
หมวด: DevOps
อ้างอิง: The Cloudflare Blog
เมื่อหน้าเว็บช้าหรือผู้ใช้บางคนถูกบล็อก ทีมมักต้องไล่เปิด log จากหลายระบบแล้วเดาว่าปัญหาอยู่ตรงไหน Distributed Tracing แก้ปัญหานี้ด้วยการบันทึกทุกขั้นที่คำขอหนึ่งเดินผ่าน ไว้ในเส้นเวลาเดียวกัน Cloudflare เพิ่งเปิด Cloudflare Traces แบบ open beta ที่บันทึกทั้งเส้นทางตั้งแต่กฎความปลอดภัย แคช Workers ไปจนถึงเซิร์ฟเวอร์ต้นทาง บทความนี้ใช้เครื่องมือนี้เป็นตัวอย่างเพื่ออธิบายแนวคิดหลักที่ใช้ได้กับทุกระบบ
ทำไม log อย่างเดียวไม่พอ
เว็บสมัยนี้หนึ่งคำขออาจผ่านหลายชั้น เช่น ไฟร์วอลล์เว็บ ตัวแปลง URL แคช โค้ดที่รันบน edge และเซิร์ฟเวอร์ต้นทาง ซึ่งแต่ละชั้นเขียน log แยกกันคนละที่ เมื่อผู้ใช้บอกว่าเว็บช้า ทีมต้องเอาเวลามาเทียบกันเองว่าคำขอนั้นใช้เวลาที่ชั้นไหนเท่าไร ถ้าเวลาของแต่ละระบบไม่ตรงกันหรือมีคำขอจำนวนมากพร้อมกัน แทบหาไม่เจอ Tracing แก้ด้วยการให้ทุกชั้นบันทึกข้อมูลภายใต้รหัสเดียวกันของคำขอนั้น แล้วนำมาวางเป็นภาพเดียว
ศัพท์ที่ต้องรู้ก่อนเริ่ม
ศัพท์พื้นฐานของ Distributed Tracing คำ ความหมาย Trace เส้นทางทั้งหมดของคำขอหนึ่ง ตั้งแต่เข้ามาจนตอบกลับ Span ขั้นตอนหนึ่งในเส้นทางนั้น มีเวลาเริ่ม เวลาจบ และผลลัพธ์ span ซ้อนกันเป็นลำดับชั้นได้ Attribute ข้อมูลประกอบของ span เช่น รหัสสถานะ HTTP สถานะแคช หรือชื่อกฎที่ทำงาน Trace context / traceparent รหัสของ trace ที่ส่งต่อไปกับคำขอผ่าน header ตามมาตรฐาน W3C เพื่อให้ระบบถัดไปบันทึกต่อใน trace เดียวกัน Sampling การเลือกบันทึกเพียงส่วนหนึ่งของคำขอ เพื่อไม่ให้ข้อมูลและค่าใช้จ่ายบานปลาย OpenTelemetry / OTLP มาตรฐานเปิดสำหรับเก็บและส่งข้อมูล trace ทำให้ย้ายไปใช้ระบบดูข้อมูลยี่ห้อใดก็ได้
ต่อ trace ข้ามระบบด้วย traceparent
ปัญหาที่พบบ่อยคือแต่ละบริการเริ่ม trace ของตัวเอง ภาพที่ได้จึงขาดเป็นท่อน ๆ ไม่รู้ว่าท่อนไหนต่อกับท่อนไหน วิธีแก้คือส่ง header traceparent ต่อไปทุกทอด Cloudflare Traces รับ traceparent ที่มากับคำขอขาเข้า ทำให้ span ของ Cloudflare เข้าไปอยู่ใน trace ที่เริ่มจากแอปฝั่งผู้ใช้ได้ และส่ง traceparent ใหม่ต่อไปยังเซิร์ฟเวอร์ต้นทาง บริการที่ติดตั้ง OpenTelemetry ไว้ก็จะบันทึกต่อใน trace เดียวกัน ส่วนจะยอมรับ context จากภายนอกหรือไม่ ตั้งเป็นนโยบายได้ เพื่อไม่ให้ใครก็ได้ส่งรหัสมาปน
ก่อนและหลังส่งต่อ trace context: จากเดิมที่แต่ละบริการมี trace แยกกัน กลายเป็น trace เดียวที่ต่อกันทุกบริการ (ภาพจาก The Cloudflare Blog)
อ่าน trace หนึ่งเส้นให้เป็น
ตัวอย่างในบทความต้นฉบับคือคำขอที่ใช้เวลารวม 539 มิลลิวินาที เมื่อเปิด trace จะเห็นว่ากฎความปลอดภัย การแปลง URL และการเลือกเส้นทางใช้เวลาเพียงระดับไมโครวินาที แต่ span ของแคชรายงานว่าไม่พบข้อมูล (cache miss) และ span ของเซิร์ฟเวอร์ต้นทางกินเวลาไป 527 มิลลิวินาที ข้อสรุปจึงชัดทันทีว่าปัญหาไม่ได้อยู่ที่ CDN แต่อยู่ที่ต้นทางตอบช้าและหน้านี้ไม่ได้ถูกแคช ทางแก้คือปรับการตั้งค่าแคชหรือเร่งเซิร์ฟเวอร์ต้นทาง ไม่ใช่ไปปรับกฎความปลอดภัย
ตัวอย่าง trace ของคำขอที่ใช้เวลา 539 มิลลิวินาที เวลาส่วนใหญ่อยู่ที่แคชไม่พบข้อมูลและรอเซิร์ฟเวอร์ต้นทาง 527 มิลลิวินาที (ภาพจาก The Cloudflare Blog)
กรณีผู้ใช้ถูกบล็อกก็อ่านแบบเดียวกัน span ของกฎความปลอดภัยจะบอกว่ากฎตัวไหนตัดสินให้บล็อกหรือขอยืนยันตัวตน ส่วนกรณี URL ถูกเขียนใหม่โดยไม่ตั้งใจ span ของ Transform Rules จะบอกว่ากฎไหนเปลี่ยนส่วนใดของคำขอ ทีมจึงแก้ได้ตรงจุดโดยไม่ต้องลองปิดกฎทีละตัว
Sampling: บันทึกเท่าที่จำเป็น
การบันทึกทุกคำขอบนเว็บที่มีคนใช้มากสร้างข้อมูลมหาศาล วิธีที่ Cloudflare Traces ใช้คือกำหนดอัตราพื้นฐานต่อโดเมน เช่น 1% ในเวลาปกติ แล้วเพิ่มกฎเฉพาะ (Trace Rules) ให้บันทึก 100% สำหรับคำขอที่ตรงเงื่อนไข เช่น โดเมนย่อยที่กำลังมีปัญหา IP ของทีมทดสอบ หรือ header สำหรับดีบักชั่วคราว หลักนี้ใช้ได้กับทุกระบบ คือเก็บน้อยตอนปกติ เก็บละเอียดเฉพาะจุดที่กำลังสืบ
เริ่มใช้ tracing ในทีมเล็กอย่างไร
เริ่มจากเส้นทางที่สำคัญที่สุด เช่น หน้าชำระเงินหรือ API ที่ลูกค้าใช้บ่อย ไม่ต้องครอบทั้งระบบในวันแรกใช้มาตรฐาน OpenTelemetry ในโค้ดของเรา เพื่อเปลี่ยนเครื่องมือดูข้อมูลได้ภายหลังโดยไม่ต้องเขียนใหม่ส่ง traceparent ทุกทอด ทั้งระหว่างบริการภายในและไปยังบริการภายนอกที่รองรับตั้ง sampling ต่ำไว้ก่อน แล้วเปิดเต็มเฉพาะตอนสืบปัญหาระวังข้อมูลส่วนบุคคลใน attribute อย่าบันทึกอีเมล เลขบัตร หรือโทเคนลงใน span
Cloudflare Traces ตอนนี้อยู่ในช่วง open beta เปิดได้จากแดชบอร์ด API หรือ Terraform โดยไม่ต้องแก้โค้ด แผนฟรีเก็บข้อมูลได้วันละ 0.5 GB และเก็บย้อนหลัง 7 วัน ส่งออกไปยังระบบดูข้อมูลที่รองรับ OTLP ได้ และ Cloudflare มีแผนขยายไปยังส่วนอื่น เช่น กฎป้องกัน DDoS, Access และ Queues
ทีมพัฒนาในไทยจำนวนมากยังแก้ปัญหาเว็บช้าด้วยการเดาและลองผิดลองถูก การวาง tracing ไว้ตั้งแต่ต้นทำให้ตอบได้ภายในไม่กี่นาทีว่าปัญหาอยู่ชั้นไหน และลดเวลาที่ระบบล่มลงได้มาก ทีมงาน Smart Cyber Tech วางระบบ DevOps และการเฝ้าระวังระบบ ตั้งแต่ log, metric ไปจนถึง tracing ให้เห็นปัญหาก่อนผู้ใช้ ปรึกษาได้ที่ แบบฟอร์มติดต่อ
สรุปสาระสำคัญ ทำไม log อย่างเดียวไม่พอ ศัพท์ที่ต้องรู้ก่อนเริ่ม ต่อ trace ข้ามระบบด้วย traceparent
แหล่งอ้างอิง เรียบเรียงจาก The Cloudflare Blog —
อ่านบทความต้นฉบับ ภาพปกและแผนภาพ: The Cloudflare Blog · ลิขสิทธิ์ภาพเป็นของเจ้าของต้นฉบับ ใช้ประกอบการรายงานพร้อมอ้างอิงแหล่งที่มา
มีคำถามเพิ่มเติมเกี่ยวกับบทความนี้? เขียนหาเราได้ที่
info@smart-cyber-tech.com
บริการที่เกี่ยวข้องจากทีมงาน Smart Cyber Tech
แบ่งปันบทความนี้:
LINE
Facebook
X
คัดลอกลิงก์
ปรึกษาทีมของเรา