Object Storage バケットアクセスログの活用

Prev Next

VPC環境で利用できます。

Object Storage バケットアクセスログの活用

データクエリを使用して収集された Object Storageバケットアクセスログデータを分析できます。
この例は Object Storageバケットアクセスログデータを様々なテンプレートクエリで分析し、Business Intelligence(BI)ツールで可視化するプロセスを説明します。

機能のサマリー


1.Object Storageバケットアクセスログの設定

Object Storageのバケットアクセスログに関する有効化と作成について確認できます。

バケットアクセスログの有効化

  • Object Storageサービスでバケットアクセスログを有効にすると、当該バケットのアクセス履歴をログファイルで保存できます。
  • このログデータは Data Queryサービスで分析対象として活用できます。
  • アクセスログ設定例
    項目 設定値
    バケット名 アクセスログを分析対象バケットに保存
    保存バケット アクセスログが保存されるバケット
    ログファイル Prefix bucket_access_log_
  • アクセスログ設定ガイドは、Object Storage ご利用ガイドをご参照ください。

アクセスログの作成

クライアントを通じて当該バケットにアクセスし、実際にアクセスログデータが作成されるようにします。

注意
  • アクセスログ保存バケットの選択時に、他のデータが含まれていない新しいバケットの使用をお勧めします。ログ以外の他のファイルがバケット内に混在する場合、テーブル作成と照会クエリが期待通りに動作しないことがあります。
  • アクセスログファイルはリアルタイムで作成されません。アクセスログの作成時点と周期は、Object Storage ご利用ガイドをご参照ください。

2.分析対象データテーブルの作成

データテーブルの作成(データに対するテーブル化)

  • データカタログサービスのスキャナー機能を使用して、Object Storageに保存されたデータを参照するソースデータテーブルを作成します。
  • 以下の設定例を参照して値を入力し、スキャン開始ボタンをクリックしてテーブルを追加します。
  • スキャナー設定例
    項目 設定値
    データタイプ Object Storage
    パス s3a://[アクセスログ設定で指定した保存バケット]/
    スキャン範囲 一部、10個
    実行周期 オンデマンド
    パターン 使用:含む、bucket_access_log_*
    パーティション設定 すべてのパーティションニング形式
    収集オプション テーブル定義のアップデート
    テーブル結合 True
    テーブル数制限 1
  • スキャナーに関する詳細は、Data Catalog ご利用ガイドをご参照ください。

データテーブル作成の確認

スキャナーによるテーブルの作成は、数秒~数分かかることがあります。左側のテーブルリストから検索を通じてアクセスログ設定で指定した保存バケット名のテーブルが作成されているか確認できます。

3.テンプレートクエリを利用したアクセスログデータ分析

提供されたテンプレートクエリを利用して、アクセスログ分析を実行します。コンソールエディタ、BI、CLIなどでクエリしたり、JDBC、SDKを使用してユーザー Applicationビジネスロジックと統合できます。

VIEWテーブルを作成

テンプレートクエリを使用するために、以下のクエリを実行して VIEWテーブルを作成します。VIEWテーブルを作成せずにスキャンされたデータテーブル名をテンプレートクエリに直接使用しても、同じ結果を確認できます。

CREATE OR REPLACE VIEW 
  "data_catalog"."default"."bucket_access_log"
AS SELECT *
FROM
  "data_catalog"."default"."scanned_table"; -- replace database/table name with yours

提供テンプレートクエリ

  • 特定期間のデータ照会(Range Query)
SELECT
  date_trunc('second', from_unixtime(CAST(timestamp_start AS BIGINT) / 1000.0) 
    AT TIME ZONE 'Asia/Seoul') AS log_time,
  remote_user,
  request_method,
  request_type,
  status,
  object_name,
  response_length
FROM
  data_catalog.default.bucket_access_log
WHERE
  from_unixtime(CAST(timestamp_start AS BIGINT) / 1000.0) AT TIME ZONE 'Asia/Seoul'
    BETWEEN TIMESTAMP '2025-01-01 00:00:00 Asia/Seoul'
        AND TIMESTAMP '2025-12-31 23:59:59 Asia/Seoul'
ORDER BY
  log_time;
  • 最も多くアクセスしたオブジェクト TOP 10
SELECT
  object_name,
  COUNT(*) AS access_count
FROM
  data_catalog.default.bucket_access_log
WHERE 
  object_name IS NOT NULL
GROUP BY
  object_name
ORDER BY
  access_count DESC
LIMIT 10;
  • 最も多くアクセスした remote_user(access_key区分を含む) TOP 10
SELECT
  remote_user,
  COUNT(*) AS request_count
FROM
  data_catalog.default.bucket_access_log
GROUP BY
  remote_user
ORDER BY
  request_count DESC
LIMIT 10;
  • HTTPステータスコード別のリクエスト分布
SELECT
  status,
  COUNT(*) AS request_count
FROM
  data_catalog.default.bucket_access_log
GROUP BY
  status
ORDER BY
  request_count DESC;
  • 10分単位のメソッド別リクエスト数
SELECT
  from_unixtime(floor(CAST(timestamp_start AS DOUBLE) / 1000.0 / 600.0) * 600.0)
    AT TIME ZONE 'Asia/Seoul' AS time_slot,
  request_method,
  COUNT(*) AS request_count
FROM
  data_catalog.default.bucket_access_log
GROUP BY
  1, request_method
ORDER BY
  1;
  • 時間帯別の最大トラフィック(Peak Time)
SELECT
  date_trunc('hour', from_unixtime(CAST(timestamp_start AS BIGINT) / 1000.0) 
    AT TIME ZONE 'Asia/Seoul') AS hour_slot,
  COUNT(*) AS access_count
FROM
  data_catalog.default.bucket_access_log
GROUP BY
  date_trunc('hour', from_unixtime(CAST(timestamp_start AS BIGINT) / 1000.0) 
    AT TIME ZONE 'Asia/Seoul')
ORDER BY
  access_count DESC
LIMIT 5;

BI活用例

作成したログデータテーブルとテンプレートクエリをベースに BIツール(Supersetなど)で可視化できます。外部 BI連携方法については、Data Query BI連携ガイドをご参照ください。

  • 例: アクセス量トレンドチャート、時間帯別トラフィック分析、上位リクエストオブジェクトダッシュボードなど

dataquery-example-obs-accesslog-bi.png