您將資料加工結果分發至儲存目標Logstore後,如果目標Logstore中無資料,可參見本文解決。
情境一:加工語句中的儲存目標與建立資料加工任務頁面中的儲存目標不一致
名為website_log的Logstore中有5000條資料,其中SourceIP為192.0.2.54的資料有1000條,SourceIP為192.0.2.28的資料有1000條,SourceIP為192.0.2.136的資料有1000條,SourceIP為其他值的日誌有2000條。現對這些資料進行加工,分發到不同的目標Logstore(54_log_target、28_log_target、136_log_target)中。
加工需求
將SourceIP為192.0.2.54的資料分發至名為54_log_target的Logstore中。
將SourceIP為192.0.2.28的資料分發至名為28_log_target的Logstore中。
將SourceIP為192.0.2.136的資料分發至名為136_log_target的Logstore中。
將其他不符合加工條件的資料全部丟棄。
加工語句
三個目標Logstore名稱分別為54_log、28_log、136_log。
e_if(e_search("SourceIP==192.0.2.54"), e_output(name="54-target", project="sls-test", logstore="54_log")) e_if(e_search("SourceIP==192.0.2.28"), e_output(name="28-target", project="sls-test", logstore="28_log")) e_if(e_search("SourceIP==192.0.2.136"), e_output(name="136-target", project="sls-test", logstore="136_log")) e_drop()
儲存目標
三個目標Logstore分別為54_log_target、28_log_target、136_log_target。
加工結果
名稱為54_log_target、28_log_target、136_log_target的Logstore中無資料。
原因分析
在資料加工語句的e_output函數中設定了
project
(目標Project名稱)和logstore
(目標Logstore名稱),同時在建立資料加工任務面板中設定不同的目標Project和目標庫,此時以資料加工語句的儲存目標為準。即在本案例中,加工結果被分發至資料加工語句中設定的三個Logstore中:54_log、28_log、136_log。
解決方案
在e_output函數和e_coutput函數中只配置name參數,則加工結果輸出到建立資料加工任務面板中設定的儲存目標。
如果在e_output函數和e_coutput函數中配置Project參數、Logstore參數,則必須和建立資料加工任務面板中設定的儲存目標一致。更多資訊,請參見e_output、e_coutput。
說明設定了加工語句且設定多個儲存目標時,如果未使用e_drop()語句,則所有通過加工處理但不符合條件且未被丟棄的資料,都被分發至第一個儲存目標中。
e_if(e_search("SourceIP==192.0.2.54"), e_output(name="54-target", project="sls-test", logstore="54_log_target")) e_if(e_search("SourceIP==192.0.2.28"), e_output(name="28-target", project="sls-test", logstore="28_log_target")) e_if(e_search("SourceIP==192.0.2.136"), e_output(name="136-target", project="sls-test", logstore="136_log_target")) e_drop()
情境二:未設定加工語句或僅設定e_drop()語句
加工語句
無
儲存目標
加工結果
只有名稱為
54_log_target
的Logstore中有資料。原因分析
在資料加工頁面沒有設定加工語句,但在建立資料加工任務面板:
設定一個儲存目標,源Logstore的資料會被複製到儲存目標中。
設定多個儲存目標,所有的資料只被分發到儲存目標1的Logstore中,不會被轉寄到其他Logstore。
在資料加工頁面僅設定e_drop()語句,所有的日誌資料都被丟棄,儲存目標Logstore中無資料。
情境三:加工延遲
如果您確保您的加工任務設定正確,而目標Logstore中仍無資料,可能是因為加工延遲。
參考效能指南,建議在部署加工作業之前,從三個層面進行規劃:
源Logstore,根據資料量調整Shard數目(readwrite狀態),滿足一定的加工並發度。
加工DSL代碼邏輯最佳化,例如最佳化Regex、合理做條件剪枝、資料過濾盡量前置。
目標Logstore設定足夠的Shard數目(readwrite狀態),避免加工寫出資料受阻。