すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:複数の宛先ログストアにデータを配布する

最終更新日:Aug 28, 2024

このトピックでは、さまざまなシナリオで複数の宛先ログストアにデータを配布する方法について説明します。 これらのシナリオには、動的分散、アカウント間分散、動的アカウント間分散、およびマルチソース動的分散が含まれます。

背景情報

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に属し、target1target2target3として保存されているログエントリはアカウント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"))
        )
  • ストレージターゲット

    [データ変換ルールの作成] ページで、ストレージターゲットを設定します。 ストレージターゲットのパラメーターについては、「データ変換ジョブの作成」をご参照ください。Data distribution

    ラベル

    ストレージターゲット

    宛先プロジェクトと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とは無関係です。

    Dynamic distribution

  • 結果:

    ## 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とは無関係です。

    Dynamic cross-account distribution

    ラベル

    ストレージターゲット

    宛先プロジェクトと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"))
  • ストレージターゲット

    [データ変換ルールの作成] ページで、ストレージターゲットを設定します。 ストレージターゲットのパラメーターについては、「データ変換ジョブの作成」をご参照ください。

    Default storage target

    ラベル

    ストレージターゲット

    宛先プロジェクトと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

      Query and analysis result

    • Logstore3の [検索と分析] ページで、次のクエリステートメントを実行して、AndroidユーザーからのGETリクエストとPOSTリクエストの比率を取得します。

      * | SELECT Request_method, COUNT(*) as number GROUP BY Request_method

      Query and analysis result