VPC環境で利用できます。
Object Storage バケットアクセスログの活用
データクエリを使用して収集された Object Storageバケットアクセスログデータを分析できます。
この例は Object Storageバケットアクセスログデータを様々なテンプレートクエリで分析し、Business Intelligence(BI)ツールで可視化するプロセスを説明します。
機能のサマリー
- スキャナーを通じたテーブル作成 - データに対するテーブル化 by Data Catalog
- クエリ実行と結果確認 by Data Query
- BI連携による可視化 by Data Query
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ビジネスロジックと統合できます。
- CLI ご利用ガイド: CLI接続と使用方法
- JDBC ご利用ガイド: DB Toolと BIの接続をサポート
- SDK ご利用ガイド: ユーザー Applicationを統合
- 外部 BI接続ガイド: Superset、Zeppelinなどの BIと統合
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連携ガイドをご参照ください。
- 例: アクセス量トレンドチャート、時間帯別トラフィック分析、上位リクエストオブジェクトダッシュボードなど
