Odigos (YC W23) – Pelacakan terdistribusi instan untuk klaster Kubernetes
(github.com/keyval-dev)Halo. Kami Eden dan Ari, co-founder Odigos(https://github.com/keyval-dev/odigos). Odigos adalah proyek open source yang membantu pengguna memanfaatkan distributed trace untuk aplikasi secara instan dan mudah. Odigos kompatibel dengan alat pemantauan yang sudah ada, dan tidak memerlukan perubahan pada source code.
Pengalaman kami dengan alat pemantauan sebelumnya sangat mengecewakan. Saat memantau sistem terdistribusi yang terdiri dari banyak microservice, kami menyadari bahwa kami menghabiskan terlalu banyak waktu untuk mengidentifikasi microservice yang menjadi akar masalah. Sebagai contoh, kami pernah menghabiskan berjam-jam mencurigai dan men-debug aplikasi tertentu sebagai penyebab latency, lalu baru belakangan menyadari bahwa akar masalahnya sebenarnya ada pada aplikasi terkait yang lain.
Setelah itu, kami meneliti distributed tracing sebagai pendekatan yang cocok untuk menyelesaikan masalah ini. Berbeda dengan metric atau log yang menangkap data pada titik waktu tertentu dalam satu aplikasi, distributed tracing memberi tag pada setiap request dengan ID unik sehingga request yang menyebar di lingkungan terdistribusi dapat dilacak. Dengan ini, developer dapat memahami context dari tiap request dan cara kerja aplikasi-aplikasi terdistribusi.
Namun, pendekatan ini memiliki kelemahan karena sulit diimplementasikan. Berbeda dari metric atau log untuk satu aplikasi, distributed tracing harus diimplementasikan lintas banyak aplikasi. Jika ada satu saja aplikasi yang tidak menghasilkan distributed trace, propagasi context akan terputus dan nilai dari trace tersebut akan turun drastis.
Berdasarkan pengalaman kami mengimplementasikan distributed tracing secara manual untuk berbagai perusahaan, sangat sulit mengoordinasikan semua tim developer agar melakukan instrumentasi pada tiap aplikasi demi mencapai distributed tracing yang utuh. Setelah implementasinya selesai, nilainya sangat tinggi karena masalah produksi bisa diselesaikan jauh lebih cepat. Tetapi, implementasi parsial tidak begitu bernilai.
Kami lalu mulai mengotomatiskan proses ini. Kami sudah tahu cara menangani sebagian besar prosesnya, tetapi bagian yang paling sulit adalah bagaimana melakukan instrumentasi otomatis pada program yang ditulis dalam bahasa terkompilasi (seperti Go). Kami berpikir bahwa jika bagian itu bisa diotomatisasi, maka seluruh proses pembuatan distributed trace pun bisa diotomatisasi. Dalam proses riset, kami menyadari bahwa dengan menggunakan eBPF (teknologi yang memungkinkan kernel Linux memuat program eksternal dan menjalankannya di dalam kernel), instrumentasi otomatis untuk bahasa terkompilasi menjadi mungkin. Itu adalah kepingan terakhir dari teka-teki, dan dari situlah kami dapat membangun Odigos.
Odigos pertama-tama memindai semua aplikasi yang sedang berjalan, lalu menggunakan eBPF dan OpenTelemetry untuk mengenali bahasa pemrograman tiap aplikasi dan melakukan instrumentasi otomatis yang sesuai. Odigos juga men-deploy collector yang melakukan buffering, filtering, dan meneruskan data ke alat pemantauan pilihan Anda, serta melakukan auto scale sesuai volume traffic. Berkat otomatisasi ini, developer dapat memanfaatkan distributed tracing hanya dalam hitungan menit, berbeda dengan pekerjaan manual yang bisa memakan waktu berbulan-bulan.
Instrumentasi otomatis lintas berbagai bahasa pemrograman bukanlah tugas yang sederhana, terutama jika mempertimbangkan binary statis (misalnya binary yang dihasilkan compiler Go). Kami memperkenalkan berbagai mekanisme agar header terkait dapat disisipkan dengan aman dan andal, serta mengembangkan sistem untuk melacak fungsi dan struct dari berbagai versi library open source. Kami juga mengembangkan sistem untuk mengelola memori userspace dari eBPF. Hasilnya, Odigos menjadi satu-satunya solusi yang dapat secara otomatis menghasilkan distributed trace untuk bahasa terkompilasi seperti Go dan Rust. Solusi lain mengharuskan pengguna menjadi ahli OpenTelemetry atau eBPF, sedangkan solusi kami tidak memerlukan pengetahuan awal tentang teknologi observability.
Solusi kami dapat dipasang ke klaster Kubernetes dengan satu perintah. Setelah terpasang, Odigos mendeteksi bahasa pemrograman dari semua aplikasi yang sedang berjalan dan menerapkan instrumentor yang sesuai. Untuk bahasa JIT (Java dan .NET) atau bahasa interpreted (JavaScript dan Python), Odigos men-deploy instrumentor OpenTelemetry. Untuk bahasa terkompilasi (Go, Rust, C), Odigos men-deploy instrumentor berbasis eBPF. Semua ini diabstraksikan dari pengguna, sehingga pengguna hanya perlu (1) memilih sebagian atau seluruh aplikasi target, dan (2) memilih backend tujuan pengiriman data pemantauan.
Pada Mei 2022, kami merilis proyek open source pertama kami: instrumentor otomatis untuk aplikasi Go berbasis eBPF. Setelah itu, kami menyumbangkan proyek ini ke komunitas OpenTelemetry, dan kini proyek tersebut dikembangkan sebagai bagian dari Go Automatic Instrumentation SIG.
Kami sangat percaya pada open standard, sehingga semua instrumentasi dan collector yang digunakan di Odigos berbasis proyek open source yang dikembangkan oleh komunitas OpenTelemetry. Dengan begitu, kami tidak terikat pada vendor tertentu.
Saat ini kami fokus membangun proyek open source. Belum ada harga maupun fitur berbayar yang ditetapkan, tetapi ke depannya kami berencana menyediakan versi managed dari Odigos yang juga mencakup fitur enterprise.
Informasi lebih lanjut dapat dilihat di bawah ini.
- Dokumentasi: https://docs.odigos.io
- Video (demo): https://www.youtube.com/watch?v=9d36AmVtuGU
- Situs web: https://odigos.io
Kami ingin mendengar dan berbagi pengalaman serta berbagai cerita Anda tentang pelacakan dan pemantauan aplikasi terdistribusi!
1 komentar
Halo, ini pertama kalinya kami memposting di sini. Kami ingin mendapatkan masukan dari komunitas. Silakan bergabung dengan channel Slack.
https://join.slack.com/t/odigos/…
Terima kasih!