Image may be NSFW.
Clik here to view.
Clik here to view.

โดยที่ Jaeger ก็มีเป้าหมายเช่นเดียวกัน
แต่เขียนว่าสร้างมาเพื่อ Microservice เลยนะ พร้อมกับรูปแบบก็เข้ากันกับ OpenTracing นั่นหมายความว่าจะไปใช้พวก ZipKin ก็เปลี่ยนได้สบาย ๆ แถมมี Client library หลายตัวเลย เช่น Go, Java, NodeJS, Python และ C++ ดังนั้นคิดว่าทุกอย่างน่าจะพร้อมส่วนโครงสร้างของ Jaeger เป็นดังนี้
- Frontend พัฒนาด้วย React
- Backend พัฒนาด้วยภาษา Go
- ในส่วนของที่จัดเก็บข้อมูลประกอบไปด้วย Cassandra และ Elasticsearch
- มี Spark สำหรับ aggregation ข้อมูลจากหลาย ๆ ที่ด้วย
สิ่งที่ควรรู้ไว้บ้าง เพื่อทำให้เข้าใจมากขึ้น
Span คือส่วนการทำงานต่าง ๆ ของระบบ ประกอบไปด้วยชื่อ เวลาเริ่มต้น และเวลาการทำงาน โดยที่ Span สามารถซ้อนการและเรียงลำดับ เหมือนกับการทำงานทั่วไปนั่นเอง ยกตัวอย่างเช่น web -> api -> caching -> database เป็นต้น Image may be NSFW.Clik here to view.

ยังไม่พอนะ Jaeger มันมี component มากมาย
ดังรูป Image may be NSFW.Clik here to view.

จะรออะไรมาลองใช้งานกันดีกว่า
Jaeger นั้นประกอบไปด้วย 3 ส่วนการทำงานหลักคือ- Agent เป็น process ที่จะ run อยู่ที่ client หรือ host ต่าง ๆ ที่ต้องการจัดเก็บข้อมูล
- Collector เป็นส่วนการจัดเก็บข้อมูล ซึ่งมีทั้ง Cassandra และ Elasticsearch
- Query เป็นส่วนการดึงข้อมูลไปแสดงผล
Clik here to view.

มาลองเขียน code เพื่อ tracing การทำงานของระบบด้วย Jaeger กันดีกว่า
เป็นตัวอย่างของการเขียนด้วยภาษา Go ดังนั้นจึงใช้ Client library ชื่อว่า Jaeger client go สามารถเขียน code ง่าย ๆ ได้ดังนี้ ทำการสร้าง Jaeger tracer ขึ้นมาก่อน จากนั้นก็ระบบชื่อของ Span ไป ชื่อว่า service01 [gist id="6c85e901224cd1489972956e14fd72a3" file="main.go"] โดยในส่วนอื่น ๆ เราจะส่ง tracer นี้เข้าไปเช่นกัน จากนั้นก็กำหนดชื่อของ span ตามที่ต้องการ จะได้ผลการทำงานดังนี้ Image may be NSFW.Clik here to view.
