AWS Distro for OpenTelemetry का उपयोग करके ECS क्लस्टर में सिस्टम मेट्रिक्स एकत्र करना
AWS Distro for OpenTelemetry (ADOT) OpenTelemetry प्रोजेक्ट का एक सुरक्षित, AWS-समर्थित वितरण है। ADOT का उपयोग करके, आप कई स्रोतों से टेलीमेट्री डेटा एकत्र कर सकते हैं और सहसंबद्ध मेट्रिक्स, ट्रेस और लॉग्स को कई मॉनिटरिंग समाधानों को भेज सकते हैं। ADOT को Amazon ECS क्लस्टर पर दो अल ग-अलग पैटर्न में तैनात किया जा सकता है।
ADOT Collector के लिए डिप्लॉयमेंट पैटर्न
-
साइडकार पैटर्न में, ADOT collector क्लस्टर में प्रत्येक टास्क के अंदर चलता है और केवल उस टास्क के भीतर एप्लिकेशन कंटेनरों से एकत्रित टेलीमेट्री डेटा को प्रोसेस करता है। यह डिप्लॉयमेंट पैटर्न केवल तब आवश्यक है जब आपको collector को Amazon ECS Task Metadata Endpoint से टास्क मेटाडेटा पढ़ने और उनसे रिसोर्स उपयोग मेट्रिक्स (जैसे CPU, मेमोरी, नेटवर्क और डिस्क) जनरेट करने की आवश्यकता होती है।

-
सेंट्रल collector प ैटर्न में, ADOT collector का एक एक इंस्टेंस क्लस्टर पर तैनात किया जाता है और यह क्लस्टर पर चल रहे सभी टास्क से टेलीमेट्री डेटा को प्रोसेस करता है। यह सबसे अधिक उपयोग किया जाने वाला डिप्लॉयमेंट पैटर्न है। Collector को REPLICA या DAEMON सर्विस शेड्यूलर स्ट्रैटेजी का उपयोग करके तैनात किया जाता है।

ADOT collector आर्किटेक्चर में पाइपलाइन की अवधारणा है। एक एक collector में एक से अधिक पाइपलाइन हो सकती हैं। प्रत्येक पाइपलाइन तीन प्रकार के टेलीमेट्री डेटा में से एक को प्रोसेस करने के लिए समर्पित है, अर्थात् मेट्रिक्स, ट्रेस और लॉग्स। आप प्रत्येक प्रकार के टेलीमेट्री डेटा के लिए कई पाइपलाइन कॉन्फ़िगर कर सकते हैं। यह बहुमुखी आर्किटेक्चर एक एक collector को कई ऑब्ज़र्वेबिलिटी एजेंट्स की भूमिका निभाने की अनुमति देता है जिन्हें अन्यथा क्लस्टर पर तैनात करना पड़ता। यह क्लस्टर पर ऑब्ज़र्वेबिलिटी एजेंट्स के डिप्लॉयमेंट फुटप्रिंट को काफी कम करता है। एक collector के प्राथमिक कंपोनेंट जो एक पाइपलाइन बनाते हैं, उन्हें तीन श्रेणियों में समूहीकृत किया गया है, अर्थात् Receiver, Processor, और Exporter। Extensions नामक द्वितीयक कंपोनेंट हैं जो collector में जोड़ी जा सकने वाली क्षमताएं प्रदान करते हैं, लेकिन जो पाइपलाइन का हिस्सा नहीं हैं।
Receivers, Processors, Exporters और Extensions की विस्तृत व्याख्या के लिए OpenTelemetry डॉक्यूमेंटेशन देखें।
ECS टास्क मेट्रिक्स संग्रह के लिए ADOT Collector की तैनाती
ECS टास्क स्तर पर रिसोर्स उपयोग मेट्रिक्स एकत्र करने के लिए, ADOT collector को नीचे दिखाई गई टास्क डेफिनिशन का उपयोग करके साइडकार पैटर्न में तैनात किया जाना चाहिए। Collector के लिए उपयोग की जाने वाली कंटेनर इमेज कई पाइपलाइन कॉन्फ़िगरेशन के साथ बंडल है। आप अपनी आवश्यकताओं के आधार पर उनमें से एक चुन सकते हैं और कंटेनर डेफिनिशन के command सेक्शन में कॉन्फ़िगरेशन फ़ाइल पथ निर्दिष्ट कर सकते हैं। इस मान को --config=/etc/ecs/container-insights/otel-task-metrics-config.yaml पर सेट करने से एक पाइपलाइन कॉन्फ़िगरेशन का उपयोग होगा जो collector के समान टास्क में चल रहे अन्य कंटेनरों से रिसोर्स उपयोग मेट्रिक्स और ट्रेस एकत्र करता है और उन्हें Amazon CloudWatch और AWS X-Ray को भेजता है। विशेष रूप से, collector एक AWS ECS Container Metrics Receiver का उपयोग करता है जो Amazon ECS Task Metadata Endpoint से टास्क मेटाडेटा और docker stats पढ़ता है, और उनसे रिसोर्स उपयोग मेट्रिक्स (जैसे CPU, मेमोरी, नेटवर ्क और डिस्क) जनरेट करता है।
{
"family":"AdotTask",
"taskRoleArn":"arn:aws:iam::123456789012:role/ECS-ADOT-Task-Role",
"executionRoleArn":"arn:aws:iam::123456789012:role/ECS-Task-Execution-Role",
"networkMode":"awsvpc",
"containerDefinitions":[
{
"name":"application-container",
"image":"..."
},
{
"name":"aws-otel-collector",
"image":"public.ecr.aws/aws-observability/aws-otel-collector:latest",
"cpu":512,
"memory":1024,
"command": [
"--config=/etc/ecs/container-insights/otel-task-metrics-config.yaml"
],
"portMappings":[
{
"containerPort":2000,
"protocol":"udp"
}
],
"essential":true
}
],
"requiresCompatibilities":[
"EC2"
],
"cpu":"1024",
"memory":"2048"
}
Amazon ECS क्लस्टर पर तैनात किए जाने पर ADOT collector द्वारा उपयोग किए जाने वाले IAM टास्क रोल और टास्क एक्जीक्यूशन रोल को सेट करने के विवरण के लिए डॉक्यूमेंटेशन देखें।
AWS ECS Container Metrics Receiver केवल ECS Task Metadata Endpoint V4 के लिए काम करता है। प्लेटफ़ॉर्म वर्शन 1.4.0 या बाद का उपयोग करने वाले Fargate पर Amazon ECS टास्क और Amazon ECS container agent के कम से कम वर्शन 1.39.0 चलाने वाले Amazon EC2 पर Amazon ECS टास्क इस receiver का उपयोग कर सकते हैं। अधिक जानकारी के लिए, Amazon ECS Container Agent Versions देखें।
जैसा कि डिफ़ॉल्ट पाइपलाइन कॉन्फ़िगरेशन में दिखाया गया है, collector की पाइपलाइन पहले Filter Processor का उपयोग करती है जो CPU, मेमोरी, नेटवर्क और डिस्क उपयोग से संबंधित मेट्रिक्स के एक सबसेट को फ़िल्टर करती है। फिर यह Metrics Transform Processor का उपयोग करती है जो इन मेट्रिक्स के नाम बदलने और उनके एट्रिब्यूट्स अपडेट करने के लिए ट्रांसफॉर्मेशन का एक सेट करती है। अंत में, मेट्रिक्स को Amazon CloudWatch EMF Exporter का उपयोग करके CloudWatch में परफॉर्मेंस लॉग इवेंट्स के रूप में भेजा जाता है। इस डिफ़ॉल्ट कॉन्फ़िगरेशन का उपयोग करने से CloudWatch namespace ECS/ContainerInsights के तहत निम्नलिखित रिसोर्स उपयोग मेट्रिक्स का संग्रह होगा।
- MemoryUtilized
- MemoryReserved
- CpuUtilized
- CpuReserved
- NetworkRxBytes
- NetworkTxBytes
- StorageReadBytes
- StorageWriteBytes
ध्यान दें कि ये वही मेट्रिक्स हैं जो Container Insights for Amazon ECS द्वारा एकत्र की जाती हैं और जब आप क्लस्टर या अकाउंट स्तर पर Container Insights सक्षम करते हैं तो CloudWatch में आसानी से उपलब्ध हो जाती हैं। इसलिए, CloudWatch में ECS रिसोर्स उपयोग मेट्रिक्स एकत्र करने के लिए Container Insights को सक्षम करना अनुशंसित दृष्टिकोण है।
AWS ECS Container Metrics Receiver 52 अ द्वितीय मेट्रिक्स उत्सर्जित करता है जो यह Amazon ECS Task Metadata Endpoint से पढ़ता है। Receiver द्वारा एकत्रित मेट्रिक्स की पूरी सूची यहाँ प्रलेखित है। आप उन सभी को अपने पसंदीदा गंतव्य पर नहीं भेजना चाह सकते हैं। यदि आप ECS रिसोर्स उपयोग मेट्रिक्स पर अधिक स्पष्ट नियंत्रण चाहते हैं, तो आप एक कस्टम पाइपलाइन कॉन्फ़िगरेशन बना सकते हैं, अपनी पसंद के processors/transformers के साथ उपलब्ध मेट्रिक्स को फ़िल्टर और ट्रांसफॉर्म कर सकते हैं और अपनी पसंद के exporters के आधार पर गंतव्य पर भेज सकते हैं। ECS टास्क स्तर मेट्रिक्स कैप्चर करने के लिए पाइपलाइन कॉन्फ़िगरेशन के अतिरिक्त उदाहरणों के लिए डॉक्यूमेंटेशन देखें।
यदि आप एक कस्टम पाइपलाइन कॉन्फ़िगरेशन का उपयोग करना चाहते हैं, तो आप नीचे दिखाई गई टास्क डेफिनिशन का उपयोग कर सकते हैं और collector को साइडकार पैटर्न में तैनात कर सकते हैं। यहाँ, collector पाइपलाइन का कॉन्फ़िगरेशन AWS SSM Parameter Store में otel-collector-config नामक पैरामीटर से लोड किया जाता है।
SSM Parameter Store पैरामीटर नाम को AOT_CONFIG_CONTENT नामक एनवायरनमेंट वेरिएबल का उपयोग करके collector को एक्सपोज़ किया जाना चाहिए।
{
"family":"AdotTask",
"taskRoleArn":"arn:aws:iam::123456789012:role/ECS-ADOT-Task-Role",
"executionRoleArn":"arn:aws:iam::123456789012:role/ECS-Task-Execution-Role",
"networkMode":"awsvpc",
"containerDefinitions":[
{
"name":"application-container",
"image":"..."
},
{
"name":"aws-otel-collector",
"image":"public.ecr.aws/aws-observability/aws-otel-collector:latest",
"cpu":512,
"memory":1024,
"secrets":[
{
"name":"AOT_CONFIG_CONTENT",
"valueFrom":"arn:aws:ssm:us-east-1:123456789012:parameter/otel-collector-config"
}
],
"portMappings":[
{
"containerPort":2000,
"protocol":"udp"
}
],
"essential":true
}
],
"requiresCompatibilities":[
"EC2"
],
"cpu":"1024",
"memory":"2048"
}