SCT

กำลังเตรียมประสบการณ์ดิจิทัล

หาให้เจอว่าเว็บช้าหรือถูกบล็อกตรงไหนด้วย Distributed Tracing: เข้าใจ span, traceparent และ OpenTelemetry ผ่าน Cloudflare Traces

เมื่อหน้าเว็บช้าหรือผู้ใช้บางคนถูกบล็อก ทีมมักต้องไล่เปิด log จากหลายระบบแล้วเดาว่าปัญหาอยู่ตรงไหน Distributed Tracing แก้ปัญหานี้ด้วยการบันทึกทุกขั้นที่คำขอหนึ่งเดินผ่าน ไว้ในเส้นเวลาเดียวกัน Cloudflare เพิ่งเปิด Cloudflare Traces แบบ open beta ที่บันทึกทั้งเส้นทางตั้งแต่กฎความปลอดภัย แคช Workers ไปจนถึงเซิร์ฟเวอร์ต้นทาง บทความนี้ใช้เครื่องมือนี้เป็นตัวอย่างเพื่ออธิบายแนวคิดหลักที่ใช้ได้กับทุกระบบ

เมื่อหน้าเว็บช้าหรือผู้ใช้บางคนถูกบล็อก ทีมมักต้องไล่เปิด 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 context: จากเดิมที่แต่ละบริการมี trace แยกกัน กลายเป็น trace เดียวที่ต่อกันทุกบริการ (ภาพจาก The Cloudflare Blog)

อ่าน trace หนึ่งเส้นให้เป็น

ตัวอย่างในบทความต้นฉบับคือคำขอที่ใช้เวลารวม 539 มิลลิวินาที เมื่อเปิด trace จะเห็นว่ากฎความปลอดภัย การแปลง URL และการเลือกเส้นทางใช้เวลาเพียงระดับไมโครวินาที แต่ span ของแคชรายงานว่าไม่พบข้อมูล (cache miss) และ span ของเซิร์ฟเวอร์ต้นทางกินเวลาไป 527 มิลลิวินาที ข้อสรุปจึงชัดทันทีว่าปัญหาไม่ได้อยู่ที่ CDN แต่อยู่ที่ต้นทางตอบช้าและหน้านี้ไม่ได้ถูกแคช ทางแก้คือปรับการตั้งค่าแคชหรือเร่งเซิร์ฟเวอร์ต้นทาง ไม่ใช่ไปปรับกฎความปลอดภัย

ตัวอย่าง trace ของคำขอที่ใช้เวลา 539 มิลลิวินาที เวลาส่วนใหญ่อยู่ที่แคชไม่พบข้อมูลและรอเซิร์ฟเวอร์ต้นทาง 527 มิลลิวินาที (ภาพจาก The Cloudflare Blog)
ตัวอย่าง trace ของคำขอที่ใช้เวลา 539 มิลลิวินาที เวลาส่วนใหญ่อยู่ที่แคชไม่พบข้อมูลและรอเซิร์ฟเวอร์ต้นทาง 527 มิลลิวินาที (ภาพจาก The Cloudflare Blog)

กรณีผู้ใช้ถูกบล็อกก็อ่านแบบเดียวกัน span ของกฎความปลอดภัยจะบอกว่ากฎตัวไหนตัดสินให้บล็อกหรือขอยืนยันตัวตน ส่วนกรณี URL ถูกเขียนใหม่โดยไม่ตั้งใจ span ของ Transform Rules จะบอกว่ากฎไหนเปลี่ยนส่วนใดของคำขอ ทีมจึงแก้ได้ตรงจุดโดยไม่ต้องลองปิดกฎทีละตัว

Sampling: บันทึกเท่าที่จำเป็น

การบันทึกทุกคำขอบนเว็บที่มีคนใช้มากสร้างข้อมูลมหาศาล วิธีที่ Cloudflare Traces ใช้คือกำหนดอัตราพื้นฐานต่อโดเมน เช่น 1% ในเวลาปกติ แล้วเพิ่มกฎเฉพาะ (Trace Rules) ให้บันทึก 100% สำหรับคำขอที่ตรงเงื่อนไข เช่น โดเมนย่อยที่กำลังมีปัญหา IP ของทีมทดสอบ หรือ header สำหรับดีบักชั่วคราว หลักนี้ใช้ได้กับทุกระบบ คือเก็บน้อยตอนปกติ เก็บละเอียดเฉพาะจุดที่กำลังสืบ

เริ่มใช้ tracing ในทีมเล็กอย่างไร

  1. เริ่มจากเส้นทางที่สำคัญที่สุด เช่น หน้าชำระเงินหรือ API ที่ลูกค้าใช้บ่อย ไม่ต้องครอบทั้งระบบในวันแรก
  2. ใช้มาตรฐาน OpenTelemetry ในโค้ดของเรา เพื่อเปลี่ยนเครื่องมือดูข้อมูลได้ภายหลังโดยไม่ต้องเขียนใหม่
  3. ส่ง traceparent ทุกทอด ทั้งระหว่างบริการภายในและไปยังบริการภายนอกที่รองรับ
  4. ตั้ง sampling ต่ำไว้ก่อน แล้วเปิดเต็มเฉพาะตอนสืบปัญหา
  5. ระวังข้อมูลส่วนบุคคลใน 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

บทความอื่นที่เกี่ยวข้อง

บทความที่เกี่ยวข้อง

บทเรียนจากเหตุ GitHub ล่ม 7 ชั่วโมง 47 นาที: เมื่อปัญหาไม่ได้มาจากโค้ด แต่มาจากความจุ DevOps

บทเรียนจากเหตุ GitHub ล่ม 7 ชั่วโมง 47 นาที: เมื่อปัญหาไม่ได้มาจากโค้ด แต่มาจากความจุ

GitHub เผยแพร่รายงานหลังเหตุการณ์ล่มยาว 7 ชั่วโมง 47 นาที เมื่อ 17 สิงหาคม 2026 ซึ่งกระทบทั้งการล็อกอิน Actions API และ Copilot ทั่วโลก สาเหตุไม่ได้มาจากการเปลี่ยนโค้ดหรือคอนฟิก แต่มาจากความจุที่ตามการเติบโตไม่ทัน บทความนี้สรุปสิ่งที่เกิดขึ้นและเช็กลิสต์ที่ทีมไทยเอาไปใช้ได้ทันที

อ่านบทความ
ทุก branch มีเว็บทดสอบของตัวเอง: Cloudflare Worker Previews แยกข้อมูลและสถานะออกจาก production และเปิดให้เอเจนต์ AI ทดสอบงานได้เอง DevOps

ทุก branch มีเว็บทดสอบของตัวเอง: Cloudflare Worker Previews แยกข้อมูลและสถานะออกจาก production และเปิดให้เอเจนต์ AI ทดสอบงานได้เอง

ปัญหาคลาสสิกของทีมพัฒนาคือทุกคนแชร์เว็บทดสอบชุดเดียว งานของคนหนึ่งไปทับงานของอีกคน หรือเว็บทดสอบไปแตะข้อมูลจริงโดยไม่ตั้งใจ Cloudflare เปิดตัว Worker Previews ให้ทุก branch ของ Git มีสภาพแวดล้อมทดสอบของตัวเอง ทั้ง URL ค่าตั้ง ข้อมูลสถานะ และระบบติดตามการทำงาน แยกขาดจาก production และออกแบบมาให้เอเจนต์ AI ที่ช่วยเขียนโค้ดสามารถ deploy ทดสอบ เก็บหลักฐาน แล้วแก้ซ้ำได้เองภายในสภาพแวดล้อมของ branch นั้น

อ่านบทความ
เว็บทั่วโลกเร็วแค่ไหนจริง ๆ: Cloudflare เปิดข้อมูลความเร็วจากผู้ใช้จริงชุด BEACON ให้ใครก็วิเคราะห์ได้ และสิ่งที่ตัวเลขบอกทีมทำเว็บ เว็บ

เว็บทั่วโลกเร็วแค่ไหนจริง ๆ: Cloudflare เปิดข้อมูลความเร็วจากผู้ใช้จริงชุด BEACON ให้ใครก็วิเคราะห์ได้ และสิ่งที่ตัวเลขบอกทีมทำเว็บ

ทีมทำเว็บส่วนใหญ่วัดความเร็วจากเครื่องของตัวเองหรือจากเครื่องมือทดสอบ ซึ่งไม่เหมือนสิ่งที่ผู้ใช้จริงเจอบนมือถือและเครือข่ายที่หลากหลาย Cloudflare เปิดข้อมูลชุด BEACON ซึ่งรวบรวมการวัดความเร็วจากผู้ใช้จริงนับพันล้านครั้งต่อวันของเว็บไซต์ 10,000 อันดับแรกบนเครือข่ายของตน ให้ทุกคนวิเคราะห์ได้ผ่าน Google BigQuery ข้อมูลชุดแรกบอกว่าหน้าแรกที่ผู้ใช้เข้ามาถึงช้ากว่าการเปลี่ยนหน้าภายในเว็บหลายเท่า และเบราว์เซอร์บน iPhone ช้ากว่าเบราว์เซอร์ตระกูล Chrome ในหลายสิบประเทศ

อ่านบทความ

ติดต่อเพื่อขอรับคำปรึกษาจากทีมงาน

ตั้งแต่ประเมินระบบปัจจุบัน วางแผน จนถึงลงมือพัฒนา — คุยกับเราได้โดยไม่มีค่าใช้จ่าย

ปรึกษาทีมของเรา