कभी-कभी .NET अनुप्रयोग उत्पादन में गिरावट आती है, और कोई भी नहीं जानता कि क्यों, क्योंकि लॉग और मीट्रिक ठीक हैं. यह काफी परेशान है और डिबगिंग को बहुत अप्रिय बनाता है. ऐसे मामलों में, मेमोरी डंप डिबगिंग को सरल कर सकते हैं और दिन से मिनट तक समस्या निवारण समय को कम कर सकते हैं. इस लेख में समझाया गया है कि .NET अनुप्रयोगों के लिए डंप कैसे कॉन्फ़िगर करें और फिर उन्हें सबसे सुविधाजनक और सुरक्षित तरीके से विकास टीम को वितरित करें। AWS ECS Fargate इस लेख में, हम एडब्ल्यूएस संसाधनों का निर्माण करेंगे, और मैं विशिष्ट स्थितियों में एडब्ल्यूएस दस्तावेज पर संदर्भित करूंगा. आईएसी हमारा ध्यान केंद्रित नहीं करेगा. हालांकि, यदि आप टेराफॉर्म को उतना ही पसंद करते हैं जितना मैं करता हूं, तो आप प्रत्येक लेख अनुभाग के लिए ओपन सोर्स एडब्ल्यूएस मॉड्यूल का उपयोग कर सकते हैं. मेरी तरफ से, मैं आपको दो एडब्ल्यूएस टेराफॉर्म मॉड्यूल परियोजनाओं को देखने की सलाह दे सकता हूं: https://github.com/cloudposse https://github.com/terraform-aws-modules इस लेख में, हम एडब्ल्यूएस संसाधनों का निर्माण करेंगे, और मैं विशिष्ट स्थितियों में एडब्ल्यूएस दस्तावेज पर संदर्भित करूंगा. आईएसी हमारा ध्यान केंद्रित नहीं करेगा. हालांकि, यदि आप टेराफॉर्म को उतना ही पसंद करते हैं जितना मैं करता हूं, तो आप प्रत्येक लेख अनुभाग के लिए ओपन सोर्स एडब्ल्यूएस मॉड्यूल का उपयोग कर सकते हैं. मेरी तरफ से, मैं आपको दो एडब्ल्यूएस टेराफॉर्म मॉड्यूल परियोजनाओं को देखने की सलाह दे सकता हूं: https://github.com/cloudposse https://github.com/terraform-aws-modules https://github.com/cloudposse https://github.com/terraform-aws-modules समाधान आर्किटेक्चर यह हमारी वास्तुकला पर एक नज़र डालने का समय है. मैं अनुमान लगाने से शुरू करूंगा कि डेवलपर्स टीम अपनी जटिलता के कारण ईबीएस या ईएफएस जैसे भंडारण से .NET डंप को खींचने पर विचार नहीं कर रही है. S3 डेवलपर्स के लिए किसी भी प्रकार के फ़ाइल प्राप्त करने के लिए बहुत आसान है, और यह हमारी अपेक्षाओं के अनुरूप है। इसके अलावा, जब एक नया .NET डंप उत्पन्न होता है तो सक्रिय सूचना प्राप्त करना काफी मूल्यवान होगा. उदाहरण के लिए, मैं स्लाक का उपयोग करूंगा, लेकिन अन्य विकल्पों में टीमों, मैटर्मोस्ट, व्हाट्सएप, आदि शामिल हैं. सूचना संदेश भेजने के लिए हम Lambda और S3 ट्रिगर का उपयोग करेंगे. और आखिरी, लेकिन कम से कम महत्वपूर्ण नोट. यह एक S3 बक्के को ECS के लिए मूल रूप से जोड़ना काफी जटिल है. इस कारण से हम EFS, DataSync, और sidecar ECS कंटेनर / Lambda फ़ंक्शन पर बनाए गए एक मिडवेयर परत बनाएंगे. EFS हमारे सभी ECS कार्यों के लिए एक मध्यवर्ती फ़ाइल स्टोरेज के रूप में उपयोग किया जाएगा, Datasync स्वचालित रूप से EFS से S3 में डेटा स्थानांतरित करेगा, और एक sidecar कंटेनर या Lambda EFS से पुराने डेटा को साफ करेगा. चलो जल्दी से डायग्राम की समीक्षा करते हैं: AWS Lambda deletes old EFS files by the schedule configured in EventBridge. Alternatively, during ECS Task bootstrap phase, sidecar container removes outdated dumps from EFS and quits. janitor During .NET application crash, a new dump is created at EFS filesystem, and only after that the process is terminated. DataSync moves data to S3 after a new file is uploaded to EFS. When an S3 hook detects a newly uploaded file, AWS Lambda is triggered. AWS Lambda uses IAM to obtain the necessary secrets from AWS Secret Manager. AWS Lambda sends a message to Slack via API. कदम-दर-चरण कार्यान्वयन ECS Fargate कार्य बनाने के लिए इस अनुभाग में हमें एक नमूना .NET अनुप्रयोग का उपयोग करके एक ECS Fargate कार्य बनाने की आवश्यकता है। पूर्वानुमान आगे बढ़ने से पहले, कुछ कदम हैं जिन्हें पूरा करने की आवश्यकता है: Setup ECS cluster via AWS Console, or Terraform. An official AWS guide: Creating an Amazon ECS cluster for Fargate workloads Create an IAM execution role for ECS task. To do it, you can follow . In the scope of this article I will use name for IAM execution role. this AWS guide kvendingoldo-dotnet-crash-dump-demo Fargate कार्य भार के लिए एक Amazon ECS क्लस्टर बनाना AWS मार्गदर्शिका इस न्यूनतम निष्पादन भूमिका के लिए पर्याप्त होगा: Trust policy { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } साथ ही न्यूनतम : permissions policy { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] } काम की परिभाषा बनाएं एक बार जब सभी पूर्वावलोकन तैयार हैं, तो एक नमूना .NET ऐप के साथ एक न्यूनतम Fargate कार्य बनाने का समय है। , और इस कार्य परिभाषा json फ़ाइल का उपयोग करें: AWS आधिकारिक गाइड AWS आधिकारिक गाइड { "containerDefinitions": [ { "cpu": 0, "essential": true, "image": "mcr.microsoft.com/dotnet/samples:aspnetapp", "mountPoints": [], "name": "app", "portMappings": [ { "containerPort": 8000, "hostPort": 8000, "protocol": "tcp" } ], "systemControls": [], "volumesFrom": [] } ], "cpu": "256", "executionRoleArn": "kvendingoldo-dotnet-crash-dump-demo", "family": "kvendingoldo-dotnet-crash-dump-demo", "memory": "512", "networkMode": "awsvpc", "placementConstraints": [], "requiresCompatibilities": ["FARGATE"], "volumes": [], "tags": [] } .NET Dump का उपयोग करें डिफ़ॉल्ट रूप से, .NET एप्लिकेशन कोई डंप नहीं उत्पन्न करते हैं. इसे कॉन्फ़िगर करने के लिए, हमें निम्नलिखित पर्यावरण परिवर्तकों को सेट करना होगा: # Forces the runtime to generate a stack dump on unhandled exceptions. COMPlus_StackDumpOnUnhandledException=1 # Enable mini dump generation on crash COMPlus_DbgEnableMiniDump=1 # Choose dump type: # 1 = Mini, # 2 = Full (use carefully) # 4 = Triage (includes stack, threads, and some heap info — a good balance for debugging). COMPlus_DbgMiniDumpType=2 # Target path for dump file (EFS is mounted here) COMPlus_DbgMiniDumpName=/dumps/dump-%e-%p-%t.dmp इन परिवर्तकों को सीधे Dockerfile में जोड़ा जा सकता है या ECS कार्य परिभाषा json में पर्यावरण परिवर्तकों के रूप में परिभाषित किया जा सकता है। हमारे उदाहरण में, आइए उन्हें ईसीएस कार्य विनिर्देश में इंजेक्ट करते हैं। जैसा कि नीचे दिखाया गया है: containerDefinitions[0].environment "environment": [ { "name": "COMPlus_StackDumpOnUnhandledException", "value": "1" }, { "name": "COMPlus_DbgMiniDumpType", "value": "4" }, { "name": "COMPlus_DbgEnableMiniDump", "value": "1" }, { "name": "COMPlus_DbgMiniDumpName", "value": "/dumps/%t-kvendingoldo-dotnet-demo-crash.dmp" } ] जैसा कि आप देख सकते हैं, मैं COMPlus_DbgMiniDumpName में कुछ स्थानholders का उपयोग करता हूं. Dotnet स्वचालित रूप से डंप फ़ाइल नाम में निम्न स्थानholders का विस्तार करता है: %e - संचालित नाम %p - प्रक्रिया आईडी %t - टाइमस्टैम्प निम्नलिखित दो लिंक देखें.NET क्रैश डंप के संग्रह और विश्लेषण के बारे में अधिक जानकारी के लिए: Collect .NET Crash Dumps (माइक्रोसॉफ्ट सीखें) dotnet डंप के साथ .NET कोर मेमोरी मुद्दों की डिबगिंग (लिंक्स पर) जैसा कि आप देख सकते हैं, मैं COMPlus_DbgMiniDumpName में कुछ स्थानholders का उपयोग करता हूं. Dotnet स्वचालित रूप से डंप फ़ाइल नाम में निम्न स्थानholders का विस्तार करता है: %e - संचालित नाम %p - प्रक्रिया आईडी %t - टाइमस्टैम्प निम्नलिखित दो लिंक देखें.NET क्रैश डंप के संग्रह और विश्लेषण के बारे में अधिक जानकारी के लिए: Collect .NET Crash Dumps (माइक्रोसॉफ्ट सीखें) dotnet डंप के साथ .NET कोर मेमोरी मुद्दों की डिबगिंग (लिंक्स पर) Collect .NET Crash Dumps (माइक्रोसॉफ्ट सीखें) dotnet डंप के साथ .NET कोर मेमोरी मुद्दों की डिबगिंग (लिंक्स पर) EFS स्टोरेज बनाएं और इसे ECS Fargate Task पर रखें जैसा कि मैंने इस लेख की शुरुआत में उल्लेख किया है, एक ECS नौकरी के लिए एक S3 बक्से को जोड़ना काफी मुश्किल है; इसके बजाय, हम उपयोग करेंगे .NET डंप फ़ाइलें के लिए मध्यवर्ती भंडारण के रूप में, जिन्हें आसानी से ईसीएस कार्यों के एक सेट पर मिलाया जा सकता है। Amazon EFS (Elastic File System) EFS स्टोरेज बनाने के लिए, आधिकारिक AWS गाइड का पालन करें: Amazon ECS ट्यूटोरियल: Amazon EFS फ़ाइल सिस्टम का उपयोग करना EFS स्टोरेज बनाने के लिए, आधिकारिक AWS गाइड का पालन करें: Amazon ECS Tutorial: Using Amazon EFS File Systems Amazon ECS ट्यूटोरियल: Amazon EFS फ़ाइल सिस्टम का उपयोग करना आधिकारिक दस्तावेज़ में जोड़ने के लिए कुछ खास नहीं है. बस यह सुनिश्चित करें कि: EFS और ECS क्लस्टर एक ही VPC में हैं EFS को NFS (पॉर्ट 2049/tcp) के माध्यम से ECS कार्यों द्वारा एक्सेस किया जा सकता है। EFS फ़ाइल सिस्टम को ECS कार्य में स्थापित करने के लिए, हमें आवश्यक अनुमतिएं प्रदान करना चाहिए IAM भूमिका (स्थिति धारकों पर ध्यान दें): kvendingoldo-dotnet-crash-dump-demo { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEFSAccess", "Effect": "Allow", "Action": [ "elasticfilesystem:ClientMount", "elasticfilesystem:ClientWrite", "elasticfilesystem:ClientRootAccess" ], "Resource": "arn:aws:elasticfilesystem:<region>:<account-id>:file-system/<filesystem-id>" } ] } अंतिम चरण के रूप में, EFS वॉल्यूम को परिभाषित करें और अपने ECS कार्य परिभाषा (change fileSystemId) में माउंट पॉइंट करें bootstrapping के बाद अपने असली फ़ाइल सिस्टम आईडी के साथ): fs-xxxxxx "volumes": [ { "name": "dotnet-dumps", "efsVolumeConfiguration": { "fileSystemId": "fs-xxxxxx", "rootDirectory": "/" } } ] "mountPoints": [ { "containerPath": "/dumps", "readOnly": false, "sourceVolume": "dotnet-dumps" } ] AWS DataSync को EFS फ़ाइलों को S3 में स्थानांतरित करने के लिए कॉन्फ़िगर करें DataSync सेवा विभिन्न प्रकार के भंडारण के बीच डेटा स्थानांतरित करने के लिए एक AWS मानक उपकरण है. हमारे मामले में, यह हमें EFS से S3 के लिए move.NET डंप करने में मदद करेगा. अपने लक्ष्य को प्राप्त करने के लिए, हमें करना होगा: Create an S3 bucket to store our.NET dumps. Further in this article I’ll use S3 bucket name kvendingoldo-dotnet-demo-crash Use to create a bucket. this official doc Create DataSync Use to create DataSync. this official doc Some service parameters I'll be using: Source: EFS Destination: S3 bucket (e.g., ) s3://kvendingoldo-dotnet-demo-crash/ Include path filters like /dumps/* Schedule sync every minute इस आधिकारिक डॉ। इस आधिकारिक डॉ। AWS Lambda पर आधारित स्लैक अलार्म बनाएं जैसा कि पहले कहा गया था, new.NET डंप के बारे में चेतावनी विकास टीम के लिए बेहद उपयोगी हैं। वास्तुकला के दृष्टिकोण से, अलार्म को विभिन्न तरीकों से बनाया जा सकता है: एक सरल लैम्डा फ़ंक्शन जो एपीआई के माध्यम से स्लाक को संदेश भेजता है और S3 घटनाओं द्वारा उत्पन्न होता है। संदेशों को SNS विषय पर कॉन्फ़िगर किए गए S3 घटना सूचनाओं का उपयोग करके प्रकाशित किया जाता है, जो फिर घटनाओं को Slack को भेजने के लिए एक Lambda फ़ंक्शन को सक्रिय करते हैं। चूंकि हम उच्च भार की उम्मीद नहीं करते हैं, तो पहले विकल्प हमारे लिए बेहतर है. इस मामले में, यदि आप दूसरे विकल्प को लागू करना चाहते हैं, तो इन दो लिंक का उपयोग करें: SNS और Lambda स्टैक को तैनात करने के लिए Terraform मॉड्यूल S3 घटनाओं को SNS में कॉन्फ़िगर करने के लिए एक गाइड SNS और Lambda स्टैक को तैनात करने के लिए Terraform मॉड्यूल S3 घटनाओं को SNS में कॉन्फ़िगर करने के लिए एक गाइड इस लेख में हम केवल S3 फ़ाइल के लिए एक लिंक भेज देंगे, लेकिन कुछ मामलों में यह पूरे फ़ाइल को भेजने के लिए आवश्यक है. Slack API कुछ समय पहले बदल गया है, और फ़ाइल भेजना थोड़ा जटिल हो सकता है. यदि आप अधिक जानना चाहते हैं, तो कृपया "Python के साथ Slack करने के लिए फ़ाइलों को अपलोड करना" लेख देखें. इस लेख में हम केवल S3 फ़ाइल के लिए एक लिंक भेजेंगे, लेकिन कुछ मामलों में यह पूरे फ़ाइल को भेजने के लिए आवश्यक है. Slack API कुछ समय पहले बदल गया है, और फ़ाइल भेजना थोड़ा जटिल हो सकता है. यदि आप अधिक जानना चाहते हैं, तो कृपया " » लेख। Python के साथ Slack पर फ़ाइलों को अपलोड करना Python के साथ Slack पर फ़ाइलों को अपलोड करना ठीक है, चलो कदम से कदम से चेतावनी का निर्माण करते हैं: 1. Create Slack secret AWS Secret Manager Secret का उपयोग करें एक क्षेत्र के साथ: इस कुंजी में आपके Slack वेबहॉक के लिए एक लिंक होना चाहिए (Slack वेबहॉक चेक के बारे में अधिक जानने के लिए) ) kvendingoldo-dotnet-crash-dump-demo slack_webhook_url आधिकारिक गाइड आधिकारिक गाइड 2. Configure AWS Lambda हम AWS Lambda के निर्माण के बारे में गहराई से नहीं जाएंगे, लेकिन हम कुछ प्रमुख बिंदुओं को उजागर करेंगे. AWS Lambda सेटिंग के बारे में अधिक मौलिक जानकारी के लिए, देखें . आधिकारिक गाइड आधिकारिक गाइड 2.1. सुनिश्चित करें कि Lambda IAM भूमिका S3 से पढ़ने की अनुमति है: { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::kvendingoldo-dotnet-demo-crash/*" } 2.2: AWS Secret प्रबंधक से डेटा प्राप्त करने के लिए, हमें AWS Lambda कॉन्फ़िगरेशन में पर्यावरण परिवर्तक निर्दिष्ट करना होगा: SECRET_NAME=kvendingoldo-dotnet-demo-crash 2.3: Lambda में Python कोड अपलोड करें import json import urllib3 import os import boto3 def get_secret(secret_name): client = boto3.client("secretsmanager") try: response = client.get_secret_value(SecretId=secret_name) if "SecretString" in response: secret = response["SecretString"] try: return json.loads(secret) except json.JSONDecodeError: return secret else: return response["SecretBinary"] except Exception as e: print(f"Error retrieving secret: {e}") return None def lambda_handler(event, context): print("Event received:", json.dumps(event)) secret_name = os.environ.get('SECRET_NAME', '') if secret_name == "": return { 'statusCode': 500, 'body': json.dumps("SECRET_NAME env variable is empty") } secret = get_secret(secret_name) slack_webhook_url = secret["slack_webhook_url"] for record in event['Records']: bucket_name = record['s3']['bucket']['name'] file_name = record['s3']['object']['key'] region = record['awsRegion'] if ".aws" in file_name: print(f"Skipping internal file: {file_name}") continue message = ( f":package: *New .NET dump is uploaded!*\n\n" f":cloud: Bucket: `{bucket_name}`\n" f":floppy_disk: File: `{file_name}`\n" f":link: Link: https://{bucket_name}.s3.{region}.amazonaws.com/{file_name}" ) http = urllib3.PoolManager() slack_resp = http.request( "POST", slack_webhook_url, body=json.dumps({ "text": message }), headers={ "Content-Type": "application/json" } ) if slack_resp.status != 200: raise Exception( f"Slack webhook request failed with status {slack_resp.status}: {slack_resp.data.decode('utf-8')}") return { "statusCode": 200, "body": json.dumps("Message has been sent successfully!") } 2.4: अपने S3 बैकपैक के लिए S3 इवेंट नोटिस सेट करें. ऐसा करने के लिए, ऐप पर जाएं चुनें » ". निम्नलिखित विकल्पों का उपयोग करके घटना को कॉन्फ़िगर करें: बैकपैक -> संपत्ति -> घटना सूचनाएं Event Notification बनाएं घटना का नाम: kvendingoldo-dotnet-demo-crash पदों की सूची: DUMPS घटना प्रकार: s3:ObjectCreated:* लक्ष्य: <अपने Lambda फ़ंक्शन का नाम> EFS स्टोरेज सफाई सेट करें बिल्कुल सही, .NET डंप डिलीवरी श्रृंखला तैयार है, लेकिन पुरानी डंप के बारे में क्या है? EFS हमें जीवन चक्र नीतियों का उपयोग करके पुराने फ़ाइलों को हटाने की अनुमति नहीं देता है; हम उन्हें केवल अक्सर एक्सेस भंडारण प्रकार में स्थानांतरित कर सकते हैं जो पर्याप्त नहीं है यदि हम अनावश्यक स्थान के लिए भुगतान नहीं करना चाहते हैं। इस समस्या को हल करने के लिए, दो विकल्प हैं: ECS sidecar कंटेनर बनाएं जो शुरुआती चरण में पुराने EFS फ़ाइलों को साफ करेगा Lambda या ECS कार्य बनाएं जो EFS को स्थापित करेगा, और CRON द्वारा पुराने फ़ाइलों को साफ करें। आइए इन दोनों की जांच करें। विकल्प 1: AWS Lambda यह सबसे अच्छा समाधान है क्योंकि यह ECS कार्यों के जीवन चक्र और अन्य कारकों से प्रभावित नहीं होता है. इस रणनीति को लागू करने के लिए, आपको एक EFS स्टोरेज के साथ एक Lambda कार्य बनाने की आवश्यकता है (Lambda में एक फ़ाइल सिस्टम को स्थापित करने के बारे में अधिक जानें) ) और निम्नलिखित पायथन कोड: आधिकारिक डॉ। आधिकारिक डॉ। import os import time import json def lambda_handler(event, context): # Note: you can only mount the filesystem to the /mnt/ directory. directory = '/mnt/dumps' # File pattern to match pattern = 'crash.dmp' # Time in minutes (by default 1d) minutes_old = 1440 # Convert minutes to seconds age_seconds = minutes_old * 60 # Current time now = time.time() for root, dirs, files in os.walk(directory): for file in files: if pattern in file: file_path = os.path.join(root, file) file_mtime = os.path.getmtime(file_path) if now - file_mtime > age_seconds: print(f"Found a file that older than {minutes_old} minutes: {file_path}") try: os.remove(file_path) except Exception as e: print(f"Failed to delete {file_path}: {e}") return { "statusCode": 200, "body": json.dumps("EFS clean-up completed successfully!") } जैसा कि आप देख सकते हैं, यह एक सरल कोड है जो स्थापित भंडारण से फ़ाइलों को हटाता है जो एक दिन से पुराने हैं। जब आपका Lambda तैयार हो जाता है, तो हमें CRON ट्रिगर को नियमित रूप से चलाने के लिए कॉन्फ़िगर करने की भी आवश्यकता होती है। और CloudWatch के नियम That’s it, after all of these steps your EFS storage will be cleaned up automatically by your CRON schedule. विकल्प 2: ECS sidecar कंटेनर। इस विकल्प को लागू करने के लिए हमें अपने कार्य परिभाषा में एक नया कंटेनर जोड़ना होगा: { "essential": false, "name": "janitor", "image": "public.ecr.aws/amazonlinux/amazonlinux:2", "command": [ "bash", "-lc", "find /dumps -name '*crash.dmp*' -type f -mmin +10080 -print -delete" ], "mountPoints": [ { "containerPath": "/dumps", "readOnly": false, "sourceVolume": "dotnet-dumps" } ], "linuxParameters": { "initProcessEnabled": true } } इस कार्य के पीछे तर्क: दो कंटेनरों के साथ एक नया ईसीएस कार्य प्रारंभ करें: ऐप और janitor janitor कंटेनर में पुराने EFS फ़ाइलों को साफ करें और बाहर निकलें। जैसा कि आप देख सकते हैं, यह तकनीक काफी सरल है और खोज कमांड पर भरोसा करती है, जिसे आप अनुकूलित कर सकते हैं. उदाहरण के लिए, यह 10080 मिनट (7 दिनों से अधिक पुराने फ़ाइलों को हटाता है). बेशक, यह रणनीति लंबे समय तक चलने वाले ईसीएस कार्यों से निपटने पर पहली की तुलना में कम वांछनीय है, लेकिन यह छोटी-छोटी ईसीएस कार्यों या प्रोटोटाइप के लिए अधिक सुविधाजनक हो सकता है। समय परीक्षण इस अनुभाग में, हम .NET अनुप्रयोग बिल्डिंग में गहराई से डुबकी नहीं करेंगे. परीक्षण उद्देश्यों के लिए, आप अनुप्रयोग को संशोधित कर सकते हैं जिसे हम शुरुआत में इस्तेमाल करते थे। उदाहरण के लिए Aspnetapp उदाहरण के लिए Aspnetapp .NET की दुर्घटना का कारण बनने का सबसे आसान तरीका है यह विधि आमतौर पर सिमुलेशन के लिए उपयोग की जाती है। . Environment.FailFast() कठोर क्रैश चलो दुर्घटना का सिमुलेशन करते हैं: Add Environment.FailFast("kvendingoldo-dotnet-demo-crash .NET उदाहरण दुर्घटना"); dotnet-docker/samples/aspnetapp/aspnetapp/Program.cs फ़ाइल पर पंक्ति। एक नया डॉकर छवि बनाएं, और ECS कार्य को फिर से बनाएं। ईसीएस कार्य समाप्त हो जाएगा, लेकिन पहले एक .NET क्रैश डंप उत्पन्न करेगा, जो कुछ सेकंडों में एस 3 पर उपलब्ध होगा। अंतिम चरण में, आप अपने स्लाक पर इस तरह के एक संदेश प्राप्त करेंगे: 📦 New .NET dump is uploaded! ☁️ Bucket: kvendingoldo-dotnet-demo-crash 💾 File: 1739104252-kvendingoldo-dotnet-demo-crash.dmp 🔗 Link: https://kvendingoldo-dotnet-demo-crash.s3.us-east-2.amazonaws.com/1739104252-kvendingoldo-dotnet-demo-crash.dmp संभावित सुधार लेख को कवर करने से पहले, मैं संभावित परिवर्तनों के बारे में कुछ टिप्पणियाँ देना चाहता हूं: S3 ऑब्जेक्ट्स के लिए पूर्व-समैनित URLs उत्पन्न करना एक अच्छा विचार होगा S3 बैकपैक के लिए जीवन चक्र नीति सेट करें ताकि पुराने बैकपैक को बैकपैक से स्वचालित रूप से हटाया जा सके नए S3 वस्तुओं के बारे में सूचनाओं को कई गंतव्यों को भेजने के लिए SNS का उपयोग करें निष्कर्ष उत्पादन वातावरण में, विफलताओं में तेजी से दृश्यता महत्वपूर्ण है. स्वचालित डंप डिलीवरी MTTR (Mean Time To Resolution) को कम करता है और घटना प्रतिक्रिया में सुधार करता है। जैसा कि आप देख सकते हैं, इस प्रक्रिया को लागू करना उतना मुश्किल नहीं है जितना आप उम्मीद कर सकते हैं. हां, हमने इन कार्यों को पूरा करने के लिए कई AWS सेवाओं का उपयोग किया, लेकिन जब हम गहराई से देखते हैं, तो वे सभी महत्वपूर्ण हैं. मुझे उम्मीद है कि यह लेख आपको एक व्यक्तिगत डंप डिलीवरी श्रृंखला बनाने में मदद करेगा और आपके विकास टीम को खुश करेगा। प्रस्तावित दृष्टिकोण को संशोधित करने के लिए स्वतंत्र महसूस करें, और कृपया किसी भी समय मुझसे संपर्क करें यदि आपके कोई प्रश्न हैं। Happy कोडिंग!