View a markdown version of this page

Troubleshooting with Amazon ECS Action Logs - Amazon Elastic Container Service

Troubleshooting with Amazon ECS Action Logs

Action Logs help you diagnose issues by providing detailed records of Amazon ECS service-initiated operations. Each log entry contains a timestamp, log level, event name, and a detail payload with context about what happened and why. This topic covers common troubleshooting scenarios and provides ready-to-use CloudWatch Logs Insights queries.

Understanding log levels

Action Logs use three log levels to indicate the severity of each event:

INFO

Normal operations such as deployment started, task launched, or resource provisioned. These events indicate that Amazon ECS is performing actions as expected.

WARN

Non-fatal issues that might need attention, such as retry attempts or capacity constraints. Amazon ECS continues to make progress, but the operation might take longer than expected.

ERROR

Failures that require action, such as deployment failed, provisioning error, or task start impaired. Review these events to identify the root cause and take corrective action.

Tip

Start by filtering for ERROR or WARN log levels to identify issues quickly. You can then expand your search to INFO events for additional context.

Debugging a failed service deployment

Symptoms

Deployment stuck in progress or automatically rolled back.

What to look for

Filter for ERROR logs where eventName contains DEPLOYMENT. Check the detail payload for the deployment ARN, status reason, and failed task count.

The following example shows a deployment failure where no rollback candidate was available:

{ "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" } }
Resolution

Check the detail.statusReason field to identify why tasks failed. Use the following CloudWatch Logs Insights query to find all deployment errors:

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

Diagnosing managed daemon issues

Symptoms

Daemon not starting on instances or daemon deployment stuck.

What to look for

Filter logs by the daemon ARN to find events related to your daemon. You can also filter by logLevel to narrow results to warnings or errors.

The following example shows a daemon task that failed to start due to insufficient memory on the target instance:

{ "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" } }
Resolution

Verify that target instances have sufficient resources to run the daemon task. If instances are draining, the daemon might not start until new instances become available. Use the following query to filter events for a specific daemon:

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

Understanding daemon task stop reasons

Symptoms

Daemon tasks stopping unexpectedly.

What to look for

Filter for WARN and ERROR logs that contain daemon task failure details. The following fields in the detail payload provide information about why a daemon task stopped:

detail.stopCode

A machine-readable code that categorizes the reason for the task stop.

detail.statusReason

A human-readable description of why the task stopped. This field is not present in all log entries.

detail.containerStoppedReason

Additional context about the specific container that caused the task to stop.

For a full list of task stop codes and their descriptions, see Amazon ECS stopped tasks error messages.

Note

Expected daemon task stops, such as UserInitiated, are filtered out from Action Logs. You only see unexpected or error-related daemon task stops.

Useful CloudWatch Logs Insights queries

Use the following CloudWatch Logs Insights queries to investigate common issues with your Amazon ECS services.

All errors in the last hour

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

The detail.statusReason field is not present in all log entries. If the field is empty in your results, use the eventName and other fields in the detail payload for context.

Events for a specific service

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

Deployment timeline for a specific deployment

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

Daemon task failures grouped by reason

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