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