CloudWatch Logs ロググループを tail -f する5つの方法
最近いろいろな勉強をしていて脳の体力が鍛えられているような気がしています。やっさんです。
CloudWatch Logs ロググループをtailしログ出力情報をリアルタイムで監視したいというケースについて、今回は5つの方法をご紹介します。CLI4つ+GUI1つをご紹介します。
何故tail -fをしたいのか
CloudWatch Logs ロググループのコンソール画面は進化し続けていますが、リアルタイム監視という要件においてコマンドラインツールからログ監視を行いたいケースは頻繁に発生します。CLIでログ監視すると、使い慣れたパイプやgrepなどのLinuxコマンドを利用できる、リダイレクトしてログ出力情報を保存するなど様々なメリットがあります。
CloudWatch Logs ロググループを tail -f する方法5選
1 AWS CLI V2の「tails --follow」を利用する
AWS CLI V2を利用することで、CloudWatch Logs ロググループをtailすることが可能です。
コマンド例
aws logs tail \
【ロググループ名】 \
--follow
出力例
Pros
- AWSの公式ツールという安心感
- インストーラーによる簡単インストール
- AWS CLI V2をインストールすればすぐに使い始めることができる
Cons
- 他と比較して、機能としては少なめ
- ストリーム名を指定できない
- 日時や時刻による範囲指定ができない
2 オープンソースソフトウェア「awslogs」の「-w」オプションを利用する
awslogsは、Amazon CloudWatchのログからグループ、ストリーム、イベントをクエリするためのシンプルなコマンドラインツールです。
コマンド例
awslogs get \
【ロググループ名】 \
-w
出力例
Pros
- brewコマンドによる簡単インストール
- ロググループやストリームの検索コマンドもある
- 正規表現によるストリーム名フィルタリング機能
- 類似系ソフトウェアの元祖的な存在で、人気が高い
Cons
- 後発系のソフトウェアと比較して動作速度が若干遅い
- 複数のロググループ指定に対応していない
3 オープンソースソフトウェア「cw」の「tail -f」オプションを利用する 【オススメ!】
cwはgoで作られており、複数のロググループ指定ができ高速に動作するコマンドラインツールです。
コマンド例
cw tail -f \
【ロググループ名】
出力例
Pros
- brewコマンドによる簡単インストール
- ロググループやストリームの検索コマンドもある
- 複数のロググループ指定が可能
- 正規表現によるストリーム名フィルタリング機能
- 高速に動作する
Cons
- 複数のグループを指定する場合に、正規表現が使えないため冗長になりがち
4 オープンソースソフトウェア「utern」を利用する 【オススメ!】
Uternでは、AWS CloudWatch Logs上の複数のロググループやログストリームからログイベントを尾行することができます。
コマンド例
utern \
【ロググループ名】
出力例
Pros
- brewコマンドによる簡単インストール
- 正規表現による強力なグループ名・ストリーム名フィルタリング機能
- 高速に動作する
Cons
- グループ名やストリーム名に正規表現を利用できるのは良いが、元となるグループ名やストリーム名の命名規則がルール化されていることが前提
5 JetBrainsのIDEプラグイン「AWS Toolkit for JetBrains」を利用する
AWS Toolkit for JetBrainsは、AWS上で構築されたアプリケーションを簡単に記述できるようにするJetBrains IDE用のプラグインで、CloudWatchログストリームの表示と検索が可能です。
画面サンプル
Pros
- GUIでお手軽にログ情報をリアルタイム監視できる
Cons
- IDEが有料である
- logsだけでなく、LambdaなどAWSリソースの直接更新や削除が可能なので、注意を払って使う必要がある
- 他と比較して、機能としては少なめ
- リアルタイム監視時に初回のみ画面をスクロールさせて追従する必要があった
比較表
それぞれのソフトウェアの簡易的な比較をしてみました。
ソフトウェア名 | スター数 | Made By | ロググループ | 複数のロググループ | ストリーム | フィルタリング |
---|---|---|---|---|---|---|
AWS CLI | 10.7k | Python | ○ | × | × | △ |
awslogs | 3.8k | Python | ○ | × | ○ | ○ |
cw | 358 | go | ○ | ○ | ○ | ○ |
utern | 237 | go | ○ | ◎ | ○ | ○ |
AWS Toolkit for JetBrains | 6 | Kotlin | ○ | × | × | △ |
※それぞれのPros, Consから◎、○、△、×をつけています。
どれを使うか
全てのソフトウェアを試したところ、go製の cw と utern はログ出力の開始がとても速く、他と比較して抜きん出ている印象です。cw と utern は複数のロググループの指定方法がそれぞれ異なるため、以下のように使い分けていくとよさそうです。
- 命名規則に則っている複数のロググループをtailしたいなら -> utern
- 命名規則の異なる複数のロググループをtailしたいなら -> cw
運用監視の手助けとなれば幸いです
いかがでしたでしょうか。AWSのログ監視と日々戦っている皆さんへの一助となれば幸いです。私も積極的に utern を活用していきます!
参照先
- tail — AWS CLI 2.1.26 Command Reference
- jorgebastida/awslogs: AWS CloudWatch logs for Humans™
- lucagrulla/cw: The best way to tail AWS CloudWatch Logs from your terminal
- knqyf263/utern: Multi group and stream log tailing for AWS CloudWatch Logs.
- AWS Toolkit - plugin for IntelliJ IDEs | JetBrains
以上です!