日志服务数据加工最佳实践: 从其他logstore拉取数据做富化
概述
使用全局富化函數做富化時, 需要傳遞一個字典或者表格結構做富化. 參考構建字典與表格做數據富化的各種途徑比較.?
本篇介紹從使用資源函數res_log_logstore_pull從其他logstore拉取數據的做富化的詳細實踐.關于res_log_logstore_pull的參數說明, 參考這里. 該語法目前支持兩種模式去logstore拉取數據,一種是拉取指定時間間隔內的logstore 的數據內容,另外一種是不設置結束時間,持續的拉取目標logstore內容
背景
這里我們有兩個logstore,一個是存儲個人信息的source_logstore,一個是酒店存儲客人入住信息的target_logstore ,我們現在將酒店的入住信息拿來做富化。
注意: 這里采用pull_log接口拉取數據, 富化的logstore并不依賴索引.
個人信息 source_logstore
topic:xxx city:xxx cid:12345 name:makitopic:xxx city:xxx cid:12346 name:vickytopic:xxx city:xxx cid:12347 name:mary酒店入住信息logstore
time:1567038284 status:check in cid:12345 name:maki room_number:1111time:1567038284 status:check in cid:12346 name:vicky room_number:2222time:1567038500 status:check in cid:12347 name:mary room_number:3333time:1567038500 status:leave cid:12345 name:maki room_number:1111基本語法
res_log_logstore_pull(endpoint,ak_id,ak_secret,project,logstore,fields,from_time=None,to_time=None,fetch_include_data=None,fetch_exclude_data=None,primary_keys=None,delete_data=None,refresh_interval_max=60,fetch_interval=2):具體的參數說明請參考res_log_logstore_pull,需要注意的地方是,res_log_logstore_pull 是一個單獨的語法,只負責從目標logstore 拉取數據下來,本身自己并沒有做任何富化的操作,所以請不要單獨使用res_log_logstore_pull語法,結合e_table_map和e_search_table_map語句一起使用才是有意義的,本篇也會結合e_table_map和e_search_map_table的使用給出一些例子進行演示。
場景1:?獲取指定時間內所有的數據
注意: 這里的時間是日志獲取時間.
DSL編排語法
res_log_logstore_pull(..., ["cid","name","room_number"],from_time=1567038284,to_time=1567038500)獲取到的數據
#這里我們的語法中 field 填入了 cid,name,room_number 三個字段,,并且指定了時間范圍,將會獲取這個時間范圍內的logstore的所有數據的這三個字段的值cid:12345 name:maki room_number:1111cid:12346 name:vicky room_number:2222cid:12347 name:mary room_number:3333cid:12345 name:maki room_number:1111場景2: 設置黑白名單參數來過濾拉取的數據
1.DSL 編排語法(只設置白名單)
# 設置白名單,只有 room_number 值等于 1111的的數據會被拉去下來 res_log_logstore_pull(..., ["cid","name","room_number","status"],from_time=1567038284,to_time=1567038500,fetch_include_data="room_number:1111")獲取到的數據
# 設置了 ferch_include_data 白名單,只有包含 room_numver:1111的數據會被拉去下來,其他數據不會被拉取。status: check in cid:12345 name:maki room_number:1111status:leave cid:12345 name:maki room_number:11112.DSL 編排語法(只設置黑名單)
res_log_logstore_pull(..., ["cid","name","room_number","status"],from_time=1567038284,to_time=1567038500,fetch_exclude_data="room_number:1111")獲取到的數據
# 設置黑名單 fetch_exclude_data 當數據包含 room_number:1111的時候丟棄這條數據。 status:check in cid:12346 name:vicky room_number:2222status:check in cid:12347 name:mary room_number:33333.DSL編排語法(同時設置黑白名單)
res_log_logstore_pull(..., ["cid","name","room_number","status"],from_time=1567038284,to_time=1567038500,fetch_exclude_data="status:leave",fetch_include_data="status:check in")獲取到的數據
# 黑白名單同時存在的情況下,優先進行黑名單數據的匹配,這里我們填入的是 status:leave的值,當數據包含status:leave的值時候,數據會被直接丟棄,而后匹配白名單,白名單我們填入的是 status:check in 當數據包含 status: check in 的值時候,該數據才會被拉取下來. status:check in cid:12345 name:maki room_number:1111status:check in cid:12346 name:vicky room_number:2222status:check in cid:12347 name:mary room_number:3333場景3: 開通持續拉取目標logstore 數據
DSL編排語法
如果目標logstore 的數據是持續寫入,我們需要持續的去拉取時候,設置 to_time 參數為None 就可以,同時可以設置fetch_interval 設置拉取的時間間隔,和refresh_interval_max 當拉取遇到錯誤的時候退火重試的最大時間間隔
res_log_logstore_pull(..., ["cid","name","room_number","status"],from_time=1567038284,to_time=None,fetch_interval=15,refresh_interval_max=60) # 需要注意的是,在持續拉取的過程中,如果遇到錯誤,服務器會一直退火重試,直到成功為止,不會停止數據加工進程。場景4: 開啟主鍵維護拉取的目標logstore數據(暫時不推薦)
注意事項
目前該功能僅限使用所有數據存儲在logstore的同一個shard中,所以暫時不推薦使用該功能。
背景
以我們的個人信息logstore 和 酒店信息logstore的數據進行舉例,因為logstore和數據庫不同,logstore中的數據只能寫入,無法刪除,所以有的時候我們希望匹配的時候將已經刪除的數據不要進行匹配,這時候就需要開啟主鍵維護功能。
需求演示
現在我們想拉取酒店信息logstore中,所有入住還沒有離開的客人信息,當status=leave的時候,表示客人已經離開酒店,所以不需要將該信息進行拉取。
DSL編排語法
res_log_logstore_pull(..., ["cid","name","room_number","status","time"],from_time=1567038284,to_time=None,primary_keys="cid",delete_data="status:leave")得到的數據
## 可以看到 name為maki 的客人的最后更新status為leave ,已經離開酒店,所以并沒有將 maki的數據拉取下來, time:1567038284 status:check in cid:12346 name:vicky room_number:2222time:1567038500 status:check in cid:12347 name:mary room_number:3333注意
需要注意的是 primary_keys 目前只支持設置單字符串,這個需要設置logstore數據中 值為唯一的字段,比如樣例中的cid , 類似數據庫的唯一主鍵,并且當設置primary_keys的時候,delete_data 也必須不為 None,這樣才有意義。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的日志服务数据加工最佳实践: 从其他logstore拉取数据做富化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谁顶住双11的世界级流量洪峰?神龙架构负
- 下一篇: 一文读懂深度学习:从神经元到BERT