大數據

SLS【數據加工】實現數據彙總與分發

簡介

【數據加工】是一個可託管、高可用、可擴展的數據處理服務,廣泛適用於數據的規整、富化、分發、彙總、重建索引等場景。這裡詳細介紹如何通過數據加工實現數據的分發與彙總,從而實現統一存儲管理或分類精細化查詢分析,以及存儲成本優化等目的。

分發與彙總

場景

數據分發

從源 logstore 中讀取數據,進行加工後,根據給定條件分別輸出到多個不同的目標 logstore 中。
分發.png

數據彙總

將多個源 logstore 中讀取數據,彙集到同一個目標 logstore 中。需要在每一個源 logstore 中配置一個數據加工任務。
彙總.png

跨賬號數據流轉

通過數據加工實現跨賬號數據流轉,主要涉及的問題是如何授權:RAM 賬號授權、STS 角色授權。請參考另一篇文章 SLS【數據加工】授權配置

跨區域數據流轉

跨區域數據流轉支持直接走公網,也可以選擇阿里雲 DCDN。請參考 數據加工 - 跨Region傳輸功能介紹

相關算子

  1. e_output/e_coutput:輸出事件,不再繼續加工。e_coutput 會對數據進行拷貝
  2. e_keep/e_drop:指定條件,保留/丟棄事件
  3. e_search:事件檢查,輸入查詢語句,比如 e_search("field=value")
  4. e_if/e_if_else/e_switch:流程控制

案例

我們的測試服務器部署在上海和北京,對應的訪問日誌採集到了上海區域的 project/logstore:test-app-sh/access-log,和北京區域的project/logstore:test-app-bj/access-log,數據保存時間是30天。訪問日誌樣例如下:

{
  "__time__": 1607655081,
  "bytes_sent": "666",
  "host": "xxxx.com.cn",
  "hostname": "xxxx.ali.dm",
  "http_referer": "https,//xxxx.com.cn/",
  "http_user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36",
  "remote_addr": "10.0.0.0",
  "remote_user": "-",
  "request_method": "GET",
  "request_protocol": "HTTP/1.1",
  "request_time": "0.035",
  "request_trace_id": "xxxx-9092-7974215498-0-1596182547.188",
  "request_uri": "/xxx/type?id=203298390015668&name=yyyy",
  "status": "200",
  "time_local": "11/Dec/2020,10,51,21",
  "upstream_addr": "10.0.0.0,8080"
}

我們需要實現兩個目標:

  1. 將北京區域的訪問日誌彙集到上海的 logstore,做統一存儲和查詢分析,需要標記日誌的service區域“app-bj”
  2. 拆分出返回狀態碼 status 為4xx(客戶端錯誤)和5xx(服務端錯誤)的訪問日誌,保存到獨立的 logstore 中,保存時間分別為90天和180天,以保證能夠長時間檢索。

彙集北京的數據到上海 logstore

在北京的logstore:test-app-bj/access-log 配置數據加工,腳本為:

e_set("__service__", "app-bj")
e_output("logstore-sh")

保存配置為:
C346D6CA-31D5-4DF8-9519-C0B48F4D0E1B.png

這裡的“目標名稱”與 e_output 所填的名稱保持一致,project/logstore 選定為上海數據存儲的logstore。
數據彙集後,在上海logstore可看到:
2B857FAB-60D6-4400-8FBC-3CEBC2C8E38D.png

分發錯誤訪問日誌

在access-log中,可以看到status字段的統計信息如下圖,可以看出我們的數據中,返回4xx和5xx的數據佔比是很小的(這是模擬數據,實際線上業務會更小),也就是說只有很少一部分數據需要長期存儲。所以,根據時間條目重要程度將其分發,並做差異化存儲,除了可以做精細分析,還可以實現存儲成本優化。
0C8AB4D3-3570-4DD7-B85F-418839A15524.png

在上海的 logstore:test-app-bj/access-log 配置數據加工,腳本如下:

  1. 首先判斷事件是否滿足status>=500,如果滿足則直接輸出到目標access-5xx
  2. 否則繼續往下執行,判斷事件是否滿足status>=400,如果滿足則直接輸出到目標access-4xx
  3. 如果都沒有滿足,則丟棄事件(不會輸出到任何目標)
e_if(e_search("status>=500"), e_output("access-5xx"))
e_if(e_search("status>=400"), e_output("access-4xx"))
e_drop()

加工完成以後的數據如下圖,在 logstore:access-5xx 裡面,只保存返回狀態碼為5xx的訪問日誌。
87962448-B5FC-40BC-B89A-8615067BBACC.png

後記

以上就是使用 SLS【數據加工】功能,實現數據的分發和彙集的詳細步驟。如果您在使用 SLS 過程中有任何問題,請加入我們釘釘服務群,也歡迎關注 SLS 的微信技術公眾號和B站視頻號。

QR.png

Leave a Reply

Your email address will not be published. Required fields are marked *