AWS Distro for OpenTelemetry (ADOT) Collector का संचालन
ADOT collector CNCF द्वारा ओपन-सोर्स OpenTelemetry Collector का एक downstream डिस्ट्रीब्यूशन है।
ग्राहक ADOT Collector का उपयोग विभिन्न एनवायरनमेंट्स से मेट्रिक्स और ट्रेस जैसे सिग्नल एकत्र करने के लिए कर सकते हैं, जिसमें ऑन-प्रेम, AWS और अन्य क्लाउड प्रोवाइडर शामिल हैं।
वास्तविक दुनिया के एनवायरनमेंट में और बड़े पैमाने पर ADOT Collector का संचालन करने के लिए, ऑपरेटरों को collector की स्वास्थ्य स्थिति की निगरानी करनी चाहिए और आवश्यकतानुसार स्केल करना चाहिए। इस गाइड में, आप उन कार्यों के बारे में जानेंगे जो प्रोडक्शन एनवायरनमेंट में ADOT Collector को संचालित करने के लिए किए जा सकते हैं।
डिप्लॉयमेंट आर्किटेक्चर
आपकी आवश्यकताओं के आधार पर, कुछ डिप्लॉयमेंट विकल्प हैं जिन पर आप विचार कर सकते हैं।
- No Collector
- Agent
- Gateway
अतिरिक्त जानकारी के लिए OpenTelemetry डॉक्यूमेंटेशन देखें।
No Collector
यह विकल्प मूल रूप से collector को समीकरण से पूरी तरह हटा देता है। यदि आप नहीं जानते, तो OTEL SDK से सीधे डेस्टिनेशन सर्विसेज को API कॉल करना और सिग्नल भेजना संभव है। इसे ऐसे समझें कि आप ADOT Collector जैसे out-of-process agent को spans भेजने के बजाय अपनी एप्लिकेशन प्रोसेस से सीधे AWS X-Ray के PutTraceSegments API को कॉल कर रहे हैं।
हम आपको इस दृष्टिकोण के बारे में अधिक विवरण के लिए upstream डॉक्यूमेंटेशन में इस सेक्शन को देखने के लिए प्रोत्साहित करते हैं क्योंकि इस दृष्टिकोण के लिए कोई AWS विशिष्ट पहलू नहीं है जो मार्गदर्शन को बदलता हो।

Agent
इस दृष्टिकोण में, आप collector को वितरित तरीके से चलाएंगे और सिग्नल को डेस्टिनेशन में एकत्र करेंगे। No Collector विकल्प के विपरीत, यहां हम चिंताओं को अलग करते हैं और एप्लिकेशन को रिमोट API कॉल करने के लिए अपने संसाधनों का उपयोग करने से अलग करते हैं और इसके बजाय स्थानीय रूप से सुलभ agent से संवाद करते हैं।
अनिवार्य रूप से Amazon EKS एनवायरनमेंट में collector को Kubernetes sidecar के रूप में चलाते हुए यह नीचे जैसा दिखेगा:

इस उपरोक्त आर्किटेक्चर में, आपके scrape कॉन्फ़िगरेशन को वास्तव में किसी भी service discovery मैकेनि ज्म का उपयोग नहीं करना चाहिए क्योंकि आप localhost से टारगेट को scrape करेंगे क्योंकि collector एप्लिकेशन कंटेनर के साथ उसी pod में चल रहा है।
यही आर्किटेक्चर ट्रेस एकत्र करने के लिए भी लागू होता है। आपको बस यहां दिखाए गए अनुसार एक OTEL pipeline बनानी होगी
फायदे और नुकसान
-
इस डिज़ाइन के पक्ष में एक तर्क यह है कि आपको Collector के काम करने के लिए असाधारण मात्रा में संसाधन (CPU, Memory) आवंटित करने की आवश्यकता नहीं है क्योंकि टारगेट localhost स्रोतों तक सीमित हैं।
-
इस दृष्टिकोण का उपयोग करने का नुकसान यह हो सकता है कि, collector pod कॉन्फ़िगरेशन के लिए विभिन्न कॉन्फ़िगरेशन की संख्या सीधे क्लस्टर पर चल रही एप्लिकेशनों की संख्या के अनुपातिक है। इसका मतलब है कि आपको Pod के लिए अपेक्षित वर्कलोड के आधार पर प्रत्येक Pod के लिए व्यक्तिगत रूप से CPU, Memory और अन्य संसाधन आवंटन प्रबंधित करना होगा। इसके साथ सावधान न रहने पर, आप Collector Pod के लिए अधिक या कम संसाधन आवंटित कर सकते हैं जिसके परिणामस्वरूप या तो कम प्रदर्शन होगा या CPU cycles और Memory लॉक हो जाएगी जो अन्यथा Node में अन्य Pods द्वारा उपयोग की जा सकती थी।
आप अपनी आवश्यकताओं के आधार पर Deployments, Daemonset, Statefulset आदि जैसे अन्य मॉडलों में भी collector को deploy कर सकते हैं।
Amazon EKS पर Daemonset के रूप में collector चलाना
आप collector को Daemonset के रूप में चलाने का विकल्प चुन सकते हैं यदि आप EKS Nodes में collectors के लोड (मेट्रिक्स को scrape करना और Amazon Managed Service for Prometheus workspace में भेजना) को समान रूप से वितरित करना चाहते हैं।

सुनिश्चित करें कि आपके पास keep एक्शन है जो collector को केवल अपने ही host/Node से टारगेट scrape करने देता है।
संदर्भ के लिए नीचे नमूना देखें। अधिक ऐसे कॉन्फ़िगरेशन विवरण यहां पाएं।
scrape_configs:
- job_name: kubernetes-apiservers
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
kubernetes_sd_configs:
- role: endpoints
relabel_configs:
- action: keep
regex: $K8S_NODE_NAME
source_labels: [__meta_kubernetes_endpoint_node_name]
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
insecure_skip_verify: true
यही आर्किटेक्चर ट्रेस एकत्र करने के लिए भी उपयोग किया जा सकता है। इस मामले में, Collector द्वारा Prometheus मेट्रिक्स scrape करने के लिए endpoints तक पहुंचने के बजाय, ट्रेस spans एप्लिकेशन pods द्वारा Collector को भेजे जाएंगे।
फायदे और नुकसान
लाभ
- न्यूनतम स्केलिंग चिंताएं
- High-Availability कॉन्फ़िगर करना एक चुनौती है
- Collector की बहुत अधिक प्रतियां उपयोग में
- Logs सपोर्ट के लिए आसान हो सकता है
नुकसान
- संसाधन उपयोग के मामले में सबसे इष्टतम नहीं
- असंतुलित संसाधन आवंटन