はじめに
AWSのサービスを利用しているとログを確認したい時があると思います。
CloudWatchのログは「CloudWatch > ロググループ > ログストリーム」から見ることができますが、「ログのインサイト」を使うともっと便利に検索することができてます。
注意点
CloudWatch Logs Insights クエリには、クエリされるデータの量に基づいて料金が発生します。大量のログをスキャンする場合は注意です!
東京リージョン 2024/06/27時点
分析 (Logs Insights のクエリ) スキャンしたデータ:1 GB あたり USD 0.0076
詳しくはこちら
メニュー
AWSのCloud Watchのサイドメニュー「ロググループ」の少し下にある「ログのインサイト」から見ることができます。
「Logs Insights」の画面
1:ロググループを参照
見たいロググループをダイアログから選びます
2:ローカルタイムゾーン
デフォルトはUTCになっています。UTCである必要がなければローカルタイムゾーンに変更しましょう
3:範囲
つまずきポイント!
デフォルトは直近の1時間になっています。見たい範囲を選択しましょう
大量のログがある場合は広げすぎると利用料金に影響するので注意しましょう
4:クエリ
クエリを指定することでログを抽出・集計することができます。
5:クエリの実行
実行すると下部にクエリの結果が表示されます
クエリ
fields @timestamp, @message, @logStream, @log
| sort @timestamp desc
| limit 10000
コマンド(fieldsやsortなど)を” | ”パイプ文字でつないでクエリを組み立てます。
主なコマンド
filter
条件で抽出します。
fields
特定のフィールドを表示します。
sort
結果を昇順(asc)降順(desc)で並べ替えます。
limit
クエリ結果の最大件数を指定します。
pattern
パターンを分析します。
詳しくは公式サイトを参照ください。
クエリ構文はこちら
簡単な条件指定の仕方
クエリの文法が分かっていても、最初はログにどんなフィールドがあって、どんな値が入っているかわからないかもしれません。
そんな場合は、一旦「クエリの実行」ボタンを押してログを一覧表示してみましょう。
何も表示されない場合は、範囲指定(「Logs Insights」スクショの③)を確認しましょう。
ログの一覧が表示されたら、適当なログイベント”▶︎”マークをクリックして内容を表示しましょう。フィールドと値が表示されます。
ここに表示されるフィールドは、そのまま「filter」コマンドの条件に使うことができます。
サンプル
条件指定のクエリ例
フィールド:requestContext.eventType
値:DISCONNECT
を抽出条件に指定した例
fields @timestamp, @message, @logStream, @log
| sort @timestamp desc
| limit 10000
| filter requestContext.eventType = "DISCONNECT"
@messageの中のJSON
大きなJSONでなければ、parseとかせずにそのまま指定することができます。
(filterコマンドの条件など)
階層があるものはドット指定します。
先ほどのサンプル
「requestContext.eventType = "DISCONNECT"」はJSONのキーと値です。
最後に
「ログのインサイト」は便利な機能ですが、範囲指定をしないと思うような結果を得られません。
そこさえ気をつければ、後は公式サイトを見ながら試行錯誤して必要な情報を得ることができるようになるでしょう。