専門家の共有 | Alluxio 監査ログ分析システムの構築方法

この記事の著者:Geng Yuntao

この記事の著者: Ge Dali

ビッグデータ技術は日々変化しており、データレイク、データミドルプラットフォーム、論理データレイク、データウィービング、データオーケストレーションなどのデータ構築概念が出現し、深化し続けています.ビジネスレベルでのデータガバナンスの目標を達成します。

どのような種類のデータ構築の概念においても、データ セキュリティは避けられないトピックであり、データ セキュリティの保証は、データ プラットフォームを本当に提供できるかどうかの入り口でもあります。

一般に、データ セキュリティは、認証、承認、監査、および暗号化の 4 つの側面から展開されます。ユーザーの身元は認証によって保証され、厳密な承認によってデータ アクセスのプライバシーを保護し、データ アクセス レコードを監査し、不正アクセスの可能性を発見し、暗号化によってデータ ストレージの永続性とデータ伝送リンクの基本的なセキュリティを確保できます。

データ セキュリティの各側面は非常に幅広いトピックです. この記事では、主に Alluxio 監査の実践的な実践と、監査の観点からの注意事項を共有します.

クラウドネイティブのデータ オーケストレーション プラットフォームとして、Alluxio は、異種インフラストラクチャ環境 (ローカル、ハイブリッド クラウド、パブリック クラウド) に直面したときに、効率的な統合データ管理とオーケストレーションを実現し、ビッグ データと AI アプリケーションを提供できます。レイク、データ ミドル プラットフォーム、論理データ レイク、データ ウィービングなどのデータ プラットフォームの構築により、企業/組織がマルチプラットフォーム ハイブリッド アーキテクチャ、データの断片化、プラットフォーム適応の複雑さなどの問題を解決するのを支援します。技術の変化によって. 良い助け.

Alluxio は、多くの場合、新しいデータ プラットフォーム アーキテクチャ上の統合データ アクセス インターフェイス サービス レイヤーとして存在し、Alluxio のオーケストレーション機能に依存して、さまざまな地域やさまざまなテクノロジに散在するデータ ストレージ プラットフォームの統合インターフェイスとメタデータを上位層のコンピューティング/アプリケーションに実現します。統合. 同時に、Alluxio に基づいて、統合されたデータ ガバナンス機能をさらに構築し、データの断片化の問題を効果的に解決し、アプリケーションの観点からデータの統一されたビューと統一された標準を確保できます。

データ プラットフォームの統合アクセス インターフェイス サービス レイヤーとして、Alluxio はデータのすべての読み取りおよび書き込み動作を実行します. データ アクセス ポータルとして、Alluxio はユーザーのデータ アクセス動作を記録し、これらのユーザー動作のその後の監査をサポートします. 特に重要になります.

Alluxio の監査ログ分析システムの構築について説明する前に、すぐに答えられる質問を 2 つ聞いてみましょう:
1. データ レイク内の 3PB のデータは頻繁にアクセスされていますか? この 1 週間で、何か変化はありましたか? 2.これらのデータ
を使用しているユーザーは? これらの使用法は合法ですか? データの内容、フォーマット、および永続化サイクルを変更したい場合、影響を受けるのは誰ですか?

上記の 2 つの質問に対する答えは、監査ログに隠されています. 監査ログは、各ユーザーが毎回要求する情報を完全に記録できます. この情報は、発生した事実であり、有効な検証であり、管理構成を補足します. 監査ログでは、上記の2つの質問に真に答えるために、分析システムが必要です. 分析システムは、上記の質問に隠された指標を分析して表示するために使用されます. 監査ログ分析システムの全体的なアーキテクチャは次のとおりです. :

1. Alluxio 監査ログ

Alluxio の監査ログは、システム全体のデータ ソースの性質上存在します。Alluxio は監査ログ機能をサポートし、Leader Master は監査ログを通じてユーザーの行動を記録し、監査、問題の遡及分析、ユーザーの行動分析、およびホット データとコールド データの分析のニーズを満たします。監査ログはリーダー マスターにのみ記録されますが、Alluxio マスターが切り替えられる可能性があるため、どのマスターでも監査ログが生成される可能性があり、これを収集して分析する必要があります。

2. 監査ログ分析システム

監査ログ分析システムには、主にログの収集、ログの保存、ログの分析と表示、および可能なログ管理モジュールが含まれます。その中でも、ログ収集はデータソースに適応させる必要があります. Alluxio の監査ログはログファイルであるため、一般的に Alluxio マスターの隣に収集エージェントを配置することで実装されます. ログストレージモジュールはさまざまな方法で実装できます.ログの詳細なビュー、ログ統計分析のストレージとコンピューティングのニーズを満たす必要があります; ログ分析および表示モジュールは、ユーザーのニーズに基づいてデータのクエリと表示をトリガーできる視覚化機能を提供する責任があります; ログ管理モジュールは主に、データのクリーニング、変換などを通じて可能なデータを解決する責任があります。品質の問題。ログに品質の問題がない場合、このモジュールは省略できます。

監査ログ分析システムの技術的解決策には、さまざまな技術的オプションがあり、主に一般的に使用される 2 つのオプションがあります。

  • Flume+Hive/HDFS+Impala/Presto + カスタム分析および表示システム

Flume はログ収集エージェントの実装と HDFS への監査ログの収集を担当し、Hive/HDFS+Impala/Presto はログの保存とクエリの計算を担当し、カスタム分析および表示システムは、オンデマンドでログのさまざまな分析と表示のニーズを実現します。

このソリューションの利点は、より柔軟でオープンであることです. Hive/HDFS ストレージは、より柔軟なデータ ガバナンスとデータ計算/分析のニーズだけでなく、よりカスタマイズされたデータ構造とストレージ形式を運ぶことができます。

Hive/HDFS に書き込む必要があり、対応するデータ変換などが必要なため、このソリューションの適時性は比較的低く、時間レベルの分析などの時間指定バッチ モードで一般的に使用されます。

  • ELK(Elasticsearch+Logstash+Kibana)

ELK は広く使用されているオープン ソースのログ管理ソリューションです. Logstash は、ログ収集エージェントの実装を担当し、監査ログを Elasticsearch に収集します. Elasticsearch は、非常に優れた検索エンジンとして、書き込まれたログの検索と分析などのクエリと計算の要件を実現できます; Kibana ログのビジュアル分析機能を提供し、ES の関連インターフェースを呼び出して、ログ検索とダッシュボード表示を実現します。

ELK ソリューションの利点は、すべてのコンポーネントがオープン ソースであり、システム レベルでの追加の開発が不要であり、ログ形式と分析のニーズに従って構成するだけで済みます。さらに、Elasticsearch は非常に優れた OLAP エンジンでもあるため、ELK は適時性が高く、データが書き込まれた後、データのさまざまな分析ニーズを実現できます。

同時に、ELK ソリューションも固定コンポーネントの選択によって制限されます. Elasticsearch は検索と OLAP 分析のニーズをサポートできますが、一部のバッチ分析、アルゴリズム分析などはサポートできません.データ構造を変更し、再構築します。インデックス作成も実装が面倒です。

要約すると, 2つのソリューションには長所と短所があります. 監査ログ分析システムの技術的ソリューションを選択する方法は、通常、既存のプラットフォームの構築状況と監査ログ分析シナリオのニーズを組み合わせます. 以下に従うことをお勧めします.次の原則:

  • 既存の技術コンポーネントを最大限に活用し、新しい技術コンポーネントの導入はできるだけ少なくします。新しいコンポーネントの導入により、リソースから運用および保守に至る一連の新しいワークロードがもたらされます. 結局、展開から運用および保守の監視まで、多くの作業を行う必要があります. 既存の技術システムを可能な限り再利用することは、効果的に削減することができます.リソースの消費と運用と保守のコスト複雑さ。
  • 監査ログの保存と分析を、データ プラットフォームの全体的な構築と統合します。監査ログも企業・組織にとって非常に重要なデータであり、特に監査ログの分析は、ログのアーカイブや再生だけでなく、分析価値の高いデータ資産であるため、全体の構築と統合することを推奨します。データ プラットフォーム 企業/組織のデータ レイクおよびデータ ウェアハウス構築の一環として一緒に。

導入の詳細

  1. Alluxio は監査ログ機能を有効にします
alluxio.master.audit.logging.enabled=true

2. ログファイル形式

###日志路径
alluxio_home/logs/master_audit.log

2022-09-21 06:24:11,736 INFO  AUDIT_LOG - succeeded=true        allowed=true    ugi=root,root (AUTH=SIMPLE)     ip=/172.31.19.156:54274 cmd=getFileInfo src=/default_tests_files/BASIC_NON_BYTE_BUFFER_CACHE_ASYNC_THROUGHd
st=null perm=root:root:rw-r--r--        executionTimeUs=90                                                                                                                                                                
2022-09-21 06:24:11,737 INFO  AUDIT_LOG - succeeded=true        allowed=true    ugi=root,root (AUTH=SIMPLE)     ip=/172.31.19.156:54274 cmd=getFileInfo src=/default_tests_files/BASIC_CACHE_ASYNC_THROUGH      dst=null  p
erm=root:root:rw-r--r-- executionTimeUs=82

3.flume をダウンロードして構成する

pro.sources = s1                                                                                                                                                                                                          
pro.channels = c1                                                                                                                                                                                                         
pro.sinks = k1                                                                                                                                                                                                            

pro.sources.s1.type = exec                                                                                                                                                                                                
pro.sources.s1.command = tail -F  -c +0 /mnt/alluxio/log/master_audit.log                                                                                                                                                

pro.sources.s1.interceptors = i1                                                                                                                                                                                          
pro.sources.s1.interceptors.i1.type = search_replace                                                                                                                                                                      

#多个空格替换成 | 统一数据分割符                                                                                                                                                                                 
pro.sources.s1.interceptors.i1.searchPattern = \\s+                                                                                                                                                                       
pro.sources.s1.interceptors.i1.replaceString = |                                                                                                                                                                          
pro.sources.s1.interceptors.i1.charset = UTF-8                                                                                                                                                                            

pro.channels.c1.type = memory                                                                                                                                                                                             
pro.channels.c1.capacity = 1000                                                                                                                                                                                           
pro.channels.c1.transactionCapacity = 100                                                                                                                                                                                 


pro.sinks.k1.hdfs.useLocalTimeStamp = true                                                                                                                                                                                
pro.sinks.k1.type = hdfs                                                                                                                                                                                                  
pro.sinks.k1.hdfs.path = hdfs://ip-172-31-25-105.us-west-2.compute.internal:8020/flume/daytime=%Y-%m-%d                                                                                                                   
pro.sinks.k1.hdfs.filePrefix = events-                                                                                                                                                                                    
pro.sinks.k1.hdfs.fileType = DataStream                                                                                                                                                                                   
pro.sinks.k1.hdfs.round = true                                                                                                                                                                                            
pro.sinks.k1.hdfs.roundValue = 10                                                                                                                                                                                         
pro.sinks.k1.hdfs.minBlockReplicas=1                                                                                                                                                                                      
pro.sinks.k1.hdfs.roundUnit = minute                                                                                                                                                                                      


pro.sources.s1.channels = c1                                                                                                                                                                                              
pro.sinks.k1.channel = c1

4.ハイブが外部パーティションテーブルを作成

CREATE EXTERNAL TABLE IF NOT EXISTS auditlogs(
day string,
time string,
loglevel string,
logtype string,
reserved string,
succeeded string,
allowed string,
ugi string,
ugitype string,
ip string,
cmd string,
src string,
dst string,
perm string,
exetime string
)PARTITIONED BY (daytime string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' 
STORED AS TEXTFILE;

5. データをハイブ外部テーブルにコピーする

hdfs dfs -cp /flume/daytime=2022-09-21 /user/hive/warehouse/logsdb.db/auditlogs

6.Hive クエリの結果

 

予防:

Alluxio 監査ログの形式は key=value であり、データの区切り文字は統一されていません (1 つの空白文字と複数の空白文字を含む)。そのため、flume はカスタム インターセプターを介して監査ログを処理し、冗長なフィールドを削除し、区切り文字を統一する必要があります。テスト ケースでは、Flume に組み込まれている search_replace インターセプターのみを使用します。

詳細情報: Alluxio
監査ログ形式: https://docs.alluxio.io/os/user/stable/cn/operation/Security.html Flume
HDFS シンク: https://flume.apache.org/FlumeU serGuide.html # hdfs-sinkフライムインターセプター
: https://flume.apache.org/FlumeUserGuide.html#flume-interceptors

Alluxio のドライな記事、人気のあるイベント、専門家の共有について詳しく知りたい場合は、[Alluxio Think Tank]をクリックして入力してください。

{{o.name}}
{{m.name}}

おすすめ

転載: my.oschina.net/u/5904778/blog/5591039