こんにちは、屋根裏エンジニアこと 技術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形式のファイルをダウンロードすることも可能です。
以上となります。
次回は集計して可視化する方法についてご紹介します。
それでは。