この記事は最終更新日から1年以上が経過しています。
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移行プロジェクトに参画。設計、構築、全体の管理などを担当。
たまに開発もやります。
最近書いた記事
- 2019.03.28Cloudwatch Logsのログをコマンドで見る方法(tail -fもできる)
- 2018.03.26コマンドを便利にするコマンド alias 再入門
- 2018.03.23AWSの仮想MFAデバイスの再登録の方法(シークレット設定キーを使う)
- 2017.10.12レコチョク勉強会 第4回「AWS初心者向けハンズオン Webサーバ構築編」を開催させて頂きました。