[アップデート] Amazon CloudWatch Logs でリアルタイムでログを確認出来る Live Tail 機能が追加されました

2023.06.07

いわさです。

私は CloudWatch Logs でログの確認をよくするのですが、トラブルシューティングや開発中にログに張り付くようなタイミングだと既存の CloudWatch Logs のイベント機能や Logs Insights では表示の更新が必要でちょっと不便だなと思っていました。

本日のアップデートで CloudWatch Logs に新たに Live Tail という機能が登場しました。

CloudWatch Logs のログストリームに送信されたログをリアルタイムで確認することが出来ます。
フィルターなどをかけながらリアルタイム表示出来るので、なかなか良いですよこれは。
ただし、有料オプションなのでご注意ください。

この記事では実際に使ってみた様子や料金について見ていきたいと思います。

CloudWatch Logs へログ出力するサンプルアプリ

ALB + EC2 なサンプルウェブアプリケーションを次のテンプレートを使ってデプロイします。
EC2 では CloudWatch エージェントをセットアップしてあり、Apache のアクセスログとエラーログを CloudWatch Logs へ転送するようにしています。

デプロイ後、次のようにクライアントからアクセスしてみます。

% curl hoge-web-alb-794156213.ap-northeast-1.elb.amazonaws.com
hoge

このログを確認する場合は従来のようにロググループを指定、あるいは追加でログストリームまで指定し、次のようにログを確認していたと思います。

この画面は自動更新されないので、過去の情報を分析する上では便利なのですが、リアルタイムに今発生したログを受け取りたいときは手動更新が必要で少し不便だったと思います。

ライブテール機能

では追加された機能を確認してみます。
CloudWatch コンソールのログカテゴリ内に新たに「Live tail」というメニューが追加されています。
既存のログストリームのコンソール上でリアルタイム表示出来るようになったのかと思ったのですが違うようです。

起動すると次のようにライブテール専用画面が表示されます。
この記事ではマネジメントコンソールの日本語表記にあわせて「ライブテール」「テーリング」という表記を使いたいと思います。

利用方法ですが、フィルター画面でロググループと任意でログストリームを選択し、画面右上の「開始」ボタンを押すと開始されます。
ログストリームは指定してもしなくても良いです。

後述しますがライブテールの利用では、開始から停止までの時間で追加料金が発生します

なお、ロググループは複数指定することも可能です。これは地味に嬉しい。
最大 10 個まで指定することが出来ますが、ロググループを複数選択した場合は次のようにログストリームが選択できなくなります。

ライブテールを開始し、ウェブアプリケーションへのリクエストが発生すると次のように追加されたログ情報が表示されていきます。
時系列昇順で表示されており、追加されたログ情報は末尾に追加されていきます。

なお、一覧の画面以上ログが表示された場合は自動でスクロールされます。

ログの詳細を確認する

詳しく分析したい情報は + アイコンからログの全体情報を表示することが出来ます。
詳細情報ペインから「トレーリングイベントを表示」を選択すると既存のログストリーム画面へ遷移します。

また、次のように直接一覧から展開することも可能です。
ライブテール画面は自動スクロールされますが、テーリング中にこのように特定のログに注目している際は自動スクロールがされません。
その場合は右下に「スクロールして最新のイベントに移動」ボタンが表示されるので、こちらからまた末尾まで移動して自動スクロールを再開することが出来ます。

また、1 秒あたり何件のログイベントが表示され、受信ログに対して何 % のイベントが表示されているのかがわかるようになっています。
これは、ログ流量が多すぎる場合にスクロールが速くなりすぎるためにライブテール機能が自動で調整を行います。ここが 100 % 未満の場合は全てのログイベントが表示されているわけではないという点に注意してください。

フィルター可能

従来ログストリームを確認する際にフィルターパターン機能を使って条件に一致するログのみを確認するケースが多かったと思います。
ライブテール機能でもフィルターパターンを設定して、条件に一致するログのみをテーリングすることが出来ます。

例えば、今回使ったウェブアプリケーションは ALB + EC2 の構成で、ALB からのヘルスチェックリクエストが Apache に送信され続けます。
ELB のヘルスチェックログを除外する場合は次のように設定したり出来ます。

外部クライアントからのアクセスのみをテーリング出来るようになりました。
これはとても便利ですね。

フィルターパターンは以下を参照してください。

キーワードで強調出来る

先程はフィルタリングしましたが、フィルタリングではなくキーワードによる強調表示を行う機能もあります。
使い方は次のようにコンソール上部にキーワードを入力するだけです。

ここでは cURL からのリクエストを強調したかったので次のように「curl」というキーワードを入力しています。
ログ一覧上で強調されているのがわかります。もう少し派手に強調してくれても構わん。

なお、キーワードは 5 つまで同時に指定することが可能で、大文字小文字は区別されません。

ロググループ、ログストリームからも遷移出来る

CloudWatch の Live tail メニューから遷移しましたが、ロググループやログストリームの画面からも遷移することが出来ます。
次のようにそれぞれ起動用のボタンが追加されています。

上記いずれの場合もライブテール画面に遷移しますが、選択したロググループやストリームをもとにすぐにテーリングが開始されますのでご注意ください。

実行時間あたりで追加料金が発生します

Live Tail のテーリングを実行している時間での従量課金となっています。
本日時点で、東京リージョンでは 1 分あたり 0.01 ドルです。

Live Tail は無料枠があって、1 か月あたり 1,800 分まで無料となっています。この無料枠は Logs の取り込み量などと同じ位置づけの無料枠です。
詳細は上記公式ドキュメントをご確認ください。

さいごに

本日は Amazon CloudWatch Logs でリアルタイムでログを確認出来る Live Tail 機能が追加されたので確認してみました。

まぁ無くても手動で頑張れるところではありますが、地味に便利ですね。
CodeBuild のビルドログとか自動更新されるの見てると、やっぱり便利だなと感じてましたし。

今回の機能は追加料金が発生するので、常時利用するようなものではなく特定のタイミングでのみ一時的にテーリングを開始するような使い方になりますね。
利用シーンを絞って使うことができればとても良いのではないでしょうか。

冒頭お伝えしたようなトラブルシューティングや開発中にログに張り付くようなユースケースはまさに合っていそうです。