Odigos (YC W23) – การทำ distributed tracing แบบทันทีสำหรับ Kubernetes คลัสเตอร์
(github.com/keyval-dev)สวัสดีครับ พวกเราคือ Eden และ Ari ผู้ร่วมก่อตั้งของ Odigos(https://github.com/keyval-dev/odigos) Odigos เป็นโปรเจกต์โอเพนซอร์สที่ช่วยสร้าง distributed trace สำหรับแอปพลิเคชันได้ทันที เพื่อให้ผู้ใช้นำไปใช้งานได้อย่างง่ายดาย Odigos เข้ากันได้กับเครื่องมือมอนิเตอร์ริงที่มีอยู่เดิม และไม่จำเป็นต้องแก้ไขซอร์สโค้ด
ประสบการณ์ของเรากับเครื่องมือมอนิเตอร์ริงแบบเดิมในอดีตนั้นน่าผิดหวังมาก ระหว่างการมอนิเตอร์ระบบแบบกระจายที่มีไมโครเซอร์วิสหลายตัว เราพบว่าเราใช้เวลามากเกินไปในการระบุว่าไมโครเซอร์วิสใดเป็นต้นตอของปัญหา ตัวอย่างเช่น เราเคยสงสัยว่าแอปพลิเคชันหนึ่งเป็นสาเหตุของความหน่วงและใช้เวลาหลายชั่วโมงในการดีบัก สุดท้ายกลับมาพบทีหลังว่าต้นเหตุจริงอยู่ที่แอปพลิเคชันอื่นที่เกี่ยวข้อง
หลังจากนั้น เราจึงศึกษา distributed tracing ซึ่งเหมาะกับการแก้ปัญหาลักษณะนี้ ต่างจาก metrics หรือ logs ที่จับข้อมูลของช่วงเวลาหนึ่งในแอปพลิเคชันเดียว distributed tracing จะติดแท็กคำขอแต่ละรายการด้วย ID เฉพาะ ทำให้สามารถติดตามคำขอที่ถูกส่งต่อภายในสภาพแวดล้อมแบบกระจายได้ ด้วยวิธีนี้ นักพัฒนาจะเข้าใจ context ของแต่ละคำขอและวิธีการทำงานของแอปพลิเคชันแบบกระจายได้ดีขึ้น
อย่างไรก็ตาม วิธีนี้มีข้อเสียคือใช้งานจริงได้ยาก ต่างจาก metrics หรือ logs สำหรับแอปพลิเคชันเดี่ยว distributed tracing ต้องถูกติดตั้งให้ครอบคลุมหลายแอปพลิเคชันจึงจะสมบูรณ์ได้ หากมีแอปพลิเคชันเพียงตัวเดียวที่ไม่สร้าง distributed trace การส่งต่อ context ก็จะขาดตอน และคุณค่าของ trace นั้นก็จะลดลงอย่างมาก
จากประสบการณ์ที่เราเคยลงมือทำ distributed tracing ให้หลายบริษัท การประสานให้ทุกทีมพัฒนาทำ instrumentation ให้กับแต่ละแอปพลิเคชันเพื่อให้ได้ distributed tracing ที่ครบถ้วนนั้นเป็นเรื่องยากมาก เมื่อทำเสร็จแล้ว มันมีคุณค่าสูงมากเพราะช่วยให้แก้ปัญหาในโปรดักชันได้เร็วขึ้นมาก แต่ถ้าทำได้เพียงบางส่วน มันกลับแทบไม่มีคุณค่าเท่าไร
เราจึงเริ่มทำให้กระบวนการนี้เป็นอัตโนมัติ เรารู้วิธีจัดการกับกระบวนการส่วนใหญ่แล้ว แต่ส่วนที่ยากที่สุดคือการทำ instrumentation อัตโนมัติให้โปรแกรมที่เขียนด้วยภาษาคอมไพล์ เช่น Go หากทำให้ส่วนนั้นเป็นอัตโนมัติได้ เราก็เชื่อว่าจะสามารถทำให้กระบวนการสร้าง distributed trace ทั้งหมดเป็นอัตโนมัติได้ ระหว่างการวิจัย เราพบว่าการใช้ eBPF (เทคโนโลยีที่ทำให้ Linux kernel โหลดโปรแกรมภายนอกและรันภายในเคอร์เนลได้) ทำให้การทำ instrumentation อัตโนมัติสำหรับภาษาคอมไพล์เป็นไปได้ นั่นคือชิ้นส่วนสุดท้ายของจิ๊กซอว์ และทำให้เราสร้าง Odigos ขึ้นมาได้
Odigos จะเริ่มจากสแกนแอปพลิเคชันทั้งหมดที่กำลังรันอยู่ จากนั้นใช้ eBPF และ OpenTelemetry เพื่อตรวจจับภาษาที่ใช้พัฒนาแต่ละแอปพลิเคชันและทำ instrumentation ให้โดยอัตโนมัติตามความเหมาะสม นอกจากนี้ยังทำการ deploy collectors ที่ทำหน้าที่บัฟเฟอร์ กรอง และส่งต่อข้อมูลไปยังเครื่องมือมอนิเตอร์ริงที่ผู้ใช้เลือก พร้อมทั้ง auto scale ตามปริมาณทราฟฟิก ด้วยระบบอัตโนมัตินี้ นักพัฒนาจึงสามารถใช้งาน distributed tracing ได้ภายในไม่กี่นาที แทนที่จะต้องทำงานด้วยมือซึ่งอาจใช้เวลาหลายเดือน
การทำ instrumentation อัตโนมัติข้ามหลายภาษาโปรแกรมมิงไม่ใช่งานง่าย โดยเฉพาะเมื่อคำนึงถึง static binaries (เช่น ไบนารีที่สร้างโดย Go compiler) เราได้พัฒนากลไกหลายแบบเพื่อแทรก header ที่เกี่ยวข้องอย่างปลอดภัยและเสถียร รวมถึงสร้างระบบสำหรับติดตามฟังก์ชันและ struct ของไลบรารีโอเพนซอร์สหลากหลายเวอร์ชัน นอกจากนี้ เรายังพัฒนาระบบสำหรับจัดการหน่วยความจำ userspace จาก eBPF อีกด้วย ผลลัพธ์คือ Odigos กลายเป็นโซลูชันเดียวที่สามารถสร้าง distributed trace แบบอัตโนมัติสำหรับภาษาคอมไพล์อย่าง Go และ Rust ได้ ขณะที่โซลูชันอื่นต้องการให้ผู้ใช้เป็นผู้เชี่ยวชาญด้าน OpenTelemetry หรือ eBPF โซลูชันของเราไม่จำเป็นต้องมีความรู้ด้าน observability มาก่อน
โซลูชันของเราสามารถติดตั้งบน Kubernetes คลัสเตอร์ได้ด้วยคำสั่งเดียว เมื่อติดตั้งแล้ว ระบบจะตรวจจับภาษาของแอปพลิเคชันทั้งหมดที่กำลังรันอยู่และนำ instrumentor ที่เหมาะสมไปใช้ สำหรับภาษาแบบ JIT (Java และ .NET) หรือภาษา interpreted (JavaScript และ Python) ระบบจะ deploy OpenTelemetry instrumentors ส่วนภาษาคอมไพล์ (Go, Rust, C) จะ deploy instrumentors ที่ใช้ eBPF เป็นฐาน ทั้งหมดนี้ถูกทำให้เป็นนามธรรมจากผู้ใช้ ดังนั้นผู้ใช้เพียงแค่ (1) เลือกบางส่วนหรือทั้งหมดของแอปพลิเคชันเป้าหมาย และ (2) เลือกแบ็กเอนด์ที่จะส่งข้อมูลมอนิเตอร์ริงไปเท่านั้น
ในเดือนพฤษภาคม 2022 เราได้ปล่อยโปรเจกต์โอเพนซอร์สตัวแรกของเรา ซึ่งเป็น instrumentor อัตโนมัติสำหรับแอปพลิเคชัน Go ที่ทำงานบน eBPF หลังจากนั้น เราได้บริจาคโปรเจกต์นี้ให้กับชุมชน OpenTelemetry และปัจจุบันมันกำลังถูกพัฒนาต่อในฐานะส่วนหนึ่งของ Go Automatic Instrumentation SIG
เราเชื่อมั่นอย่างมากในมาตรฐานแบบเปิด ดังนั้น instrumentation และ collectors ทั้งหมดที่ Odigos ใช้จึงอิงอยู่บนโปรเจกต์โอเพนซอร์สที่พัฒนาโดยชุมชน OpenTelemetry ซึ่งช่วยให้เราไม่ยึดติดกับเวนเดอร์รายใดรายหนึ่ง
ขณะนี้เรากำลังมุ่งเน้นไปที่การสร้างโปรเจกต์โอเพนซอร์ส ยังไม่มีการตั้งราคา หรือฟีเจอร์แบบเสียเงินในตอนนี้ แต่ในอนาคตเรามีแผนจะเปิดให้บริการ Odigos เวอร์ชัน managed ที่มีฟีเจอร์ระดับองค์กรรวมอยู่ด้วย
ข้อมูลเพิ่มเติมดูได้ด้านล่าง
- เอกสาร: https://docs.odigos.io
- วิดีโอ (เดโม): https://www.youtube.com/watch?v=9d36AmVtuGU
- โฮมเพจ: https://odigos.io
เราอยากฟังและแลกเปลี่ยนประสบการณ์รวมถึงเรื่องราวต่าง ๆ ของทุกคนเกี่ยวกับการติดตามและมอนิเตอร์แอปพลิเคชันแบบกระจาย!
1 ความคิดเห็น
สวัสดีครับ/ค่ะ นี่เป็นครั้งแรกที่เราโพสต์ที่นี่ เราอยากได้รับฟีดแบ็กจากชุมชน เชิญเข้าร่วมช่อง Slack ได้ตามสบาย
https://join.slack.com/t/odigos/…
ขอบคุณครับ/ค่ะ!