

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Amazon ECS 動作日誌進行故障診斷
<a name="action-logs-troubleshooting"></a>

動作日誌提供 Amazon ECS 服務起始操作的詳細記錄，協助您診斷問題。每個日誌項目都包含時間戳記、日誌層級、事件名稱和詳細承載，其中包含發生的情況和原因的相關內容。本主題涵蓋常見的故障診斷案例，並提供ready-to-use CloudWatch Logs Insights 查詢。

## 了解日誌層級
<a name="action-logs-troubleshooting-log-levels"></a>

動作日誌使用三個日誌層級來指出每個事件的嚴重性：

`INFO`  
一般操作，包括部署已開始、任務已啟動或資源已佈建等。這些事件表示 Amazon ECS 依預期正常執行動作。

`WARN`  
可能需要注意的非嚴重問題，例如重試嘗試或容量限制。Amazon ECS 會持續進行，但操作可能需要比預期更長的時間來完成。

`ERROR`  
需要執行動作的失敗，例如部署失敗、佈建錯誤或任務啟動受損。檢閱這些事件以識別根本原因並採取修正動作。

**提示**  
首先篩選 `ERROR`或 `WARN`日誌層級，以快速識別問題。然後，您可以將搜尋擴展到`INFO`事件，以取得其他內容。

## 偵錯失敗的服務部署
<a name="action-logs-troubleshooting-failed-deployment"></a>

部署停滯進行中或自動復原。

篩選`eventName`包含 的`ERROR`日誌`DEPLOYMENT`。檢查`detail`承載是否有部署 ARN、狀態原因和失敗的任務計數。

下列範例顯示部署失敗，其中沒有可用的回復候選項目：

```
{
  "resourceArn": "arn:aws:ecs:us-east-1:111122223333:cluster/my-cluster",
  "actionSourceId": "service/my-cluster/my-service",
  "logLevel": "ERROR",
  "eventTimestamp": 1784573730986,
  "detail": {
    "statusReason": "No rollback candidate was found to run the rollback.",
    "serviceDeploymentArn": "arn:aws:ecs:us-east-1:111122223333:service-deployment/my-cluster/my-service/abc123def456",
    "status": "FAILED",
    "eventName": "SERVICE_DEPLOYMENT_ROLLBACK_FAILED"
  }
}
```

檢查 `detail.statusReason` 欄位以識別任務失敗的原因。使用下列 CloudWatch Logs Insights 查詢來尋找所有部署錯誤：

```
fields @timestamp, detail.statusReason
| filter logLevel = "ERROR" and detail.deploymentArn like /{{my-cluster}}\/{{my-service}}/
| sort @timestamp desc
| limit 20
```

## 診斷受管協助程式問題
<a name="action-logs-troubleshooting-daemon"></a>

協助程式未在執行個體上啟動，或協助程式部署卡住。

依協助程式 ARN 篩選日誌，以尋找與協助程式相關的事件。您也可以依 篩選`logLevel`，將結果縮小為警告或錯誤。

下列範例顯示由於目標執行個體上的記憶體不足而無法啟動的協助程式任務：

```
{
  "timestamp": 1719500050000,
  "logLevel": "WARN",
  "account": "123456789012",
  "region": "us-east-1",
  "resourceArn": "arn:aws:ecs:us-east-1:123456789012:cluster/my-cluster",
  "actionSourceId": "arn:aws:ecs:us-east-1:123456789012:daemon/my-cluster/my-logging-daemon",
  "eventName": "DAEMON_TASK_START_IMPAIRED",
  "detail": {
    "statusReason": "RESOURCE:MEMORY - Unable to place daemon task on container instance: insufficient memory",
    "containerInstanceArn": "arn:aws:ecs:us-east-1:123456789012:container-instance/my-cluster/a1b2c3d4"
  }
}
```

確認目標執行個體有足夠的資源來執行協助程式任務。如果執行個體耗盡，協助程式可能無法啟動，直到新的執行個體可用為止。使用下列查詢來篩選特定協助程式的事件：

```
fields @timestamp, logLevel, detail.statusReason
| filter actionSourceId like /{{my-logging-daemon}}/
| filter logLevel in ["ERROR", "WARN"]
| sort @timestamp desc
| limit 20
```

## 了解協助程式任務停止原因
<a name="action-logs-troubleshooting-daemon-task-stops"></a>

協助程式任務意外停止。

篩選包含協助程式任務失敗詳細資訊的 `WARN`和 `ERROR`日誌。`detail` 承載中的下列欄位提供有關協助程式任務停止原因的資訊：

`detail.stopCode`  
機器可讀取的程式碼，可分類任務停止的原因。

`detail.statusReason`  
任務停止原因的人類可讀描述。此欄位不會出現在所有日誌項目中。

`detail.containerStoppedReason`  
導致任務停止之特定容器的其他內容。

如需任務停止代碼的完整清單及其說明，請參閱 [Amazon ECS 已停止任務錯誤訊息](stopped-task-error-codes.md)。

**注意**  
預期的協助程式任務停止，例如 `UserInitiated`，會從動作日誌篩選出。您只會看到意外或錯誤相關的協助程式任務停止。

## 實用的 CloudWatch Logs Insights 查詢
<a name="action-logs-troubleshooting-queries"></a>

使用以下 CloudWatch Logs Insights 查詢來調查 Amazon ECS 服務的常見問題。

**過去一小時的所有錯誤**

```
fields @timestamp, logLevel, eventName, detail.statusReason
| filter logLevel = "ERROR"
| sort @timestamp desc
| limit 50
```

**注意**  
`detail.statusReason` 欄位不會出現在所有日誌項目中。如果結果中的 欄位是空的，請使用`detail`承載中的 `eventName`和其他欄位做為內容。

**特定服務的事件**

```
fields @timestamp, logLevel, detail.statusReason
| filter @message like /{{my-service}}/
| sort @timestamp desc
| limit 50
```

**特定部署的部署時間表**

```
fields @timestamp, logLevel, detail.statusReason
| filter detail.deploymentArn like /{{my-cluster}}\/{{my-service}}\/{{abc123}}/
| sort @timestamp asc
```

**依原因分組的協助程式任務失敗**

```
filter logLevel = "ERROR" and detail.stopCode != ""
| stats count(*) as failureCount by detail.stopCode, detail.statusReason
| sort failureCount desc
| limit 20
```