🧩
起動に失敗するAmazon ECSタスクのデバッグにはtracerを使おう
Amazon ECSタスクが正常に起動しなかった時、ECSイベントログやらCloudWatch LogsなどAWSコンソールをあちこち巡回するはめになります。
そんなときは、GitHub - fujiwara/tracer: ECS task event/log tracer CLI の出番です。
ECS タスクの 関連ログをまるっと取得できます。
$ tracer クラスターID タスクID
と実行します。
クラスターID だけを取得すると、タスクIDの一覧を取得できます。
$ tracer demo-test-Cluster-XCK99q2PJPe8
1671014b153943b4aa29e5ed50c837f7 demo-test:1 RUNNING RUNNING 2021-12-30T12:46:32+01:00 service:demo-test-Service-XCB1Q6tnRKLS FARGATE
005f4778e3ba4bbe857ab031a6bfb0a7 demo-test:2 STOPPED STOPPED 2021-12-30T12:04:01+01:00 service:demo-test-Service-XCB1Q6tnRKLS FARGATE
08a87f1cc8a14bffb00652a14808fcbb demo-test:2 STOPPED STOPPED 2021-12-30T12:33:12+01:00 service:demo-test-Service-XCB1Q6tnRKLS FARGATE
...
停止したタスクIDを指定します。
$ tracer demo-test-Cluster-XCK99q2PJPe8 005f4778e3ba4bbe857ab031a6bfb0a7
2021-12-30T12:04:01.439+01:00 TASK Created
2021-12-30T12:04:01.470+01:00 SERVICE (service demo-test-Service-XCB1Q6tnRKLS) has started 1 tasks: (task 005f4778e3ba4bbe857ab031a6bfb0a7).
2021-12-30T12:04:04.472+01:00 TASK Connected
2021-12-30T12:04:14.191+01:00 TASK Pull started
2021-12-30T12:04:28.955+01:00 TASK Pull stopped
...
2021-12-30T12:04:32.547+01:00 CONTAINER:xx-xxx Traceback (most recent call last):
2021-12-30T12:04:32.547+01:00 CONTAINER:xx-xxx File "/usr/local/bin/flask", line 8, in <module>
2021-12-30T12:04:32.547+01:00 CONTAINER:xx-xxx sys.exit(main())
...
2021-12-30T12:04:32.547+01:00 CONTAINER:xx-xxx File "/usr/local/lib/python3.8/site-packages/botocore/client.py", line 719, in _make_api_call
2021-12-30T12:04:32.547+01:00 CONTAINER:xx-xxx raise error_class(parsed_response, operation_name)
2021-12-30T12:04:32.547+01:00 CONTAINER:xx-xxx botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied
2021-12-30T12:04:33.143+01:00 TASK Execution stopped
2021-12-30T12:04:43.172+01:00 TASK Stopping
2021-12-30T12:04:43.172+01:00 TASK StoppedReason:Essential container in task exited
2021-12-30T12:04:43.172+01:00 TASK StoppedCode:EssentialContainerExited
2021-12-30T12:04:43.286+01:00 SERVICE (service demo-test-Service-XCB1Q6tnRKLS) deregistered 1 targets in (target-group arn:aws:elasticloadbalancing:...)
2021-12-30T12:04:43.295+01:00 SERVICE (service demo-test-Service-XCB1Q6tnRKLS) has begun draining connections on 1 tasks.
2021-12-30T12:05:06.763+01:00 TASK Stopped
2021-12-30T12:05:06.763+01:00 CONTAINER:xx-xxx STOPPED (exit code: 1)
ログは時系列順に並んでいます。
S3の権限不足でタスクが停止したと一目瞭然です。
tracer のインストール
Mac からは次のコマンドでインストールできます。
$ brew install fujiwara/tap/tracer
各種アーキテクチャー向けにビルド済みのバイナリも用意されています。
GitHub の Releases からダウンロードしてください。
まとめ
Amazon ECSタスクの異常停止をデバッグするには
- サービスイベント
- タスクイベントログ
- CloudWatch Logsのアプリログ
を確認するために、あちこちの画面(API)を行き来する必要があります。
tracer を使い、コマンド一発で、集約された時系列順のログを確認しましょう。
Discussion