このトピックでは、データ変換機能に関連する用語を紹介します。
基本的な用語
ETL
抽出、変換、およびロード (ETL) は、データがビジネスシステムから抽出され、クレンジングされ、変換され、ロードされるプロセスです。 このプロセスは、異なるソースからのデータを統合および標準化します。 Log Serviceは、ソースLogstoreからデータをロードし、データを変換してから、変換後のデータを宛先Logstoreに書き込むことができます。 Log Serviceは、Object Storage Service (OSS) バケット、ApsaraDB RDSインスタンス、またはその他のLogstoreからデータをロードすることもできます。
イベント、データ、ログ
データ変換では、イベントとデータはログで表されます。 たとえば、イベント時間はログ時間に相当し、
drop_event_fields
関数はログフィールドを破棄します。ログ時間
ログ時間は、イベントが発生した時点を示します。 ログ時間は、イベント時間とも呼ばれます。 ログ時間は、log Serviceの予約フィールド
__time__
で示されます。 このフィールドの値は、ログの時刻情報から抽出されます。 この値は、エポック時刻1月1日1970 00:00:00 UTCから経過した秒数を表すUNIXタイムスタンプです。 データ型: 整数。 単位は秒です。ログ受信時間
ログ受信時刻は、log Serviceのサーバーがログを受信した時点を示します。 デフォルトでは、この時間はログに保存されません。 ただし、LogstoreのLog Public IPを有効にすると、この時間はログタグフィールド
__receive_time__
に記録されます。 データ変換プロセスでは、このフィールドの完全な名前は__tag __:__ receive_time__
です。 この値は、エポック時刻1月1日1970 00:00:00 UTCから経過した秒数を表すUNIXタイムスタンプです。 データ型: 整数。 単位は秒です。説明ほとんどのシナリオでは、ログはリアルタイムでLog Serviceに送信され、ログ時間はログ受信時間と同じです。 履歴ログをインポートする場合、ログ時刻はログ受信時刻とは異なります。 たとえば、SDKを使用して過去30日間に生成されたログをインポートする場合、ログ受信時刻は現在時刻であり、ログ時刻とは異なります。
tag
ログにタグがあります。 各タグフィールドの先頭には
__tag __:
があります。 Log Serviceは2種類のタグをサポートしています。カスタムタグ: データを書き込むためにPutLogs操作を呼び出したときに追加するタグ。
システムタグ:
__client_ip__
および__receive_time__
など、Log Serviceによって追加されるタグ。
設定関連の用語
ソースLogstore
データ変換機能は、変換のためにソースLogstoreからデータを読み取ります。
データ変換タスクに設定できるソースLogstoreは1つだけです。 ただし、異なるデータ変換タスクに対して同じソースLogstoreを設定できます。
宛先ログストア
データ変換機能は、変換されたデータを宛先Logstoreに書き込みます。
データ変換タスク用に1つ以上の宛先ログストアを設定できます。 データは、静的または動的モードで宛先Logstoreに書き込むことができます。 詳細については、「複数の宛先ログストアへのデータの配布」をご参照ください。
DSL for Log Service
Log Serviceのドメイン固有言語 (DSL) は、Python互換のスクリプト言語であり、Log Serviceのデータ変換に使用されます。 DSL for Log ServiceはPythonの上に構築されています。 DSLは、一般的なデータ変換タスクを簡素化するために、200を超える組み込み機能を提供します。 DSLでは、カスタムPython拡張機能を使用することもできます。 詳細については、「言語紹介」をご参照ください。
変換ルール
変換ルールは、DSL for Log Serviceを使用して調整されるデータ変換スクリプトです。
データ変換タスク
データ変換タスクは、データ変換の最小スケジューリング単位である。 データ変換タスクのソースLogstore、1つ以上の宛先Logstore、変換ルール、変換時間範囲、およびその他のパラメーターを設定する必要があります。
ルール関連の用語
resource
リソースとは、データ変換中に参照されるサードパーティのデータソースを指します。 データソースには、オンプレミスリソース、Object Storage Service (OSS) 、ApsaraDB RDS、およびソースとターゲットのLogstore以外のLogstoreが含まれますが、これらに限定されません。 リソースは、データを強化するために参照され得る。 詳細については、「リソース関数」をご参照ください。
次元のテーブル
ディメンションテーブルには、データをエンリッチするために使用できるディメンション情報が含まれています。 ディメンションテーブルは外部テーブルです。 例えば、ディメンションテーブルは、ユーザ、製品、および会社の地理的位置の情報を含むことができる。 ほとんどのシナリオでは、ディメンションテーブルはリソースに含まれ、動的に更新されます。
エンリッチメントまたはマッピング
ログに含まれる情報が要件を満たさない場合は、ディメンションテーブルを使用してログに1つ以上のフィールドをマップし、詳細情報を取得できます。 このプロセスは、エンリッチメントまたはマッピングと呼ばれます。
たとえば、リクエストログには、HTTPステータスコードを指定するステータスフィールドが含まれています。 次の表を使用して、フィールドをstatus_descフィールドにマッピングし、HTTPステータスの説明を取得できます。
エンリッチメント前
濃縮後
status
status_desc
200
Success
300
Redirect
400
権限エラー
500
サーバーエラー
ソースログにuser_idフィールドが含まれている場合は、アカウントの詳細を含むディメンションテーブルを使用してフィールドをマップし、詳細情報を取得できます。 たとえば、各ユーザーIDのユーザー名、性別、登録時間、および電子メールアドレスを取得できます。 次に、情報をソースログに追加し、ログを宛先ログストアに書き込むことができます。 詳細については、「マッピングとエンリッチメント関数」をご参照ください。
イベント分割
ログに複数の情報が含まれている場合、ログは複数のログに分割できます。 このプロセスは、イベント分割と呼ばれる。
たとえば、ログには次の情報が含まれています。
__time__: 1231245 __topic: "win_logon_log" content: [ { "source": "192.0.2.1", "dest": "192.0.2.1" "action": "login", "result": "pass" },{ "source": "192.0.2.2", "dest": "192.0.2.1" "action": "logout", "result": "pass" } ]
ログは2つのログに分割できます。
__time__: 1231245 __topic: "win_logon_log" content: { "source": "192.0.2.1", "dest": "192.0.2.1" "action": "login", "result": "pass" }
__time__: 1231245 __topic: "win_logon_log" content: { "source": "192.0.2.2", "dest": "192.0.2.1" "action": "logout", "result": "pass" }
グロク
Grok はパターンを使用して複雑な正規表現を置き換えます。
たとえば、
grok("%{IPV4}")
パターンは、IPv4アドレスを一致させるために使用される正規表現を示し、"(?<![0-9])(?:(?:[0-1]?[0-9]{1,2}| 2[0-4][0-9]| 25[0-5])[.](?:[0-1]?[0-9]{1,2}| 2[0-4][0-9]| 25[0-5])[.](?:[0-1]?[0-9]{1,2}| 2[0-4][0-9]| 25[0-5])[.](?:[0-1]?[0-9]{1,2}| 2[0-4][0-9]| 25[0-5])(?![0-9])"
. 詳細については、「Grok関数」をご参照ください。正規表現を使用したコンテンツのキャプチャ
正規表現を使用して、指定したコンテンツをフィールドにキャプチャし、そのコンテンツを新しいフィールドに含めることができます。
たとえば、関数
e_regex("content", "(?P<email>[a-zA-Z][a-zA-Z][a-zA-Z0-9_.+-=:]+ @\w +\.com)")
は、content
フィールドからメールアドレスを抽出し、抽出したメールアドレスをemail
フィールドに含めます。 メールアドレス情報は、共通の正規表現を用いて抽出される。 正規表現を単純化するには、次のgrokパターンを使用することを推奨します。e_regex("content", grok("%{EMAILADDRESS:email}")
詳細については、「正規表現」をご参照ください。