Movatterモバイル変換


[0]ホーム

URL:


developersIOproduced by Classmethod

Amazon AthenaでELBのログを調査するときに使ったSQL

Amazon AthenaでELBのログを調査するときに使ったSQL

2017.08.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

今まではログの調査の際にはS3にあるELBのログをローカルに落としてgrepしたりしてましが、Athenaを使ってログを解析してみましたので今回は調査のときに使ったSQLをご紹介します。ご紹介するSQLを使えばあとは少し変えるだけでいろいろな調査が可能かと思います。

Athenaデータベース、テーブルの準備

Athenaを使用する際の手順は以下ブログを参考にしてください。

Amazon AthenaでELBログをSQLで解析する #reinvent

調査に使用したSQL

ELB毎のリクエスト数を調べる

SELECT elb_name,count(*) AS request_countFROM elb_logsGROUP BY elb_nameORDER BY request_count DESC;

特定の時間内でのリクエスト数を調べる

SELECT elb_name,count(*) AS request_countFROM elb_logsWHERE request_timestamp >= '2017-07-24T00:00:00Z'AND request_timestamp < '2017-07-24T23:59:59Z' GROUP BY elb_name ORDER BY request_count DESC; ``` ### 特定の時間内でのリクエスト数を調べる(ELBを絞る) ``` SELECT elb_name, count(*) AS request_count FROM elb_logs WHERE elb_name LIKE 'elb名' AND request_timestamp >= '2017-07-24T00:00:00Z'AND request_timestamp < '2017-07-24T23:59:59Z' GROUP BY elb_name ORDER BY request_count DESC; ``` ### ELBの5XXレスポンスを調べる ELB毎にどのくらいHTTPCode_Backend_5XXレスポンスが発生したか確認できます。 ``` SELECT elb_name, backend_response_code, count(*) AS request_count FROM elb_logs WHERE backend_response_code >= '500'GROUP BY backend_response_code, elb_nameORDER BY backend_response_code, elb_name;

ELBの5XXレスポンスを調べる(ELBを絞る)

ELBを絞ってHTTPCode_Backend_5XXレスポンスが発生したか確認できます。

SELECT elb_name,backend_response_code,count(*) AS request_countFROM elb_logsWHERE elb_name LIKE 'elb名'AND backend_response_code >= '500'GROUP BY backend_response_code, elb_nameORDER BY backend_response_code, elb_name;

ELBの5XXレスポンスを調べる(ELB,時間を絞る)

時間を絞りHTTPCode_Backend_5XXレスポンスが発生したか確認できます。

SELECT elb_name,backend_response_code,count(*) AS request_countFROM elb_logsWHERE elb_name LIKE 'elb名'AND backend_response_code >= '500'AND request_timestamp >= '2017-07-24T00:00:00Z'AND request_timestamp < '2017-07-24T23:59:59Z' GROUP BY backend_response_code, elb_name ORDER BY backend_response_code, elb_name; ``` ### ELBの5XXレスポンスを調べる(url,elb_response_codeも表示させる) カウントしてsortしているのでURLを特定することができます。 ``` SELECT count(*) AS request_count, elb_name, url, elb_response_code, backend_response_code FROM elb_logs WHERE elb_name LIKE 'elb名' AND backend_response_code >= '500'AND request_timestamp >= '2017-07-24T00:00:00Z'AND request_timestamp < '2017-07-24T23:59:59Z' GROUP BY elb_name,url,elb_response_code,backend_response_code ORDER BY request_count DESC limit 10; ``` ### ELBの5XXレスポンスを調べる(urlも絞る) 複数のドメインがある場合に使用しました。 ``` SELECT count(*) AS request_count, elb_name, url, elb_response_code, backend_response_code FROM elb_logs WHERE elb_name LIKE 'elb名' AND backend_response_code >= '500'AND url LIKE 'https://ドメイン:443/パス/%'AND request_timestamp >= '2017-07-24T00:00:00Z'AND request_timestamp < '2017-07-24T23:59:59Z' GROUP BY elb_name,url,elb_response_code,backend_response_code ORDER BY request_count DESC limit 10; ``` ### ELBの5XXレスポンスを調べる(url,user_agentも絞る) 特定のuser_agentを絞って確認したときに使用しました。 ``` SELECT count(*) AS request_count, elb_name, url, elb_response_code, backend_response_code, user_agent FROM elb_logs WHERE elb_name LIKE 'elb名' AND backend_response_code >= '500'AND url LIKE 'https://ドメイン:443/パス/%'AND user_agent LIKE '%ユーザーエージェント%'AND request_timestamp >= '2017-07-24T00:00:00Z'AND request_timestamp < '2017-07-24T23:59:59Z' GROUP BY elb_name,url,elb_response_code,backend_response_code,user_agent ORDER BY request_count DESC limit 10; ``` ### ELBのログを時系列で表示させる(時間,urlを絞る) 調査対象のログを時系列で確認する際に使用しました。 ``` SELECT elb_name, url, request_timestamp, elb_response_code, backend_response_code, user_agent FROM elb_logs WHERE elb_name LIKE 'elb名' AND url LIKE '%ドメイン%' AND user_agent LIKE 'https://ドメイン:443/パス/%' AND request_timestamp >= '2017-07-24T00:00:00Z'AND request_timestamp < '2017-07-24T23:59:59Z' GROUP BY elb_name,url,request_timestamp,elb_response_code,backend_response_code,user_agent ORDER BY request_timestamp limit 10; ``` ### リクエストの多いIPアドレスを確認 ``` SELECT request_ip, count(*) AS request_count FROM elb_logs WHERE elb_name LIKE 'elb名' AND request_timestamp >= '2017-07-24T00:00:00Z'AND request_timestamp < '2017-07-24T23:59:59Z' GROUP BY request_ip ORDER BY request_count DESC limit 5; ``` ### リクエストの多いIPアドレスを確認(urlも表示) ``` SELECT request_ip, url, count(*) AS request_count FROM elb_logs WHERE elb_name LIKE 'elb名' AND request_timestamp >= '2017-07-24T00:00:00Z'AND request_timestamp < '2017-07-24T23:59:59Z'GROUP BY request_ip,urlORDER BY request_count DESC limit 5;

まとめ

Athenaを使ってログを調べてみましたのでSQLをご紹介しました。実行結果は載せませんでしたがみなさんも実際に使ってみてください。

この記事をシェアする

FacebookHatena blogX

EVENTS

セミナー一覧会社説明会一覧勉強会一覧

関連記事

re:Growth 2025 大阪で「 今年のデータ・ML系アップデートと気になるアプデのご紹介」というタイトルで登壇しました #AWSreInvent #cmregrowth
nayu.t.s
2025.12.13
もうSQL文に悩まない!Claude Code + Athena で自然言語によるログ解析をやってみた
M.Shimizu
2025.12.11
[re:Growth 2025 札幌] 「AWS re:Invent 2025 Data & AI Updates: 3つの潮流から読み解く、データ戦略の未来」というタイトルで登壇しました! #regrowth_sapporo #AWSreInvent
石川覚
2025.12.08
[レポート][Code talk] Athenaを用いたコスト最適化のライブセッションに参加しました #COP401 #AWSreInvent
やまたつ
2025.12.03

[8]ページ先頭

©2009-2025 Movatter.jp