はじめに
上記で生成したログをCloudWatch Logs Insightsを使って分析してみます。
細かい解説はしませんが、実際に「テストデータ(100件)がどんな感じで分析できるのか」「本番環境のログ分析行うためのアイデア」程度に眺めてもらえれば嬉しいです。
2024-11-16T12:17:23.252+09:00
Sample log entry at 2024-11-16T03:17:23.252405: status=INFO, message='This is a test log', IP=186.139.154.218
2024-11-16T12:17:24.354+09:00
Sample log entry at 2024-11-16T03:17:24.354606: status=WARN, message='This is a test log', IP=131.127.200.53
2024-11-16T12:17:25.377+09:00
Sample log entry at 2024-11-16T03:17:25.377620: status=WARN, message='This is a test log', IP=174.92.5.202
AWS管理コンソール画面
①:ロググループを選択してください
②:ログの範囲(時間指定)を選択してください
③:実行するクエリを入力してください
クエリの構文
AWSの公式ドキュメントを参照ください。
この程度は覚えたい
項目 | 説明 |
---|---|
fields | クエリ結果に表示するフィールド |
filter | クエリのフィルタリング条件 |
sort | 返されたログイベントを昇順(asc)または降順(desc)でのソート順 |
limit | 結果の件数(sortと併用することで上位/最新の10件などが取得可能) |
parse | クエリで処理できるようにする抽出フィールドの作成 (変数みたいなイメージ) |
stats | フィールドの値を使って集計が可能 |
|(パイプ) | 複数のコマンドをつなぐ |
# | コメント |
タイムスタンプの降順に10件抽出
Query
fields @timestamp, @message, @logStream, @log
| sort @timestamp desc
| limit 10
タイムスタンプとIPアドレスとステータスのみを出力(ERRORのみ)
Query
fields @timestamp
| parse @message /IP=(?<IP>[^ ]*)/
| parse @message "status=*," as status
| filter status = "ERROR"
ステータス別の件数を抽出
件数のカウントは実用的で便利そう
Query
fields @timestamp, @message
| parse @message "status=*," as status
| stats count(*) by status
IPアドレス別の件数を抽出
今回自動で生成したIPアドレスが全て重複なしだったので、全てcountは1でした。
※自分でデータを生成する場合はランダムIPの範囲を調節すれば良い。
正規表現を使った parse の場合は (?<IP>...)
のような構文で自動的にフィールド名を付けているため、as IP は必要無いみたい。
Query
fields @timestamp, @message
| parse @message /IP=(?<IP>[^ ]*)/
| stats count(*) by IP
IPアドレスを指定してWARNステータスだけを抽出
Query
fields @timestamp, @message
| parse @message /IP=(?<IP>[^ ]*)/
| filter IP = "80.114.147.217" and @message like /WARN/
| display @timestamp, @message, IP
おわりに
CloudWatch Logs Insightsでさくっとクエリが書けると便利そうですね!