コピペで使えるELBのアクセスログ解析による事象分析 (ShellScript, Athena)

アクセスログ解析

ELBのアクセスログの事象分析について、ShellScriptとAthenaを用いた実行例についてまとめます。

ShellScript

NLB

No.1 : 最も多いリクエスト元のクライアントIPアドレスのリクエスト数

$ gunzip -dc * | awk '{print $6}' | awk -F ":" '{print $1}' | sort | uniq -c | sort -r| head -n 10

No.2 : 時間毎のリクエスト数

$ gunzip -dc * | awk '{print substr($3,0,13)}' | sort | uniq -c | awk '{print $2, $1}'

No.3 : 分単位でのリクエスト数

$ gunzip -dc * | awk '{print substr($3,0,16)}' | sort | uniq -c | awk '{print $2, $1}'

No.4 : TLSでクライアントが最も使った暗号スイートのランキング

$ gunzip -dc * | awk '{print $15}' | sort | uniq -c | sort -nr | head -5

No.5 : TLSでクライアントが最も使ったTLSバージョンのランキング

$ gunzip -dc * | awk '{print $16}' | sort | uniq -c | sort -nr | head -5

No.6 : TLSでクライアントが最も使ったプロトコルと暗号スイートのランキング

$ gunzip -dc * | awk '{print $15 " " $16}' | sort | uniq -c | sort -nr | head

No.7 : received_bytesとsent_bytesの大きさ別の分布

  • received_bytes

  • sent_bytes

No.8 : リクエスト・レスポンス合計のサイズの平均

No.9 : ログ毎のファイルの行数

No.10 : クライアント別リクエスト数

No.11 : NLB IPアドレス別リクエスト数

No.12 : connection_timeが5秒以上のレコード一覧

No.13 : tls_handshake_timeが1秒以上のレコード一覧

ALB

No.1 : レスポンスが正常に受け取れていないELBのレスポンスコード毎のカウント

No.2 : ELBのレスポンスコード毎の数集計

No.3 : ELBのレスポンスコードとバックエンドのレスポンスコードの組み合わせ毎の数集計

No.4 : ELBのレスポンスコードとバックエンドのレスポンスコードの組み合わせ毎の数集計(ファイル別)

No.5 : ELBのレスポンスコードとバックエンドのレスポンスコードの組み合わせ毎の数集計(分単位)

No.6 : ELB 504のレコード一覧

No.7 : ELBが504時のクライアント順

No.8 : 504がどのHTTPリクエストで多く出力されているか

No.9 : バックエンドから正常に応答が受け取れていない時

No.10 : request_processing_time の3つの統計値(最小値、最大値、平均)と -1 の値を取った回数

No.11 : target_processing_time の3つの統計値(最小値、最大値、平均)と -1 の値を取った回数

No.12 : response_processing_time の3つの統計値(最小値、最大値、平均)と -1 の値を取った回数

No.13 : 最も多いリクエスト元のクライアントIPアドレスのリクエスト数

No.14 : 時間毎のリクエスト数

No.15 : 分単位でのリクエスト数

No.16 : ユーザーエージェント毎のランキング

No.17 : TLSでクライアントが最も使った暗号スイートのランキング

No.18 : TLSでクライアントが最も使ったTLSバージョンのランキング

No.19 : TLSでクライアントが最も使ったプロトコルと暗号スイートのランキング

No.20 : received_bytesとsent_bytesの大きさ別の分布

  • received_bytes

  • sent_bytes

No.21 : リクエスト・レスポンス合計のサイズの平均

No.22: ログ毎のファイルの行数

No.23 : クライアント別リクエスト数

No.24 : バックエンド別リクエスト数

No.25 : バックエンド(IP:Port)毎のリクエスト数(分単位)

No.26 : リクエストされるURLランキング

No.27 : target_processing_timeが5秒以上のレコード一覧

No.28 : backend_processing_timeが5秒以上のレコード一覧(リクエスト別集計)

CLB

No.1 : レスポンスが正常に受け取れていないELBのレスポンスコード毎のカウント

No.2 : ELBのレスポンスコード毎の数集計

No.3 : ELBのレスポンスコードとバックエンドのレスポンスコードの組み合わせ毎の数集計

No.4 : ELBのレスポンスコードとバックエンドのレスポンスコードの組み合わせ毎の数集計(ファイル別)

No.5 : ELBのレスポンスコードとバックエンドのレスポンスコードの組み合わせ毎の数集計(分単位)

No.6 : ELB 504のレコード一覧

No.7 : ELBが504時のクライアント順

No.8 : 504がどのHTTPリクエストで多く出力されているか

No.9 : バックエンドから正常に応答が受け取れていない時

No.10 : request_processing_time の3つの統計値(最小値、最大値、平均)と -1 の値を取った回数

No.11 : backend_processing_time の3つの統計値(最小値、最大値、平均)と -1 の値を取った回数

No.12 : response_processing_time の3つの統計値(最小値、最大値、平均)と -1 の値を取った回数

No.13 : 最も多いリクエスト元のクライアントIPアドレスのリクエスト数

No.14 : 時間毎のリクエスト数

No.15 : 分単位でのリクエスト数

No.16 : ユーザーエージェント毎のランキング

No.17 : TLSでクライアントが最も使った暗号スイートのランキング

No.18 : TLSでクライアントが最も使ったTLSバージョンのランキング

No.19 : TLSでクライアントが最も使ったプロトコルと暗号スイートのランキング

No.20 : received_bytesとsent_bytesの大きさ別の分布

  • received_bytes

  • sent_bytes

No.21 : リクエスト・レスポンス合計のサイズの平均

No.22: ログ毎のファイルの行数

No.23 : クライアント別リクエスト数

No.24 : バックエンド別リクエスト数

No.25 : バックエンド(IP:Port)毎のリクエスト数(分単位)

No.26 : リクエストされるURLランキング

No.27 : backend_processing_timeが5秒以上のレコード一覧

No.28 : backend_processing_timeが5秒以上のレコード一覧(リクエスト別集計)

Athena

以下、全て CLB を前提とします。 また、以下のような、デフォルトで生成されている sampledb データベースの elb_logs テーブルを使用します。

HTTPステータスコードが200のレコード一覧

ELB毎のリクエスト数

ELB毎のリクエスト数(期間指定)

ELB毎のリクエスト数(期間+ELB 指定)

ELB毎の5XXエラーのリクエスト数

ELB毎の5XXエラーのリクエスト数(ELB指定)

ELB毎の5XXエラーのリクエスト数(期間+ELB 指定)

ELB毎の5XXエラーのリクエスト数(期間+ELB+URL 指定)

ELB毎の5XXエラーのリクエスト数(期間+ELB+URL+UserAgent 指定)

送信元IPのリクエスト数ランキング

日付ごとのリクエスト数

直近1年の500エラー発生のリクエスト数

レスポンスに1.0s以上時間がかかっているリクエスト

任意のエントリ取得(期間+リクエスト元IP 指定)

あるページからの遷移先ページ傾向

参考

ELB アクセスログ

Access Logs for Your Network Load Balancer - Elastic Load Balancing https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-access-logs.html Application Load Balancer のアクセスログ - Elastic Load Balancing https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-log-entry-syntax Classic Load Balancer のアクセスログ - Elastic Load Balancing https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/access-log-collection.html#access-log-entry-syntax

Athena

Querying Classic Load Balancer Logs - Amazon Athena https://docs.aws.amazon.com/ja_jp/athena/latest/ug/elasticloadbalancer-classic-logs.html Querying Application Load Balancer Logs - Amazon Athena https://docs.aws.amazon.com/athena/latest/ug/application-load-balancer-logs.html

Amazon AthenaでELBのログを調査するときに使ったSQL https://dev.classmethod.jp/cloud/amazon-athena-sql-for-elb/ Amazon AthenaでELBログをSQLで解析する #reinvent https://dev.classmethod.jp/cloud/aws/amazon-athena-sql-elb-log-reinvent/ Amazon Athenaではじめるログ分析入門 https://qiita.com/miyasakura_/items/174dc73f706e8951dbdd

Last updated