Odigos (YC W23) – Kubernetes क्लस्टर के लिए तुरंत distributed tracing
(github.com/keyval-dev)नमस्ते। हम Odigos(https://github.com/keyval-dev/odigos) के सह-संस्थापक Eden और Ari हैं। Odigos एक open source प्रोजेक्ट है जो applications के लिए distributed trace तुरंत बनाता है ताकि users उन्हें आसानी से उपयोग कर सकें। Odigos मौजूदा monitoring tools के साथ compatible है, और source code में किसी बदलाव की भी ज़रूरत नहीं होती।
पुराने monitoring tools के साथ हमारा अनुभव काफी निराशाजनक था। कई microservices वाले distributed systems को monitor करते समय हमने पाया कि समस्या की जड़ बनने वाली microservice को पहचानने में हम बहुत अधिक समय खर्च कर रहे थे। उदाहरण के लिए, कभी हमने यह संदेह करते हुए कि कोई विशेष application latency पैदा कर रहा है, debugging में कई घंटे लगाए, लेकिन बाद में पता चला कि समस्या का कारण कोई दूसरी संबंधित application थी।
इसके बाद हमने इस समस्या के समाधान के लिए उपयुक्त distributed tracing पर शोध किया। किसी single application में किसी खास समय के data को capture करने वाले metrics या logs के विपरीत, distributed tracing हर request को एक unique ID के साथ tag करता है ताकि distributed environment में फैलने वाली requests को trace किया जा सके। इससे developers हर request का context और distributed applications कैसे काम कर रही हैं, यह समझ सकते हैं।
हालाँकि, इस तरीके की कमी यह है कि इसे implement करना कठिन है। किसी single application के metrics या logs के विपरीत, distributed tracing को कई applications में implement करना पड़ता है। यदि applications में से एक भी distributed trace नहीं बनाती, तो context propagation रुक जाता है और उस trace की उपयोगिता बहुत कम हो जाती है।
कई कंपनियों के लिए distributed tracing को खुद implement करने के हमारे अनुभव के अनुसार, complete distributed tracing हासिल करने के लिए सभी development teams को हर application को instrument करने के लिए coordinate करना बेहद कठिन काम है। Implementation पूरा होने पर production issues को बहुत तेज़ी से हल किया जा सकता था, इसलिए इसकी value बहुत अधिक थी। लेकिन partial implementation उतनी उपयोगी नहीं थी।
हमने इस process को automate करना शुरू किया। Process के अधिकांश हिस्से को कैसे संभालना है, यह हमें पता था, लेकिन सबसे कठिन हिस्सा compiled languages (जैसे Go) में लिखे गए programs को automatically instrument करना था। हमने सोचा कि यदि केवल उसी हिस्से को automate किया जा सके, तो distributed trace बनाने की पूरी process को automate किया जा सकता है। शोध के दौरान हमें पता चला कि eBPF (एक तकनीक जो Linux kernel को external programs लोड करके kernel के भीतर चलाने देती है) का उपयोग करके compiled languages के लिए automatic instrumentation संभव है। वही इस पहेली का आखिरी टुकड़ा था, और उसी से हम Odigos बना सके।
Odigos पहले चल रही सभी applications को scan करता है और eBPF तथा OpenTelemetry का उपयोग करके हर application की programming language पहचानकर उसी के अनुसार automatic instrumentation करता है। यह data को buffer, filter और चुने गए monitoring tool तक भेजने वाले collectors भी deploy करता है, और traffic की मात्रा के अनुसार auto scale भी करता है। इस automation की मदद से developers manual काम में लगने वाले महीनों के बजाय कुछ ही मिनटों में distributed tracing का उपयोग कर सकते हैं।
अलग-अलग programming languages के बीच automatic instrumentation करना, खासकर static binaries (जैसे Go compiler द्वारा बनाई गई binaries) को ध्यान में रखते हुए, आसान काम नहीं है। हमने कई mechanisms पेश किए ताकि संबंधित headers को सुरक्षित और स्थिर तरीके से inject किया जा सके, और open source libraries के अलग-अलग versions की functions तथा structs को track करने वाला system विकसित किया। हमने eBPF में userspace memory management करने वाला system भी विकसित किया। इसके परिणामस्वरूप, Odigos Go और Rust जैसी compiled languages के लिए distributed trace को automatically generate करने वाला एकमात्र solution बन गया। जहाँ दूसरे solutions में users को OpenTelemetry या eBPF का expert बनना पड़ता है, वहीं हमारे solution के लिए observability technology का कोई पूर्व ज्ञान आवश्यक नहीं है।
हमारा solution एक single command के साथ Kubernetes क्लस्टर में install किया जा सकता है। Install होने के बाद यह चल रही सभी applications की programming language detect करता है और उपयुक्त instrumentor लागू करता है। JIT languages (Java और .NET) या interpreted languages (JavaScript और Python) के लिए यह OpenTelemetry instrumentors deploy करता है। Compiled languages (Go, Rust, C) के लिए यह eBPF-आधारित instrumentors deploy करता है। यह सब users के लिए abstracted है, इसलिए users को बस (1) target applications में से कुछ या सभी को चुनना होता है, और (2) monitoring data भेजने के लिए backend चुनना होता है।
मई 2022 में हमने eBPF-आधारित Go applications के लिए automatic instrumentor के रूप में अपना पहला open source प्रोजेक्ट रिलीज़ किया। बाद में हमने इस प्रोजेक्ट को OpenTelemetry community को donate किया, और अब इसका विकास Go Automatic Instrumentation SIG के हिस्से के रूप में हो रहा है।
हम open standards में दृढ़ विश्वास रखते हैं, इसलिए Odigos में उपयोग किए जाने वाले instrumentation और collectors दोनों OpenTelemetry community द्वारा विकसित open source projects पर आधारित हैं। इससे हम किसी विशेष vendor पर निर्भर नहीं रहते।
फिलहाल हम open source प्रोजेक्ट बनाने पर ध्यान केंद्रित कर रहे हैं। अभी कोई pricing या paid features नहीं हैं, लेकिन भविष्य में हम enterprise features सहित Odigos का managed version भी देने की योजना रखते हैं।
अधिक जानकारी नीचे उपलब्ध है।
- दस्तावेज़: https://docs.odigos.io
- वीडियो (डेमो): https://www.youtube.com/watch?v=9d36AmVtuGU
- होमपेज: https://odigos.io
हम distributed application tracing और monitoring के बारे में आपके अनुभव और अलग-अलग कहानियाँ सुनना और साझा करना चाहते हैं!
1 टिप्पणियां
नमस्ते, यहाँ पोस्ट करना मेरा पहली बार है। हम कम्युनिटी से फ़ीडबैक पाना चाहते हैं। कृपया बेझिझक Slack चैनल में शामिल हों।
https://join.slack.com/t/odigos/…
धन्यवाद!