LoginSignup
2
0

More than 1 year has passed since last update.

AWSのCloudWatch Logs Insights使い方まとめ

Last updated at Posted at 2022-05-31

CloudWatch Logs Insightsとは

CloudWatch Logsのログデータをクエリを使って検索したり解析ができます。
ログデータを解析する機会が多いので、よく使うクエリをまとめておきます。

初期表示

1653982209.png

fields @timestamp, @message
| sort @timestamp desc
| limit 20

意味:fieldsで指定した@timestamp, @messageを表示。@timestampの降順でソートして先頭からの20件。

@でログイベントのフィールドを指定します。

ログイベント一覧

@message :InputLogeventのmessageフィールド。
@timestamp : timestamp フィールドに含まれるイベントタイムスタンプ。InputLogeventのtimestampフィールド。
@ingestionTime:CloudWatch Logs によって受信された時間。
@logStream:ログイベントの追加先のログストリームの名前。ログストリームは、生成時と同じプロセスでログをグループ化します。
@log:ロググループ識別子。

AWS公式:サポートされるログと検出されるフィールド 

コマンド一覧

コマンド 説明
display クエリ結果に表示するフィールドを指定します。
fields 指定したフィールドをログイベントから取得して表示します。
filter クエリの結果を1つ以上の条件に基づいてフィルタリングします。
sort 取得したログイベントをソートします。
stats ログフィールドの値に基づいて集約統計を計算します。
limit クエリから返されるログイベントの数を指定します。
parse ログフィールドからデータを抽出し、1 つ以上のエフェメラルフィールドを作成してクエリでさらに処理できるようにします。

fields

ログ一覧に指定した項目を表示する。

fields @timestamp, @message, path

連結もできる。
domain フィールドと path フィールドの値がハイフンで連結してurlとして表示

fields concat(domain, '/', path) as url

filter

クエリの結果を1つ以上の条件に基づいてフィルタリング。さまざまな演算子など使える。
比較演算子 (=、!=、<、<=、>、>=) とブール演算子 (and、or、および not)

AWS公式:フィルターコマンドの一致と正規表

in (not in)

fields @timestamp, @message 
    | filter statusCode in [300,400,500]
    | filter statusCode not in [200,0]

like(not like)

fields @timestamp, @message 
	| filter @message like  "一致したい文字"
	| filter @message like  /正規表現パターンと一致たい文字/
	| filter @message like  /E*/ #ワイルドカード使用して部分一致
	| filter @message not like "Exception"

sort

昇順 (asc) と降順 (desc) で並び順を指定する。

例)f1で降順にソート

fields f1, f2, f3 
	| sort f1 desc

limit

クエリから返されるログイベントの数を指定。
制限を指定しない場合、クエリにはデフォルトで最大1000行表示される。

例)@timestampで降順にソートして、最初の 25 件のイベントの f1 フィールドと f2 フィールドを表示

sort @timestamp desc 
| limit 25  
| display f1, f2

stats

ログフィールドの値に基づいて集約統計を計算する。
stats コマンドに「by」 を付けることで、条件を1つ以上指定できる。統計データは、指定の条件でグループ化できる。
stats コマンドでは、sum()、avg()、count()、min()、および max() の演算子が使える。

例)例外が発生したレコードの数をカウント

fields @timestamp, @message 
	|  stats count(*) by errorCode, errorMessage 

コメントアウト

クエリ内でのコメントは#を使用する

fields @timestamp, @message
    # | filter @message like /delay/
    | limit 20

使用例

ステータスが500のログを検索

fields @timestamp, @message
| filter @message like /"status": "500"/ 
| sort @timestamp desc

ステータスが500のログでpathに特定の文字が入ったログを検索

fields @timestamp, @message
| filter @message like /"status": "500"/ 
| filter @message like /candidate/ 
| sort @timestamp desc

ドメイン指定pathに特定の文字が入ったログを検索

fields @timestamp, @message
| filter domain = "api.sample.com" 
| filter @message like /userRequest/ 
| sort @timestamp desc

ステータスが500のログでpathとリクエストに特定の文字が入っているログを検索

fields @timestamp, @message
| filter @message like /"status": "500"/ 
| filter @message like /chatform/ 
| filter req like /zipcode/ 
| sort @timestamp desc

まとめ

Logs Insightsが使えるようになると、問題が発生した時、ただやみくもにログを調べて未解決事件になりかねないことも
簡単に原因が見つかって解決してしまうことがよくあります。
とても便利な機能なので、参考にしていただけると幸いです。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0