本文介绍如何将日志分发到不同存储目标,并且每次输出的日志字段集合不同。
背景信息
如果您需要将日志重复输出到多个目标中,但输出到每个目标的字段集合有所不同。例如,原始日志的字段为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")