こんにちは、屋根裏エンジニアこと 技術1課の折戸です。
前回に引き続きS3ログを集計する方法について、
今回は その② 少し複雑な条件で集計したい
場合の方法についてご紹介します。
集計対象や事前準備については、前回の記事をご覧ください。
集計条件
今回は HTTPレスポンスのステータスコードの件数を200と404に分けて一度に集計 とします。
少し複雑な条件に対応するため、Athenaのクエリを使って集計します。
その② 少し複雑な条件で集計したい
Athena クエリ結果の場所用のS3バケットを作成
Athenaを利用するためには、クエリの結果を保存するS3バケットが必要です。
任意のバケット名でS3バケットを作成してください。
手順は割愛させていただきます。
Athena クエリ結果の場所を設定
上記手順で作成したS3バケットを設定します。
Amazon Athena > クエリエディタ > 設定
管理
クリック
S3を参照
クリック
S3バケットを選択
選択
クリック
保存
クリック
Athena データベースを作成
Amazon Athena > クエリエディタ > エディタ
クエリ1
にクエリを入力
CREATE DATABASE mydatabase;
実行
クリック
Athena テーブルを作成
データ > データベース
mydatabase
を選択
クエリ1
に以下のクエリを入力
CREATE EXTERNAL TABLE apache_logs( client_ip string, client_id string, user_id string, request_received_time string, client_request string, server_status string, returned_obj_size string ) ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe' WITH SERDEPROPERTIES ( 'input.format'='^%{IPV4:client_ip} %{DATA:client_id} %{USERNAME:user_id} %{GREEDYDATA:request_received_time} %{QUOTEDSTRING:client_request} %{DATA:server_status} %{DATA: returned_obj_size}$' ) STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://【S3ログが保存されているバケット名】/';
※ 【S3ログが保存されているバケット名】 は
クエリの結果の保存先ではなく、 集計対象のS3ログの保存先を指定します。
実行
クリック
Athena SELECT クエリを実行
クエリ1
に以下のクエリを入力
SELECT SUM(CASE WHEN server_status = '200' THEN 1 ELSE 0 END) AS OK, SUM(CASE WHEN server_status = '404' THEN 1 ELSE 0 END) AS NOT_FOUND FROM apache_logs;
実行
クリック
集計結果表示
結果 のフィールドにステータスコード200と404の件数がそれぞれ表示されます。
S3 Select同様、結果をダウンロード
をクリックすることで、CSV形式のファイルをダウンロードすることも可能です。
以上となります。
次回は集計して可視化する方法についてご紹介します。
それでは。