大規模監査ログの効率的な保存と管理(OVEN)
2025年1月23日
はじめに
監査ログ (Audit Log) は、システムのセキュリティ、透明性、そして規制遵守の観点で重要な役割を果たします。特に金融、医療、公共機関のように機密データを取り扱う分野では、監査ログの最低保存期間が 5年以上に設定されることが多く、保存および管理に対する要求がさらに重要となっています。例えば、大手金融機関では 1日に数百万件の監査ログが生成され、これを数年間保存するためにはテラバイト (TB) を超える膨大なストレージが必要です。このような大容量ログ管理の必要性は日増しに高まっています。
課題
従来のログ管理システムには以下のような課題があります。
1. 保存の課題
ログデータが継続的に増加する中で、データベースストレージの拡張が必要となり、高い運用コストや管理の複雑化を引き起こします。
2. 検索の課題
大規模なログデータを迅速かつ効率的に検索することが難しく、分析や規制遵守に必要な情報の抽出が遅れる可能性があります。
3. 外部連携の非効率性
大容量のログデータを効果的に分析するためには、外部の OLAP ストレージにデータを取り込むための ETL 作業が必要です。この追加作業は、開発コストや運用の負担を増加させる原因となっています。
ソリューション
QueryPie は、大容量監査ログを効果的に保存、検索、管理するために、以下の目標を設定しました。
1. 大容量ログを効率的に保存
S3 のようなオブジェクトストレージと連携し、ログデータを効率的に保存します。
2. 外部連携の効率向上
外部 S3 に保存されたデータは、外部 OLAP との連携や検索が容易になる形式で保存します。
外部 OLAP ストレージにデータを適切に取り込むため、データ形式は OLAP ストレージに最適化されています。
3. 必要最小限の機能提供
監査ログの特性を考慮し、必要な機能のみを提供し、不必要な機能は排除します。
監査ログは保存後に修正されず、明示的な削除も不要です。
保存および検索機能のみを提供します。
監査ログは時系列順で保存され、時間範囲内でのリスト検索機能のみを提供します。
詳細説明

監査ログ管理に必要な機能のみを提供
監査ログは保存後に変更されず、明示的な削除も必要ありません。したがって、保存と検索機能のみを提供します。
保存 (WRITE)
監査ログは、速い書き込み性能を持つ HotStore に保存されます。
保存されたログは一定期間経過後、ColdStore に時間単位でまとめて移動します。
検索 (READ)
監査ログを検索します。
検索は、時間範囲内でリストに対する検索機能のみを提供します。
内部の保存空間に依存しない一貫した検索機能を外部に抽象化して提供します。
大容量ログを効率的に保存するため、BLOB ストレージと連携
ColdStore に移動されたログは、内部の Cabinet Blob ストレージに保存されます。
Cabinet は Blob ストレージとして、S3 などのオブジェクトストレージと連携してログデータを保存します。
Blob ストレージに保存された監査ログは、WORM(Write Once Read Many)特性を持っており、保存されたログデータは変更できず、検索のみが可能です。
検索および外部連携のためのデータ保存形式
監査ログでは、ロググループ名と保存された時系列時間情報が最も重要で、検索時には必須の情報となります。
大容量のログデータを保存し、検索する際には、一般的に使用されるパスベースのパーティショニングを使用して、検索および外部連携を容易にします。
collection=${COLLECTION}/date=${DATE}{HOUR}.gzロググループ名
${COLLECTION}
時間
${DATE}: ログが保存された日付
${HOUR}: ログが保存された時間
例
collection test-log
保存されたログ: 2024年1月1日 19:00:00 〜 2024年1月2日 01:00:00 (UTC)
Collection | Date | Hour |
|---|---|---|
collection=test-log/ | date=2024-01-02/ | 01.gz |
02.gz | ||
date=2024-01-01/ | 23.gz | |
22.gz | ||
21.gz | ||
20.gz | ||
19.gz |
上記のパスベースのパーティショニングは、外部 OLAP ストレージと連携してログデータを効率的に検索するための方法です。
以下は、Athena を使用して S3 に保存された Diary ログを直接検索および分析する例です。
Athena連携およびクエリ例
Example: S3に保存されたDiaryログのAthena連携テーブル作成例
CREATE EXTERNAL TABLE test_log ( `record_uuid` STRING, `created_at` STRING, `data` STRUCT< msg: STRING, time: STRING, level: STRING, request_id: STRING, operation_id: STRING > ) PARTITIONED BY ( `date_created` STRING ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://${S3_BUCKET_ROOT_PATH}/collection=test-log/' TBLPROPERTIES ( 'classification' = 'json', 'compressionType' = 'gzip', 'projection.enabled' = 'true', 'projection.date_created.type' = 'date', 'projection.date_created.format' = 'yyyy-MM-dd', 'projection.date_created.interval' = '1', 'projection.date_created.interval.unit' = 'DAYS', 'projection.date_created.range' = '2024-12-01, NOW', 'storage.location.template' = 's3://${S3_BUCKET_ROOT_PATH}/collection=test-log/date=${date_created}/' );