全部產品
Search
文件中心

Simple Log Service:多目標Logstore資料分發

更新時間:Jun 30, 2024

本文介紹多目標Logstore資料分發的各種情境(動態分發、跨帳號分發、跨帳號動態分發、複雜情境動態分發等)及操作步驟。

背景資訊

Log Service資料加工功能支援將加工結果分發到多個目標Logstore中。您可以在儲存資料加工結果時,設定不同帳號的AccessKey資訊,將加工結果分發到不同帳號的Logstore中;您也可以使用e_output函數、e_coutput函數動態擷取目標Project和Logstore,將加工結果分發到不同的Logstore中。

說明
  • 最多跨20個帳號分發加工結果。

  • 如果您使用的是e_output函數,則通過e_output函數輸出日誌到指定的Logstore後,對應的日誌不再執行後面的加工規則。如果您希望輸出日誌到指定的Logstore後,對應的日誌還能繼續執行後面的加工規則,可使用e_coutput函數。更多資訊,請參見e_output、e_coutput。本文以e_output函數為例。

情境1:跨帳號分發

例如:某網站所有的訪問日誌儲存在一個Logstore中,現在希望將不同狀態的日誌分發儲存到不同帳號下的Logstore中。

針對上述需求,您可以通過Log Service資料加工功能解決。

  • 原始日誌

    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_status2XX的日誌儲存到儲存目標target0中的Logstore0中,並設定日誌主題為success_event

    • http_status3XX的日誌分發到儲存目標target1中的Logstore1中,並設定日誌主題為redirection_event

    • http_status4XX的日誌分發到儲存目標target2中的Logstore2中,並設定日誌主題為unauthorized_event

    • http_status5XX的日誌分發到儲存目標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"))
        )
  • 儲存目標

    建立資料加工任務面板中,配置儲存目標。更多資訊,請參見建立資料加工任務資料分發

    標號

    儲存目標

    目標Project和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資訊

  • 加工結果

    ## http_status為2XX的日誌,分發到帳號A下logstore0中。
    
    __topic__:  success_event
    http_host:  example.com
    http_status:  200
    request_method:  GET
    request_uri:  /pic/icon.jpg
    scheme:  https
    
    ## http_status為3XX的日誌,分發到帳號B中的Logstore1中。
    
    __topic__:  redirection_event
    http_host:  example.org
    http_status:  301
    request_method:  POST
    request_uri:  /data/data.php
    scheme:  http
    
    ##http_status為4XX的日誌,分發到帳號B中的Logstore2中。
    
    __topic__: unauthorized_event
    http_host:  example.net
    http_status:  404
    request_method:  GET
    request_uri:  /category/abc/product_id
    scheme:  https
    
    ## http_status為5XX的日誌,分發到帳號B中的Logstore3中。
    
    __topic__: internal_server_error_event
    http_host:  aliyundoc.com
    http_status:  504
    request_method:  GET
    request_uri:  /data/index.html
    scheme:  https

情境2:簡單情境動態分發

例如:某網站所有的訪問日誌儲存在一個Logstore中,現在希望根據project欄位和logstore欄位分發儲存到不同的Logstore中。

針對上述需求,您可以通過Log Service資料加工功能解決。

  • 原始日誌

    __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欄位的值進行日誌分發。

  • 儲存目標

    建立資料加工任務頁面中,設定預設儲存目標即可,用於儲存其他在加工過程中沒有被丟棄的日誌。

    說明

    此情境中,動態分發的目標Project和Logstore由e_output函數中的配置決定,與建立資料加工任務頁面中預設儲存目標(標號1)中配置的目標Project和Logstore無關。

    動態分發

  • 加工結果

    ## 分發到Project1下的Logstore1中。
    
    __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
    
    ## 分發到Project1下的Logstore2中。
    
    __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
    
    ## 分發到Project2下的Logstore1中。
    
    __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
    
    ## 分發到Project2下的Logstore2中。
    
    __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:跨帳號動態分發

例如:某網站所有的訪問日誌儲存在一個Logstore中,現在希望根據project欄位和logstore欄位動態分發日誌到不同帳號下的Logstore中。

針對上述需求,您可以通過Log Service資料加工功能解決。

  • 原始日誌

    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
  • 分發需求

    根據日誌中projectlogstore欄位的值的不同,進行動態分發,目標Project屬於不同的帳號,Project1(包含兩個Logstore:Logstore1、Logstore2)屬於帳號A,Project2(包含兩個Logstore:Logstore1、Logstore2)屬於帳號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")))
  • 儲存目標

    建立資料加工任務頁面中,配置儲存目標。更多資訊,請參見建立資料加工任務

    說明

    此情境中,目標Project和Logstore由e_output函數中的配置決定,與建立資料加工任務頁面中預設儲存目標(標號1)中配置的目標Project和Logstore無關。

    跨帳號動態分發

    標號

    儲存目標

    目標Project和Logstore

    AccessKey

    1

    target0

    Project0、Logstore0

    不涉及

    2

    target1

    任意選擇,由e_output函數決定分發目標。

    帳號A的AccessKey資訊

    3

    target2

    任意選擇,由e_output函數決定分發目標。

    帳號B的AccessKey資訊

  • 加工結果

    ## 分發到帳號A的Project1下的Logstore1中。
    
    host:  example.aliyundoc.com
    project: Project1
    logstore: Logstore1
    http_status:  200
    request_method:  GET
    request_uri:  /pic/icon.jpg
    scheme:  https
    
    ## 分發到帳號A的Project1下的Logstore2中。
    host:  demo.aliyundoc.com
    project: Project1
    logstore: Logstore2
    http_status:  301
    request_method:  POST
    request_uri:  /data/data.php
    scheme:  http
    
    ## 分發到帳號B的Project2下的Logstore1中。
    
    host:   learn.aliyundoc.com
    project: Project2
    logstore: Logstore1
    http_status:  404
    request_method:  GET
    request_uri:  /category/abc/product_id
    scheme:  https
    
    ## 分發到帳號B的Project2下的Logstore2中
    
    host:   guide.aliyundoc.com
    project: Project2
    logstore: Logstore2
    http_status:  504
    request_method:  GET
    request_uri:  /data/index.html
    scheme:  https

情境4:複雜情境動態分發

例如:某公司對一款遊戲投放了廣告,現在關於該遊戲的所有API請求資訊都儲存在一個Logstore中。該公司希望通過解析useragent要求標頭,將來自不同裝置(iOS、Android、Windows)的請求進行分發儲存,並對method方法進行資料分析擷取廣告轉化率。

針對上述需求,您可以通過Log Service資料加工和查詢分析功能解決。

  • 原始日誌

    __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
  • 分發需求

    • 將Windows使用者請求資訊分發儲存到儲存目標target1的Logstore1中。

    • 將iOS使用者請求資訊分發儲存到儲存目標target2的Logstore2中。

    • 將Android使用者請求資訊分發儲存到儲存目標target3的Logstore3中。

  • 加工規則

    本案例中,您可以使用ua_parse_os函數解析user_agent欄位,使用dct_get函數擷取要求標頭中的作業系統資訊,再使用e_set函數新增一個欄位os,值為作業系統資訊,然後使用e_output函數和條件函數進行動態分發。

    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"))
  • 儲存目標

    建立資料加工任務頁面中,配置儲存目標。更多資訊,請參見建立資料加工任務

    預設儲存目標

    標號

    儲存目標

    目標Project和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

      查詢分析