【用途別】S3ログを集計する方法 〜その② 少し複雑な条件で集計したい〜

記事タイトルとURLをコピーする

こんにちは、屋根裏エンジニアこと 技術1課の折戸です。

前回に引き続きS3ログを集計する方法について、
今回は その② 少し複雑な条件で集計したい 場合の方法についてご紹介します。

集計対象や事前準備については、前回の記事をご覧ください。

blog.serverworks.co.jp

集計条件

今回は HTTPレスポンスのステータスコードの件数を200と404に分けて一度に集計 とします。
少し複雑な条件に対応するため、Athenaのクエリを使って集計します。

その② 少し複雑な条件で集計したい

Athena クエリ結果の場所用のS3バケットを作成

Athenaを利用するためには、クエリの結果を保存するS3バケットが必要です。
任意のバケット名でS3バケットを作成してください。
手順は割愛させていただきます。

Athena クエリ結果の場所を設定

上記手順で作成したS3バケットを設定します。

f:id:swx-orito:20211224124650p:plain

Amazon Athena > クエリエディタ > 設定
管理 クリック

f:id:swx-orito:20211224131737p:plain

S3を参照 クリック

f:id:swx-orito:20211224125447p:plain

S3バケットを選択
選択 クリック

f:id:swx-orito:20211224131928p:plain 保存 クリック

Athena データベースを作成

f:id:swx-orito:20211224132212p:plain Amazon Athena > クエリエディタ > エディタ
クエリ1 にクエリを入力

CREATE DATABASE mydatabase;

実行 クリック

Athena テーブルを作成

f:id:swx-orito:20211224133522p:plain データ > データベース
mydatabase を選択

f:id:swx-orito:20211224133934p:plain

クエリ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 クエリを実行

f:id:swx-orito:20211224134626p:plain クエリ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;

実行 クリック

集計結果表示

f:id:swx-orito:20211224134743p:plain 結果 のフィールドにステータスコード200と404の件数がそれぞれ表示されます。

S3 Select同様、結果をダウンロード をクリックすることで、CSV形式のファイルをダウンロードすることも可能です。

以上となります。

次回は集計して可視化する方法についてご紹介します。

それでは。

折戸 亮太(執筆記事の一覧)

2021年10月1日入社
クラウドインテグレーション部技術1課

屋根裏エンジニア