このトピックでは、さまざまなシナリオで複数の宛先ログストアにデータを配布する方法について説明します。 これらのシナリオには、動的分散、アカウント間分散、動的アカウント間分散、およびマルチソース動的分散が含まれます。
背景情報
Log Serviceのデータ変換機能を使用すると、データ変換結果を複数の宛先ログストアに配信できます。 データ変換結果を保存するときに、異なるアカウントのAccessKeyペアを設定できます。 これにより、これらのアカウントのLogstoreにデータ変換結果を配布できます。 e_outputまたはe_coutput関数を使用して、ターゲットプロジェクトとLogstoreを動的に設定し、データ変換結果をこれらのLogstoreに配信することもできます。
クロスアカウント配布シナリオでは、データ変換の結果を、異なるアカウントに属する最大20のログストアに配布できます。
e_output関数を使用して、ログデータを指定されたLogstoreに送信できます。 この場合、ログデータが指定されたLogstoreに送信された後、後続の変換ルールはログデータに対して有効になりません。 後続の変換ルールを使用してログデータを変換する場合は、e_output関数をe_coutput関数に置き換えることができます。 詳細は、「e_outputおよびe_coutput」をご参照ください。 次のシナリオでは、e_output関数を使用してログデータの配布方法を説明します。
シナリオ1: クロスアカウント配布
たとえば、WebサイトのすべてのアクセスログエントリがLogstoreに保存されているとします。 ログエントリのhttp_statusフィールドの値に基づいて、異なるアカウントのログストアにログエントリを配布します。
このシナリオでは、データ変換機能を使用してログエントリを配布できます。
生のログエントリ:
http_host: example.com http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https http_host: example.org http_status: 301 request_method: POST request_uri: /data/data.php scheme: http http_host: example.net http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https http_host: aliyundoc.com http_status: 504 request_method: GET request_uri: /data/index.html scheme: https
配布要件
http_statusフィールドの値が2XXであるログエントリをtarget0としてLogstore0に保存し、ログエントリのトピックをsuccess_eventに設定します。
http_statusフィールド値が3XXであるログエントリをtarget1としてLogstore1に保存し、ログエントリのトピックをredirection_eventに設定します。
http_statusフィールド値が4XXであるログエントリをtarget2としてLogstore2に保存し、ログエントリのトピックをauthorized_eventに設定します。
http_statusフィールド値が5XXのログエントリをtarget3としてLogstore3に保存し、ログエントリのトピックをinternal_server_error_eventに設定します。
target0として保存されているログエントリはアカウントAに属し、target1、target2、target3として保存されているログエントリはアカウントBに属します。
変換ルール:
e_switch(e_match("status", r"2\d+"), e_set("__topic__", "success_event"), e_match("status", r"3\d+"), e_compose(e_set("__topic__", "redirection_event"), e_output("target1")), e_match("status", r"4\d+"), e_compose(e_set("__topic__", "unauthorized_event"), e_output("target2")), e_match("status", r"5\d+"), e_compose(e_set("__topic__", "internal_server_error_event`"), e_output("target3")) )
ストレージターゲット
[データ変換ルールの作成] ページで、ストレージターゲットを設定します。 ストレージターゲットのパラメーターについては、「データ変換ジョブの作成」をご参照ください。
ラベル
ストレージターゲット
宛先プロジェクトとLogstore
AccessKey
1
target0
Project0とLogstore0
アカウントAのAccessKeyペア
2
target1
Project1とLogstore1
アカウントBのAccessKeyペア
3
target2
Project2とLogstore2
アカウントBのAccessKeyペア
4
target3
Project3とLogstore3
アカウントBのAccessKeyペア
結果:
## The log entries whose http_status field value is 2XX are distributed to Logstore0 of Account A. __topic__: success_event http_host: example.com http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https ## The log entries whose http_status field value is 3XX are distributed to Logstore1 of Account B. __topic__: redirection_event http_host: example.org http_status: 301 request_method: POST request_uri: /data/data.php scheme: http ## The log entries whose http_status field value is 4XX are distributed to Logstore2 of Account B. __topic__: unauthorized_event http_host: example.net http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https ## The log entries whose http_status field value is 5XX are distributed to Logstore3 of Account B. __topic__: internal_server_error_event http_host: aliyundoc.com http_status: 504 request_method: GET request_uri: /data/index.html scheme: https
シナリオ2: 動的分布
たとえば、WebサイトのすべてのアクセスログエントリがLogstoreに保存されているとします。 ログエントリのprojectフィールドとlogstoreフィールドに基づいて、ログエントリを異なるlogstoreに配布します。
このシナリオでは、データ変換機能を使用してログエントリを配布できます。
生のログエントリ:
__tag__:type: dynamic_dispatch host: example.aliyundoc.com project: Project1 logstore: Logstore1 http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https __tag__:type: dynamic_dispatch host: demo.aliyundoc.com project: Project1 logstore: Logstore2 http_status: 301 request_method: POST request_uri: /data/data.php scheme: http __tag__:type: dynamic_dispatch host: learn.aliyundoc.com project: Project2 logstore: Logstore1 http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https __tag__:type: dynamic_dispatch host: guide.aliyundoc.com project: Project2 logstore: Logstore2 http_status: 504 request_method: GET request_uri: /data/index.html scheme: https
配布要件
projectフィールドとlogstoreフィールドの値に基づいてログエントリを配布します。
__tag :__ typeフィールドを各ログエントリに追加し、フィールドの値をdynamic_dispatchに設定します。
変換ルール:
e_output(project=v("project"), logstore=v("logstore"), tags={"type": "dynamic_dispatch"})
e_output関数は、各ログエントリからprojectフィールドとlogstoreフィールドの値を抽出し、値に基づいて各ログエントリを配布します。
ストレージターゲット
[データ変換ルールの作成] ページで、ストレージターゲットを設定します。
説明このシナリオでは、ターゲットプロジェクトとlogstoreは、e_output関数のprojectパラメーターとlogstoreパラメーターの設定に基づいて決定されます。 これらのプロジェクトとLogstoreは、[データ変換ルールの作成] ページでデフォルトのストレージターゲット (ラベル1) を格納するように設定したターゲットプロジェクトとLogstoreとは無関係です。
結果:
## Log entry that is distributed to Logstore1 of Project1. __tag__:type: dynamic_dispatch host: example.aliyundoc.com project: Project1 logstore: Logstore1 http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https ## Log entry that is distributed to Logstore2 of Project1. __tag__:type: dynamic_dispatch host: demo.aliyundoc.com project: Project1 logstore: Logstore2 http_status: 301 request_method: POST request_uri: /data/data.php scheme: http ## Log entry that is distributed to Logstore1 of Project2. __tag__:type: dynamic_dispatch host: learn.aliyundoc.com project: Project2 logstore: Logstore1 http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https ## Log entry that is distributed to Logstore2 of Project2. __tag__:type: dynamic_dispatch host: guide.aliyundoc.com project: Project2 logstore: Logstore2 http_status: 504 request_method: GET request_uri: /data/index.html scheme: https
シナリオ3: 動的クロスアカウント配布
たとえば、WebサイトのすべてのアクセスログエントリがLogstoreに保存されているとします。 ログエントリのプロジェクトフィールドとログストアフィールドに基づいて、異なるアカウントのログストアにログエントリを配布します。
このシナリオでは、データ変換機能を使用してログエントリを配布できます。
生のログエントリ:
host: example.aliyundoc.com project: Project1 logstore: Logstore1 http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https host: demo.aliyundoc.com project: Project1 logstore: Logstore2 http_status: 301 request_method: POST request_uri: /data/data.php scheme: http host: learn.aliyundoc.com project: Project2 logstore: Logstore1 http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https host: guide.aliyundoc.com project: Project2 logstore: Logstore2 http_status: 504 request_method: GET request_uri: /data/index.html scheme: https
配布要件
projectフィールドとlogstoreフィールドの値に基づいて、異なるアカウントのプロジェクトとlogstoreにログエントリを配布します。 宛先プロジェクトには、Project1とProject2が含まれます。 Project1には、Logstore1とLogstore2という名前の2つのLogstoreが含まれ、アカウントAに属します。Project2には、Logstore1とLogstore2という名前の2つのLogstoreが含まれ、アカウントBに属します。
変換ルール:
e_switch(e_match(v("project"), "Project1"), e_output(name="target1", project=v("project"), logstore=v("logstore")), e_match(v("project"), "Project2"), e_output(name="target2", project=v("project"), logstore=v("logstore")))
ストレージターゲット
[データ変換ルールの作成] ページで、ストレージターゲットを設定します。 ストレージターゲットのパラメーターについては、「データ変換ジョブの作成」をご参照ください。
説明このシナリオでは、ターゲットプロジェクトとlogstoreは、e_output関数のprojectパラメーターとlogstoreパラメーターの設定に基づいて決定されます。 これらのプロジェクトとLogstoreは、[データ変換ルールの作成] ページでデフォルトのストレージターゲット (ラベル1) を格納するように設定したターゲットプロジェクトとLogstoreとは無関係です。
ラベル
ストレージターゲット
宛先プロジェクトとLogstore
AccessKey
1
target0
Project0とLogstore0
なし
2
target1
e_output関数によってランダムに選択
アカウントAのAccessKeyペア
3
target2
e_output関数によってランダムに選択
アカウントBのAccessKeyペア
結果:
## Log entry that is distributed to Logstore1 of Project1 that belongs to Account A. host: example.aliyundoc.com project: Project1 logstore: Logstore1 http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https ## Log entry that is distributed to Logstore2 of Project1 that belongs to Account A. host: demo.aliyundoc.com project: Project1 logstore: Logstore2 http_status: 301 request_method: POST request_uri: /data/data.php scheme: http ## Log entry that is distributed to Logstore1 of Project2 that belongs to Account B. host: learn.aliyundoc.com project: Project2 logstore: Logstore1 http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https ## Log entry that is distributed to Logstore2 of Project2 that belongs to Account B. host: guide.aliyundoc.com project: Project2 logstore: Logstore2 http_status: 504 request_method: GET request_uri: /data/index.html scheme: https
シナリオ4: マルチソース動的配布
たとえば、ゲームをアドバタイズし、ゲームのすべてのAPIリクエストのログエントリをLogstoreに保存するとします。 ユーザーエージェントのリクエストヘッダーを解析し、ユーザーエージェントのリクエストヘッダーに基づいて、iOS、Android、およびWindowsプラットフォームからのリクエストのログエントリを配布します。 また、request_methodフィールドに基づいて広告のコンバージョン率を分析します。
このシナリオでは、データ変換とクエリ機能を使用してログエントリを配布できます。
生のログエントリ:
__source__:127.0.0.0 __tag__:__receive_time__: 1589541467 ip:10.0.0.0 request_method: GET user_agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
配布要件
Logstore1にtarget1としてWindowsユーザーからのリクエストのログエントリを保存します。
iOSユーザーからのリクエストのログエントリをLogstore2にtarget2として保存します。
AndroidユーザーからのリクエストのログエントリをLogstore3にtarget3として保存します。
変換ルール:
このシナリオでは、ua_parse_os関数を使用してuser_agentフィールドを解析し、dct_get関数を使用してuser_agentリクエストヘッダーからオペレーティングシステムの情報を取得できます。 次に、e_set関数を使用してosフィールドを各ログエントリに追加し、e_output関数とe_if関数を使用してログエントリを配布できます。 osフィールドの値は、オペレーティングシステムの情報である。
e_set("os", dct_get(ua_parse_os(v("user_agent")),"family")) e_if(e_search("os==Windows"),e_output(name="target1")) e_if(e_search("os=iOS"),e_output(name="target2")) e_if(e_search("os==Android"),e_output(name="target3"))
ストレージターゲット
[データ変換ルールの作成] ページで、ストレージターゲットを設定します。 ストレージターゲットのパラメーターについては、「データ変換ジョブの作成」をご参照ください。
ラベル
ストレージターゲット
宛先プロジェクトとLogstore
1
target0
Project0とLogstore0
2
target1
Project1とLogstore1
3
target2
Project2とLogstore2
4
target3
Project3とLogstore3
ログのクエリと分析
ターゲットLogstoreのログデータをクエリして、広告のコンバージョン率を取得できます。 次のクエリ結果は、Androidユーザーの広告コンバージョン率が高いことを示しています。 ログデータのクエリ方法の詳細については、「ログのクエリと分析」をご参照ください。
Logstore2の [検索と分析] ページで、次のクエリステートメントを実行して、iOSユーザーからのGETリクエストとPOSTリクエストの比率を取得します。
* | SELECT Request_method, COUNT(*) as number GROUP BY Request_method
Logstore3の [検索と分析] ページで、次のクエリステートメントを実行して、AndroidユーザーからのGETリクエストとPOSTリクエストの比率を取得します。
* | SELECT Request_method, COUNT(*) as number GROUP BY Request_method