หลังจากใช้งาน Zipkin มาสักพัก
ก็มีเจอสิ่งที่คล้าย ๆ กันและน่าสนใจมาก ๆ คือ Jaeger จาก Uber
โดยมีแรงบันดาลใจมาจาก Dapper และ OpenZipkin
เป้าหมายหลักของเครื่องมือตัวนี้
คือทำการ tracing การทำงานต่าง ๆ ของระบบงาน
ไม่ว่าจะอยู่ในรูปแบบไหนก็ตาม
แน่นอนว่าทุก ๆ ระบบน่าจะมีหรือคิดหรือทำไว้บ้าง
เพื่อทำการ monitoring การทำงานของระบบ
เพื่อช่วยวิเคราห์เรื่อง dependency ต่าง ๆ ของระบบ
เพื่อช่วยหา root cause ของปัญหาต่าง ๆ
เพื่อช่วยดู performance การทำงานของส่วนต่าง ๆ ของระบบ
โดยที่ 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 เป็นต้นยังไม่พอนะ Jaeger มันมี component มากมาย
ดังรูปจะรออะไรมาลองใช้งานกันดีกว่า
Jaeger นั้นประกอบไปด้วย 3 ส่วนการทำงานหลักคือ- Agent เป็น process ที่จะ run อยู่ที่ client หรือ host ต่าง ๆ ที่ต้องการจัดเก็บข้อมูล
- Collector เป็นส่วนการจัดเก็บข้อมูล ซึ่งมีทั้ง Cassandra และ Elasticsearch
- Query เป็นส่วนการดึงข้อมูลไปแสดงผล