本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
對 Amazon ECS 受管執行個體進行疑難排解
使用下列程序對 Amazon ECS 受管執行個體進行故障診斷,包括常見問題、診斷技術和解決步驟。
先決條件
對 Amazon ECS 受管執行個體進行故障診斷之前,請確定您已具備下列要求。
-
AWS CLI 已安裝並設定適當的許可
如需詳細資訊,請參閱 AWS Command Line Interface User Guide 中的 Installing or updating to the latest version of the AWS Command Line Interface。
使用 Amazon ECS 受管執行個體容量提供者存取叢集。如需詳細資訊,請參閱為 Amazon ECS 受管執行個體建立叢集。
常見的疑難排解案例:
檢視 Amazon ECS 受管執行個體容器代理程式日誌
您可以透過連線至在執行個體中執行的特權容器,在 Amazon ECS 受管執行個體中檢視這些 Amazon ECS 日誌檔案。
診斷步驟
將具有權限和 Linux 功能的偵錯容器部署為 Amazon ECS 任務:
設定下列環境變數。
將 user-input 取代為實際值。
export ECS_CLUSTER_NAME="your-cluster-name" export AWS_REGION="your-region" export ACCOUNT_ID="your-account-id"
使用名為 的 CLI JSON 檔案建立任務定義node-debugger.json。
cat << EOF > node-debugger.json { "family": "node-debugger", "taskRoleArn": "arn:aws:iam::${ACCOUNT_ID}:role/ecsTaskExecutionRole", "executionRoleArn": "arn:aws:iam::${ACCOUNT_ID}:role/ecsTaskExecutionRole", "cpu": "256", "memory": "1024", "networkMode": "host", "pidMode": "host", "requiresCompatibilities": ["MANAGED_INSTANCES", "EC2"], "containerDefinitions": [ { "name": "node-debugger", "image": "public.ecr.aws/amazonlinux/amazonlinux:2023", "essential": true, "privileged": true, "command": ["sleep", "infinity"], "healthCheck": { "command": ["CMD-SHELL", "echo debugger || exit 1"], "interval": 30, "retries": 3, "timeout": 5 }, "linuxParameters": { "initProcessEnabled": true }, "mountPoints": [ { "sourceVolume": "host-root", "containerPath": "/host", "readOnly": false } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/aws/ecs/node-debugger", "awslogs-create-group": "true", "awslogs-region": "${AWS_REGION}", "awslogs-stream-prefix": "ecs" } } } ], "volumes": [ { "name": "host-root", "host": { "sourcePath": "/" } } ] } EOF
註冊,然後執行任務。執行下列命令。
aws ecs register-task-definition --cli-input-json file://node-debugger.json TASK_ARN=$(aws ecs run-task \ --cluster $ECS_CLUSTER_NAME \ --task-definition node-debugger \ --enable-execute-command \ --capacity-provider-strategy capacityProvider=managed-instances-default,weight=1 \ --query 'tasks[0].taskArn' --output text) # Wait for task to be running aws ecs wait tasks-running --cluster $ECS_CLUSTER_NAME --tasks $TASK_ARN
連線至容器。執行下列命令。
aws ecs execute-command \ --cluster $ECS_CLUSTER_NAME \ --task $TASK_ARN \ --container node-debugger \ --interactive \ --command "/bin/sh"
檢查 Amazon ECS 代理程式日誌:
在容器的互動式工作階段中,執行下列命令:
# Install required tools yum install -y util-linux-core # View ECS agent logs nsenter -t 1 -m -p cat /var/log/ecs/ecs-agent.log | tail -50 # Check agent registration nsenter -t 1 -m -p grep "Registered container instance" /var/log/ecs/ecs-agent.log Example Output: {"level":"info","time":"2025-10-16T12:39:37.665","msg":"Registered container instance with cluster!"} # Verify capabilities nsenter -t 1 -m -p grep "Response contained expected value for attribute" /var/log/ecs/ecs-agent.log
檢查客服人員指標:
執行下列命令以檢視日誌。
# View metrics logs nsenter -t 1 -m -p cat /var/log/ecs/metrics.log | tail -20
任務置放問題
以下是任務置放問題的症狀:
任務停滯在 PENDING 狀態
任務無法在 Amazon ECS 受管執行個體上啟動
資源不足錯誤
診斷步驟
執行下列命令來診斷任務置放問題,並收集叢集容量、容器執行個體和系統服務的相關資訊:
# Check cluster capacity aws ecs describe-clusters --clusterscluster-name--include STATISTICS # Check cluster capacity providers aws ecs describe-clusters --clusterscluster-name--include STATISTICS --query 'clusters[].capacityProviders' # List container instances aws ecs list-container-instances --clustercluster-name# Check container instance details aws ecs describe-container-instances --clustercluster-name--container-instancescontainer-instance-arn# Check container instance remaining resources CPU/Mem aws ecs describe-container-instances --cluster $ECS_CLUSTER_NAME --container-instancescontainer-instance-arn--query 'containerInstances[].remainingResources' # Check container instance Security Group aws ecs describe-container-instances --cluster $ECS_CLUSTER_NAME --container-instancescontainer-instance-arn--query 'containerInstances[].ec2InstanceId' --output text aws ec2 describe-instances --instance-idsinstance-id--query 'Reservations[0].Instances[0].SecurityGroups' aws ec2 describe-security-groups --group-ids security-group-id
系統服務監控:
# Check Containerd status nsenter -t 1 -m -p systemctl status containerd.service # Check Amazon ECS container agent status nsenter -t 1 -m -p systemctl status ecs
Resolution
若要解決任務置放問題,請依照下列步驟確保適當的組態和容量:
驗證任務資源需求與可用容量
檢查置放限制條件和策略
確保已設定 Amazon ECS 受管執行個體容量提供者
確保任務和容器執行個體安全群組具有允許 Amazon ECS 代理程式管理端點流量的傳出規則
聯網問題
以下是聯網問題的摘要:
無法連線到外部服務的任務
DNS 解析問題
診斷步驟
網路連線測試:
從偵錯容器執行下列命令:
注意
確認連接至容量提供者或 Amazon ECS 任務的安全群組允許流量。
# Install DNS Utility yum install bind-utils -y # Test DNS resolution nslookup amazon.com # Test external connectivity curl -I https://amazon.com
資源限制
以下是聯網問題的摘要:
由於記憶體限制而終止的任務
CPU 限流
磁碟空間問題
診斷步驟
執行命令來監控資源和容器限制。
資源監控:
# Check memory usage nsenter -t 1 -m -p free -h # Check disk usage nsenter -t 1 -m -p lsblk # Check disk usage nsenter -t 1 -m -p df -h
容器限制:
# Check OOM kills nsenter -t 1 -m -p dmesg | grep -i "killed process"
容器執行個體代理程式中斷連線問題
以下是容器執行個體代理程式中斷連線問題的症狀:
在 Amazon ECS 主控台中顯示為中斷連線的容器執行個體
任務無法放置在特定執行個體上
日誌中的客服人員註冊失敗
診斷步驟
如果在主機上執行 ECS Exec 可存取的現有權限任務,請執行下列命令來診斷代理程式連線問題:
# check service status nsenter -t 1 -m -p systemctl restart ecs nsenter -t 1 -m -p systemctl restart containerd # restart stopped services nsenter -t 1 -m -p systemctl restart ecs nsenter -t 1 -m -p systemctl restart containerd
否則,請強制取消註冊 Amazon ECS 受管執行個體。執行以下命令:
# list ECS Managed Instance container aws ecs list-container-instances --cluster managed-instances-cluster --query 'containerInstanceArns' --output text # deregister the specific container instance aws ecs deregister-container-instance \ --cluster $ECS_CLUSTER_NAME \ --container-instance container-instance-arn \ --force
Resolution
若要解決客服人員中斷連線問題,請遵循下列步驟:
驗證容器執行個體的 IAM 角色許可
檢查安全群組規則允許傳出 HTTPS 流量到 ECS 端點
確保與 AWS 服務的網路連線
視需要重新啟動 ECS 代理程式服務:
nsenter -t 1 -m -p systemctl restart ecs確認 /etc/ecs/ecs.config 中的 ECS_CLUSTER 組態與您的叢集名稱相符
Amazon ECS 受管執行個體中的日誌分析
系統日誌
使用下列命令來檢查系統日誌,並識別受管執行個體的潛在問題:
# Check system messages nsenter -t 1 -m -p journalctl --no-pager -n 50 # Check kernel logs nsenter -t 1 -m -p dmesg | tail -20 # Check for disk space errors nsenter -t 1 -m -p journalctl --no-pager | grep -i "no space\|disk full\|enospc"
使用 EC2 AWS CLI 從 Amazon ECS 受管執行個體取得主控台輸出
使用 Amazon EC2 執行個體 ID 擷取主控台輸出。
將 user-input 取代為實際值。
aws ec2 get-console-output --instance-idinstance-id--latest --output text
清除
執行下列動作以停止轉移任務並取消註冊任務定義。
# Stop debug task aws ecs stop-task --cluster $ECS_CLUSTER_NAME --task $TASK_ARN # Deregister task definition (optional) aws ecs deregister-task-definition --task-definition node-debugger
其他資源
如需疑難排解 Amazon ECS 受管執行個體的詳細資訊,請參閱下列資源: