本文介紹如何將日誌分發到不同儲存目標,並且每次輸出的日誌欄位集合不同。
背景資訊
如果您需要將日誌重複輸出到多個目標中,但輸出到每個目標的欄位集合有所不同。例如,原始日誌的欄位為f1、f2、f3、f4、f5。
輸出到target1時,去掉欄位f1和f2,保留其他欄位。
輸出到target2時,去掉欄位f3和f4,保留其他欄位。
配置樣本
原始日誌
__time__ : 1591754815
f1: GET
f2: https
f3: aliyun
f4: 200
f5: standard
加工文法
說明
以下樣本涉及的資料加工函數,請參見函數總覽。
用e_set函數為日誌新增欄位
tag: target1, target2
。用e_split函數根據tag欄位將日誌分成兩份,分別帶有欄位
tag: target1
和tag: target2
。對於帶有欄位
tag: target1
的日誌,丟棄f1、f2欄位,只有f3、f4、f5欄位輸出到target1
。用e_output
函數輸出後,帶有欄位tag: target1
的日誌不再執行後面的加工規則。對於帶有欄位
tag: target2
的日誌,丟棄f3、f4欄位。
e_set("tag", "target1, target2")
e_split("tag")
e_if(e_search("tag==target1"), e_compose(e_drop_fields("f1", "f2", regex=False), e_output("target1")))
e_drop_fields("f3", "f4", regex=False)
e_output("target2")
輸出到目標target1
__time__ : 1591754815
f3: aliyun
f4: 200
f5: standard
輸出到目標target2
__time__ : 1591754815
f1: GET
f2: https
f5: standard
錯誤配置
如果您使用如下加工文法,則輸出到target1的結果滿足需求,但target1的結果會直接輸入到target2,導致target2的日誌丟失f1、f2欄位。
e_drop_fields("f1", "f2", regex=False)
e_coutput("target1")
e_drop_fields("f3", "f4", regex=False)
e_output("target2")