ทำ Distributed Tracing ด้วย OpenTelemetry

Sharing is caring!

บทนำ

เมื่อระบบของเรากลายเป็นระบบแบบ Microservices ที่มีหลายบริการทำงานร่วมกัน การติดตามว่า request ใดผ่านบริการใดบ้างในแต่ละช่วงเวลานั้นกลายเป็นเรื่องท้าทายมากขึ้น นี่คือจุดที่ “Distributed Tracing” เข้ามามีบทบาท และหนึ่งในเครื่องมือมาตรฐานที่ได้รับความนิยมสูงสุดในปัจจุบันก็คือ OpenTelemetry

Distributed Tracing คืออะไร?

Distributed Tracing คือกระบวนการในการติดตามและวิเคราะห์ flow ของ request ที่ไหลผ่านหลายบริการในระบบแบบกระจาย (distributed system) ซึ่งช่วยให้เราสามารถตอบคำถามได้ว่า:

  • Request ใช้เวลานานเท่าไหร่?
  • Service ใดเป็นคอขวดของระบบ?
  • เกิด error ที่ service ใด?

OpenTelemetry คืออะไร?

OpenTelemetry (OTel) คือ framework แบบ open-source ที่ใช้สำหรับการเก็บข้อมูลเกี่ยวกับ observability ได้แก่:

  • Trace
  • Metrics
  • Logs

โดยมีเป้าหมายเพื่อเป็นมาตรฐานกลางที่สามารถใช้กับเครื่องมืออื่น ๆ เช่น Jaeger, Zipkin, Prometheus, Grafana และ Datadog ได้อย่างยืดหยุ่น

องค์ประกอบของ Trace

  • Trace: เส้นทางของ request หนึ่งรายการ
  • Span: หน่วยย่อยของ trace เช่น การเรียก service, function หรือ query
  • Context: ข้อมูลที่ใช้เชื่อมโยง spans เข้าด้วยกัน

วิธีใช้งาน OpenTelemetry

1. ติดตั้ง SDK

ตัวอย่างใน Node.js:

npm install @opentelemetry/api @opentelemetry/sdk-node \
  @opentelemetry/auto-instrumentations-node

2. ตั้งค่า SDK

const { NodeSDK } = require('@opentelemetry/sdk-node');
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');

const sdk = new NodeSDK({
  instrumentations: [getNodeAutoInstrumentations()],
});

sdk.start();

3. ส่งข้อมูลไปยัง Exporter

เช่น Jaeger, OTLP หรือ Console

npm install @opentelemetry/exporter-jaeger
const { JaegerExporter } = require('@opentelemetry/exporter-jaeger');
const exporter = new JaegerExporter({
  serviceName: 'my-service',
  endpoint: 'http://localhost:14268/api/traces',
});

ทำงานร่วมกับ Jaeger

  • ใช้สำหรับแสดงผล trace ด้วย UI ที่เข้าใจง่าย
  • สามารถติดตั้งผ่าน Docker ได้อย่างรวดเร็ว
docker run -d --name jaeger \
  -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
  -p 5775:5775/udp -p 6831:6831/udp -p 16686:16686 \
  jaegertracing/all-in-one

เข้าดู Dashboard ได้ที่ http://localhost:16686

ประโยชน์ของ Distributed Tracing

  • ติดตาม root cause ได้เร็วขึ้น
  • เข้าใจ performance bottlenecks
  • วิเคราะห์ระบบได้แบบ end-to-end
  • เพิ่มความมั่นใจในระบบเมื่อทำการ deploy

สรุป

OpenTelemetry เป็นเครื่องมือมาตรฐานใหม่ที่ช่วยให้นักพัฒนาและทีม DevOps สามารถทำ Distributed Tracing ได้อย่างมีประสิทธิภาพ รองรับระบบขนาดใหญ่และทำงานร่วมกับเครื่องมืออื่นได้หลากหลาย ทำให้คุณเข้าใจระบบของคุณได้ลึกขึ้นและแก้ปัญหาได้เร็วขึ้น

บทความนี้ใช้เวลาอ่านประมาณ 10 – 15 นาที จัดทำโดยทีมงาน poolsawat.com

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *