ECS Fargateのタスクでは、デフォルトで特殊なことをしなければログの出力先がCloudwatch Logsになります。
Cloudwatch Logsはログを集める場所としては便利ですが、マネージメントコンソール上でログを表示するという点ではあまり見やすくなく、従来どおりEC2にSSHログインしてログを
tail -f したり、cut したりしていることに慣れているとまあまあ不便に感じたりします。
これまでのコマンドと同じような使い勝手で、Cloudwatch Logsが使えないものかと調べたところ awslogsというツールが便利そうでしたので紹介します。
インストール
pip install awslogs
ECSタスクのCloudwatch Logsの構造
Cloudwatch Logsは次のような構造ですが、
- Cloudwatch Logs
- ロググループ
- ストリーム
- ログ実体
例えば、ECSのタスクを起動すると、デフォルトでCloudwatch Logsに下記のようにログが出力されます。
- Cloudwatch Logs
- /ecs/タスク名
- ecs/コンテナ名/コンテナID
- ログ実体
awslogsのコマンド
ロググループの一覧を取得
awslogs groups [オプション]
ストリームの一覧を取得
awslogs streams ロググループ名 [オプション]
ログを取得
awslogs get [ロググループ名] [ストリーム名] [オプション]
オプションには次のようなものがあります(一部)
-G --no-groups ロググループ名を出力しない
-S --no-strems ストリーム名を出力しない
-w --watch "tail -f"と同等に更新をウォッチ
-f文字列 文字列に一致したものだけ表示
-s時間指定 "時間指定"前以降のみ取得(1d = 一日、1m = 一分などが可能。例:-s1d)
具体的な使用例
タスクのすべてのコンテナのログを出力
awslogs get /ecs/タスク名 -G -w
タスクの特定のコンテナのログを出力
awslogs get /ecs/タスク名 ecs/コンテナ名/* -G -S -w
タスクの特定のコンテナのログで “INFO” が含まれるもののみ出力
awslogs get /ecs/タスク名 ecs/コンテナ名/* -fINFO -G -S -w
武政
釣りとカレーと犬と音楽(プログレ)が好きです。
オンプレミス、プライベートクラウドのインフラ業務を行った後、AWS移行プロジェクトに参画。設計、構築、全体の管理などを担当。
たまに開発もやります。