本文介紹多目標Logstore數據分發的各種場景(動態分發、跨賬號分發、跨賬號動態分發、復雜場景動態分發等)及操作步驟。
背景信息
日志服務數據加工功能支持將加工結果分發到多個目標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中。
針對上述需求,您可以通過日志服務數據加工功能解決。
原始日志
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中,并設置日志主題為unauthorized_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")) )
存儲目標
在創建數據加工任務面板中,配置存儲目標。更多信息,請參見創建數據加工任務。
標號
存儲目標
目標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中。
針對上述需求,您可以通過日志服務數據加工功能解決。
原始日志
__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中。
針對上述需求,您可以通過日志服務數據加工功能解決。
原始日志
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字段的值的不同,進行動態分發,目標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方法進行數據分析獲取廣告轉化率。
針對上述需求,您可以通過日志服務數據加工和查詢分析功能解決。
原始日志
__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