ECSでEC2を使う場合のデバッグ
- Amazon Linux2に公式マニュアルを元にecs-agentを入れてクラスターにつないでみた
- マニュアルのとおりにやっても正常に起動しない場合があり、そういう時にどうやってデバグするのか情報がまとまっていなかったので、自分のメモがてら記事にしてみる
- 今回のケースではAmazon Linux2に手動でagentをインストールした場合を扱います。他のケースだと細かいパスとかは違っているかもしれません
デバッグに有用なファイルのパス
# 設定情報
## 設定情報。どのクラスタに所属させるか、などを設定
/etc/ecs/ecs.config
## エージェント状態ファイル。インスタンスがクラスターに作成された後に作られる。曲者なやつ。
/var/lib/ecs/data/ecs_agent_data.json
# ログファイル
## 初期化ログ。起動、失敗、再起動、終了がイベントベースでざっくり載っている。
## なんで止まったとかは書いてないけど、何回リトライしたかとかはここを見ると追える
/var/log/ecs/ecs-init.log
## エージェントログ。実際のデバッグに有用な情報は大体ここ
/var/log/ecs/ecs-agent.log
## ボリュームログ。ecsエージェントがmountするdockerのvolumeのログ?まだあまり使ったことはない
/var/log/ecs/ecs-volume-plugin.log
デバッグのステップ
systemdの確認
まずはsystemdでちゃんとecsのデーモンが動いているか確認。Activeがactive(running)になっていなければ、ECSエージェントが正しくインストールされていないかも。
$ sudo systemctl status ecs
● ecs.service - Amazon Elastic Container Service - container agent
Loaded: loaded (/usr/lib/systemd/system/ecs.service; enabled; vendor preset: disabled)
Active: active (running) since 月 2020-08-24 20:42:32 UTC; 3 days ago
Docs: https://aws.amazon.com/documentation/ecs/
Process: 5195 ExecStopPost=/usr/libexec/amazon-ecs-init post-stop (code=exited, status=0/SUCCESS)
Process: 5179 ExecStop=/usr/libexec/amazon-ecs-init stop (code=exited, status=0/SUCCESS)
Process: 5213 ExecStartPre=/usr/libexec/amazon-ecs-init pre-start (code=exited, status=0/SUCCESS)
Main PID: 5279 (amazon-ecs-init)
Tasks: 7
Memory: 3.4M
CGroup: /system.slice/ecs.service
└─5279 /usr/libexec/amazon-ecs-init start
metadataの取得
jsonが表示されればOK。うまく動いていない場合は何も表示されない
$ curl -s http://localhost:51678/v1/metadata | python -mjson.tool
{
"Cluster": "my-cluster",
"ContainerInstanceArn": "arn:aws:ecs:ap-northeast-1:xxxxxxx:container-instance/1111-22222-33333-44444",
"Version": "Amazon ECS Agent - v1.39.0 (61d418ea)"
}
上記2コマンドで異常が検知された場合のやること
- 公式マニュアルに従ってちゃんとecs agent入れるコマンド打っているか確認
- /etc/ecs/ecs.configにちゃんとECS_CLUSTERが正しく指定されているか確認
ECS_CLUSTER=my-cluster
- /var/log/ecs/ecs-agent.logのログ内容を確認
- エラーの内容を確認。明確なエラー原因がつかめなかったら、とりあえず次のステップを行う
- /var/lib/ecs/data/ecs_agent_data.jsonの中身を消す
- 何回か発生した不具合のほとんどは、ここのデータが更新されていないために発生していた。ecs.configの内容の書き換えや、EC2インスタンスのタイプを変更しての再起動など、何か環境が変わった場合、基本はここをリセットしないとうまく立ち上がってくれない