本文介绍字段值提取函数的语法规则,包括参数解释、函数示例等。
函数列表
类型 | 函数 | 说明 |
---|---|---|
正则提取 | e_regex | 根据正则表达式提取字段的值并赋值给其他字段。
支持和其他函数组合使用。相关示例,请参见解析Java报错日志。 |
JSON提取 | e_json | 对特定字段中的JSON对象进行JSON操作,包括JSON展开、JMES提取或者JMES提取后再展开。
支持和其他函数组合使用。相关示例,请参见复杂JSON数据加工。 |
分隔符提取 | e_csv、e_psv、e_tsv | 使用自定义的分隔符与预定义的字段名,从特定字段中提取多个字段。
支持和其他函数组合使用。相关示例,请参见解析CSV格式日志。 |
KV模式提取 | e_kv | 通过quote提取多个源字段中的键值对信息。
支持和其他函数组合使用。相关示例,请参见提取字符串动态键值对。 |
e_kv_delimit | 通过分隔符提取源字段中的键值对信息。 | |
Syslog标准提取 | e_syslogrfc | 根据Syslog协议由已知priority值计算出facility和severity,并且匹配相应的level信息。
支持和其他函数组合使用。相关示例,请参见解析Syslog标准格式数据。 |
使用定义规则提取 | e_anchor | 使用定义的anchor_rules规则提取字符串。 |
e_regex
根据正则表达式提取字段的值并赋值给其他字段。
-
函数格式
e_regex(key,正则表达式,fields_info,mode="fill-auto",pack_json=None)
-
参数说明
参数名称 参数类型 是否必填 说明 key 任意 是 源字段名。如果字段不存在,则不进行任何操作。特殊字段名的设置请参见事件类型。 正则表达式 String 是 提取字段的正则表达式。 支持捕获组和非捕获组正则表达式。
说明 非捕获有时需要使用分组,且使用前缀?:
。例如\w+@\w+\.\w(?:\.\cn)?
。关于分组不捕获请参见非捕获组。fields_info String/ List/ Dict 否 匹配后目标字段名。当正则表达式参数没有配置命名捕获的名称时,必须配置该参数。 mode String 否 字段的覆盖模式。默认为fill-auto。关于更多字段值及含义请参见字段提取检查与覆盖模式。 pack_json String 否 将正则表达式的所有匹配结果打包放入pack_json指定的字段中。默认值是None,表示不打包。 -
返回结果
返回附带新字段值的日志。
-
函数示例
- 示例1:提取字段中符合表达式的值。
- 原始日志
msg: 192.168.0.1 http://... 127.0.0.0
- 加工规则
# 提取字段msg中出现的第一个IP地址。 e_regex("msg",r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}","ip")
- 加工结果
msg: 192.168.0.1 http://... 127.0.0.0 ip: 192.168.0.1
- 原始日志
- 示例2:提取字段中符合表达式的多个值。
- 原始日志
msg: 192.168.0.1 http://... 127.0.0.0
- 加工规则
# 提取字段msg中出现的两个IP地址,分别赋值给server_ip和client_ip。 e_regex("msg",r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",["server_ip","client_ip"])
- 加工结果
msg: 192.168.0.1 http://... 127.0.0.0 server_ip: 192.168.0.1 client_ip: 127.0.0.0
- 原始日志
- 示例3:通过捕获组提取符合表达式的值。
- 原始日志
content: start sys version: deficience, err: 2
- 加工规则
# 使用正则表达式捕获content中的version和error值。 e_regex("content",r"start sys version: (\w+),\s*err: (\d+)",["version","error"])
- 加工结果
content: start sys version: deficience, err: 2 error: 2 version: deficience
- 原始日志
- 示例4:通过命名捕获组提取字段值。
- 原始日志
content: start sys version: deficience, err: 2
- 加工规则
e_regex("content",r"start sys version: (?P\w+),\s*err: (?P\d+)")
- 加工结果
content: start sys version: deficience, err: 2 error: 2 version: deficience
- 原始日志
- 示例5:使用正则表达式捕获字段dict中的值,并动态命名字段名和其值。
- 原始日志
dict: verify:123
- 加工规则
e_regex("dict",r"(\w+):(\d+)",{r"k_\1": r"v_\2"})
- 加工结果
dict: verify:123 k_verify: v_123
- 原始日志
- 示例6:提取字段中符合表达式的值,并打包赋值给name字段。
- 原始日志
msg: 192.168.0.1 http://... 127.0.0.0
- 加工规则
e_regex("msg", r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", "ip", pack_json="name")
- 加工结果
msg:192.168.0.1 http://... 127.0.0.0 name:{"ip": "192.168.0.1"}
- 原始日志
- 示例7:使用正则表达式提取字段dict中的值,动态命名字段名和其值,并打包赋值给name字段。
- 原始日志
dict: x:123, y:456, z:789
- 加工规则
e_regex("dict", r"(\w+):(\d+)", {r"k_\1": r"v_\2"}, pack_json="name")
- 加工结果
dict:x:123, y:456, z:789 name:{"k_x": "v_123", "k_y": "v_456", "k_z": "v_789"}
- 原始日志
- 示例8:通过捕获组提取符合表达式的值,并打包赋值给name字段。
- 原始日志
content: start sys version: deficience, err: 2
- 加工规则
e_regex( "content", r"start sys version: (\w+),\s*err: (\d+)", ["version", "error"],pack_json="name")
- 加工结果
content:start sys version: deficience, err: 2 name:{"version": "deficience", "error": "2"}
- 原始日志
- 示例1:提取字段中符合表达式的值。
-
更多参考
支持和其他函数组合使用。相关示例,请参见解析Java报错日志。
e_json
对特定字段中的JSON对象进行JSON操作,包括JSON展开、JMES提取或者JMES提取后再展开。
-
函数格式
e_json(key, expand=None, depth=100, prefix="__", suffix="__", fmt="simple", sep=".", expand_array=True, fmt_array="{parent}_{index}", include_node=r"[一-龥ࠀ-一a-zA-Z][\w\-\.]*", exclude_node="", include_path="", exclude_path="", jmes="", output="", jmes_ignore_none=False, mode='fill-auto' )
说明 使用e_json解析目标数据,如果需要解析的字符串不符合JSON数据结构,则不会进行字符串解析,而返回原字符串。 -
参数说明
参数名称 参数类型 是否必填 说明 key String 是 源字段名。如果字段不存在,则不进行任何操作。特殊字段名的设置请参见事件类型。 expand Boolean 否 是否将字段展开。 - 没有配置jmes参数时,则默认为True,表示展开。
- 配置jmes参数时,则默认为False,表示不展开。
depth Number 否 字段展开的深度。取值范围为1~2000,1表示只展开第一层,默认为100层。 prefix String 否 展开时添加为字段名的前缀。 suffix String 否 展开时添加为字段名的后缀。 fmt String 否 格式化方式。取值: - simple(默认值):表示将节点名作为字段名。展示形式为
{prefix}{current}{suffix}
。 - full:表示将父节点与当前节点合并作为字段名。展示形式为
{parent_list_str}{sep}{prefix}{current}{suffix}
。分隔符是由sep
参数指定,默认为.
。 - parent:表示用完整的路径作为字段名。展示形式为
{parent}{sep}{prefix}{current}{suffix}
。分隔符是由sep
参数指定,默认为.
。 - root:表示将根节点与当前节点合并作为字段名。展示形式为
{parent_list[0]}{sep}{prefix}{current}{suffix}
。分隔符由sep
参数指定,默认为.
。
sep String 否 父子节点格式化的分隔符。当 fmt
取值为full、parent或root时需要设置。默认为.
。expand_array Boolean 否 是否将数组展开。默认为 True
表示展开数组。fmt_array String 否 数组展开的格式化方式,格式为 {parent_rlist[0]}_{index}
。也可以使用最多五个占位符自定义格式化字符串:parent_list
,current
,sep
,prefix
,suffix
。include_node String/ Number 否 节点允许名单,表示过滤时包含的节点名称。默认只有中文、数字、字母和 _.-
的节点才会被自动展开。exclude_node String 否 节点限制名单,表示过滤时排除的节点名称。 include_path String 否 节点允许名单,表示过滤时包含的节点路径。 exclude_path String 否 节点限制名单,表示过滤时排除的节点路径。 jmes String 否 将字段值转化为JSON对象并通过JMES提取特定值。 output String 否 通过JMES提取特定值时输出的字段名。 jmes_ignore_none Boolean 否 当JMES提取不到值时是否忽略。默认为True表示忽略,否则输出一个空字符串。 mode String 否 字段的覆盖模式。默认为fill-auto。关于更多字段值及含义请参见字段提取检查与覆盖模式。 - JSON展开过滤
- 如果设置了节点允许名单,则内容必须包含在节点允许名单中然后才会在结果中出现。节点允许名单正则示例:
e_json("json_data_filed", ...., include_node=r'key\d+')
。 - 如果设置了节点限制名单,则内容必须包含在节点限制名单中然后才不会在结果中出现。节点限制名单正则示例:
e_json("json_data_filed", ...., exclude_node=r'key\d+')
。 - 展开节点路径:正则
include_path
与exclue_path
从路径开头匹配,匹配路径是以.
分隔。
- 如果设置了节点允许名单,则内容必须包含在节点允许名单中然后才会在结果中出现。节点允许名单正则示例:
- JMES过滤
使用JMES选择、计算。- 选择特定JSON路径下的元素属性列表:
e_json(..., jmes="cve.vendors[*].product",output="product")
- 用逗号拼接特定JSON路径下的元素属性:
e_json(..., jmes="join(',', cve.vendors[*].name)",output="vendors")
- 计算特定JSON路径下元素的最大属性值:
e_json(..., jmes="max(words[*].score)",output="hot_word")
- 当特定路径不存在或为空时,返回一个空字符串:
e_json(..., jmes="max(words[*].score)",output="hot_word", jmes_ignore_none=False)
- 选择特定JSON路径下的元素属性列表:
- parent_list和parent_rlist
以如下示例说明。
原始日志:
data: { "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}}
- parent_list是将父节点从左到右排列。
e_json("data", fmt='{parent_list[0]}-{parent_list[1]}#{current}')
得到的日志:
data:{ "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}} data-k2#k3:200 data-k2#k5:300
- parent_rlist是将父节点从右到左排列。
e_json("data", fmt='{parent_rlist[0]}-{parent_rlist[1]}#{current}')
得到的日志:
data:{ "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}} k2-data#k3:200 k4-k2#k5:300
- parent_list是将父节点从左到右排列。
-
返回结果
返回附带新字段值的日志。
-
函数示例
- 示例1:字段展开操作。
- 原始日志
data: {"k1": 100, "k2": 200}
- 加工规则
e_json("data",depth=1)
- 加工结果
data: {"k1": 100, "k2": 200} k1: 100 k2: 200
- 原始日志
- 示例2:给字段名添加前缀和后缀。
- 原始日志
data: {"k1": 100, "k2": 200}
- 加工规则
e_json("data", prefix="data_", suffix="_end")
- 加工结果
data: {"k1": 100, "k2": 200} data_k1_end: 100 data_k2_end: 200
- 原始日志
- 示例3:将字段按照不同格式展开。
- 原始日志
data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
- fmt=full格式
e_json("data", fmt='full')
data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } data.k1: 100 data.k2.k3: 200 data.k2.k4.k5: 300
- fmt=parent格式
e_json("data", fmt='parent')
data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } data.k1: 100 k2.k3: 200 k4.k5: 3000
- fmt=root格式
e_json("data", fmt='root')
data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } data.k1: 100 data.k3: 200 data.k5: 300
- 原始日志
- 示例4:使用指定分隔符、字段名前缀和字段名后缀提取JSON。
- 原始日志
data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
- 加工规则
e_json("data", fmt='parent', sep="@", prefix="__", suffix="__")
- 加工结果
data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } data@__k1__:100 k2@__k3__:200 k4@__k5__:300
- 原始日志
- 示例5:指定fmt_array参数,按照数组方式提取JSON。
- 原始日志
people: [{"name": "xm", "sex": "boy"}, {"name": "xz", "sex": "boy"}, {"name": "xt", "sex": "girl"}]
- 加工规则
e_json("people", fmt='parent', fmt_array="{parent_rlist[0]}-{index}")
- 加工结果
people: [{"name": "xm", "sex": "boy"}, {"name": "xz", "sex": "boy"}, {"name": "xt", "sex": "girl"}] people-0.name: xm people-0.sex: boy people-1.name: xz people-1.sex: boy people-2.name: xt people-2.sex: girl
- 原始日志
- 示例6:使用JMES提取JSON对象。
- 原始日志
data: { "people": [{"first": "James", "last": "d"},{"first": "Jacob", "last": "e"}],"foo": {"bar": "baz"}}
- 加工规则
e_json("data", jmes='foo', output='jmes_output0') e_json("data", jmes='foo.bar', output='jmes_output1') e_json("data", jmes='people[0].last', output='jmes_output2') e_json("data", jmes='people[*].first', output='jmes_output3')
- 加工结果
data: { "people": [{"first": "James", "last": "d"},{"first": "Jacob", "last": "e"}],"foo": {"bar": "baz"}} jmes_output0: {"bar": "baz"} jmes_output1: baz jmes_output2: d jmes_output3: ["james", "jacob"]
- 原始日志
- 示例1:字段展开操作。
-
更多参考
支持和其他函数组合使用。相关示例,请参见复杂JSON数据加工。
e_csv、e_psv、e_tsv
使用自定义的分隔符与预定义的字段名,从特定字段中提取多个字段。
- e_csv:默认分隔符为半角逗号(,)。
- e_psv:默认分隔符为竖线(|)。
- e_tsv:默认分隔符为
-
函数格式
e_csv(源字段名, 目标字段列表, sep=",", quote='"', restrict=True, mode="fill-auto") e_psv(源字段名, 目标字段列表, sep="|", quote='"', restrict=True, mode="fill-auto") e_tsv(源字段名, 目标字段列表, sep=" ", quote='"', restrict=True, mode="fill-auto")
-
参数说明
参数名称 参数类型 是否必填 说明 源字段名 任意 是 源字段名。如果字段不存在,则不进行任何操作。特殊字段名的设置请参见事件类型。 目标字段列表 任意 是 字段值经过分隔符分隔后的每个值对应的字段名。 可以是字符串的列表,例如:
["error", "message", "result"]
。当字段名中不包含逗号时,也可以直接用逗号作为分隔字符,例如:
"error, message, result"
。特殊字段名的设置请参见事件类型。
sep String 否 分隔符,只能是单个字符。 quote String 否 引用符,用于包裹值的字符。当值包含分隔符时需要使用。 restrict Boolean 否 是否采用严格模式,默认为False表示非严格模式。当分隔值的个数与目标字段列表数不一致时: - 严格模式下不进行任何操作。
- 非严格模式下对前几个可以配对的字段进行赋值。
mode String 否 字段的覆盖模式。默认为fill-auto。关于更多字段值及含义请参见字段提取检查与覆盖模式。 -
返回结果
返回附带新字段值的日志。
-
函数示例
以
e_csv
为例,e_psv
和e_tsv
功能类似。- 原始日志
content: 192.168.0.100,10/Jun/2019:11:32:16 +0800,example.aliyundoc.com,GET /zf/11874.html HTTP/1.1,200,0.077,6404,192.168.0.100:8001,200,0.060,https://image.developer.aliyundoc.com/s?q=%E8%9B%8B%E8%8A%B1%E9%BE%99%E9%A1%BB%E9%9D%A2%E7%9A%84%E5%81%9A%E6%B3%95&from=wy878378&uc_param_str=dnntnwvepffrgibijbprsvdsei,-,Mozilla/5.0 (Linux; Android 9; HWI-AL00 Build/HUAWEIHWI-AL00) AppleWebKit/537.36,-,-
- 加工规则
e_csv("content", "remote_addr, time_local,host,request,status,request_time,body_bytes_sent,upstream_addr,upstream_status, upstream_response_time,http_referer,http_x_forwarded_for,http_user_agent,session_id,guid")
- 加工结果
content: 192.168.0.100,10/Jun/2019:11:32:16 +0800,example.aliyundoc.com,GET /zf/11874.html HTTP/1.1,200,0.077,6404,192.168.0.100:8001,200,0.060,https://image.developer.aliyundoc.com/s?q=%E8%9B%8B%E8%8A%B1%E9%BE%99%E9%A1%BB%E9%9D%A2%E7%9A%84%E5%81%9A%E6%B3%95&from=wy878378&uc_param_str=dnntnwvepffrgibijbprsvdsei,-,Mozilla/5.0 (Linux; Android 9; HWI-AL00 Build/HUAWEIHWI-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36,-,- body_bytes_sent: 6404 guid: - host: example.aliyundoc.com http_referer: https://image.developer.aliyundoc.com/s?q=%E8%9B%8B%E8%8A%B1%E9%BE%99%E9%A1%BB%E9%9D%A2%E7%9A%84%E5%81%9A%E6%B3%95&from=wy878378&uc_param_str=dnntnwvepffrgibijbprsvdsei http_user_agent: Mozilla/5.0 (Linux; Android 9; HWI-AL00 Build/HUAWEIHWI-AL00) AppleWebKit/537.36 http_x_forwarded_for: - remote_addr: 192.168.0.100 request: GET /zf/11874.html HTTP/1.1 request_time: 0.077 session_id: - status: 200 time_local: 10/Jun/2019:11:32:16 +0800 topic: syslog-forwarder upstream_addr: 192.168.0.100:8001 upstream_response_time: 0.060 upstream_status: 200
- 原始日志
-
更多参考
支持和其他函数组合使用。相关示例,请参见解析CSV格式日志。
e_kv
通过quote提取多个源字段中的键值对信息。
-
函数格式
e_kv(源字段或源字段列表, sep="=", quote='"', escape=False, prefix="", suffix="", mode="fill-auto")
-
参数说明
参数名称 参数类型 是否必填 说明 源字段或源字段列表 字符串或字符串列表 是 字段名或多个字段名的列表。特殊字段名的设置请参见事件类型。 sep String 否 关键字与值的正则表达式的分隔符串,默认为 =
,不限于单个字符。
说明 可以使用非捕获分组,但不能使用捕获分组。关于分组请参见分组。quote String 否 引用符,用于包裹值的字符。默认为 "
。
说明 提取的动态键值对的值一般需要quote来包括,例如:a="abc"
,b="xyz"
如果提取对象中不包含,则只提取如下字符集的值:中文字母数字_-.%~
。例如a=中文ab12_-.%~|abc b=123
可以提取a: 中文ab12_-.%~
,b: 123
。escape Boolean 否 是否自动提取反转字符的值。默认为 False
表示否。例如key="abc\"xyz"
默认提取字段key
的值为abc\
,设置escape=True
时,提取的值为abc"xyz
。prefix String 否 给提取的字段名添加前缀。 suffix String 否 给提取的字段名添加后缀。 mode String 否 字段的覆盖模式。默认为fill-auto。关于更多字段值及含义请参见字段提取检查与覆盖模式。 -
返回结果
返回附带新字段值的日志。
-
函数示例
- 示例1:使用默认分隔符=提取键值对信息。
- 原始日志
http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2
说明 如果原始日志为request_uri: a1=1&a2=&a3=3
,a2值为空,则使用e_kv()函数无法提取出a2。您可以使用e_regex()函数进行提取,例如e_regex(“request_uri”,r'(\w+)=([^=&]*)’,{r”\1″:r”\2″},mode=”overwrite”)。 - 加工规则
e_kv("http_refer")
- 加工结果
http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2 q: asd a: 1 b: 2
- 原始日志
- 示例2:给字段名增加前缀和后缀。
- 原始日志
http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2
- 加工规则
e_kv( "http_refer", sep="=", quote='"', escape=False, prefix="data_", suffix="_end", mode="fill-auto", )
- 加工结果
http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2 data_q_end: asd data_a_end: 1 data_b_end: 2
- 原始日志
- 示例3:提取字段content2中的键值对信息,使用escape参数提取反转字符的值。
- 原始日志
content2: k1:"v1\"abc", k2:"v2", k3: "v3"
- 加工规则
e_kv("content2", sep=":", escape=True)
- 加工结果
content2: k1:"v1\"abc", k2:"v2", k3: "v3" k1: v1"abc k2: v2 k3: v3
- 原始日志
- 示例1:使用默认分隔符=提取键值对信息。
-
更多参考
支持和其他函数组合使用。相关示例,请参见提取字符串动态键值对。
e_kv_delimit
通过分隔符提取源字段中的键值对信息。
-
函数格式
e_kv_delimit(源字段或源字段列表, pair_sep=r"\s", kv_sep="=", prefix="", suffix="", mode="fill-auto")
-
参数说明
参数名称 参数类型 是否必填 说明 源字段或源字段列表 字符串或字符串列表 是 字段名或多个字段名的列表。特殊字段名的设置请参见事件类型。 pair_sep String 否 用于分隔键值对的正则字符集,默认为 \s
。例如\s\w
、abc\s
等。
说明 如果您需要使用字符串对字段进行分隔,推荐您使用str_replace或regex_replace将字符串转换成字符作为分隔符,然后再使用e_kv_delimit函数对字段进行分隔。kv_sep String 否 用于分隔键值对的正则字符串,默认为 =
,不限于单个字符。
说明 可以使用非捕获分组,但不能使用捕获分组。关于分组请参见分组。prefix String 否 给提取的字段名添加前缀。 suffix String 否 给提取的字段名添加后缀。 mode String 否 字段的覆盖模式。默认为fill-auto。关于更多字段值及含义请参见字段提取检查与覆盖模式。 -
返回结果
返回附带新字段值的日志。
-
函数示例
- 示例1:使用默认分隔符
=
提取键值对信息。- 原始日志
data: i=c1 k1=v1 k2=v2 k3=v3
说明 如果原始日志为request_uri: a1=1&a2=&a3=3
,a2值为空,则使用e_kv_delimit()函数无法提取出a2。您可以使用e_regex()函数进行提取,例如e_regex(“request_uri”,r'(\w+)=([^=&]*)’,{r”\1″:r”\2″}, mode=”overwrite”)。 - 加工规则
e_kv_delimit("data")
- 加工结果
data: i=c1 k1=v1 k2=v2 k3=v3 i: c1 k2: v2 k1: v1 k3: v3
- 原始日志
- 示例2:使用分隔符
&?
提取键值对信息。- 原始日志
data: k1=v1&k2=v2?k3=v3
- 加工规则
e_kv_delimit("data",pair_sep=r"&?")
- 加工结果
data: k1=v1&k2=v2?k3=v3 k2: v2 k1: v1 k3: v3
- 原始日志
- 示例3:使用正则表达式提取键值对信息。
- 原始日志
data: k1=v1 k2:v2 k3=v3
- 加工规则
e_kv_delimit("data", kv_sep=r"(?:=|:)")
- 加工结果
data: k1=v1 k2:v2 k3=v3 k2: v2 k1: v1 k3: v3
- 原始日志
- 示例1:使用默认分隔符
e_syslogrfc
根据Syslog协议由已知priority值计算出facility和severity,并且匹配相应的level信息。
-
函数格式
e_syslogrfc(key, rfc, fields_info=None, mode='overwrite')
-
参数说明
参数名称 参数类型 是否必填 说明 key 任意 是 字段名,需要填入代表 priority
值的字段。rfc String 是 Syslog使用的RFC协议。可选值为SYSLOGRFC3164或者SYSLOGRFC5424。 fields_info Dict 否 key表示源字段名,value表示新字段名。以下是默认支持重命名的需要进行重命名的字段名及新名称,支持对新名称修改。 {"_severity_":"sev","_facility_":"fac","_severitylabel_":"sevlabel","_facilitylabel_":"faclabel"}
mode String 否 字段的覆盖模式。默认为overwrite。关于更多字段值及含义请参见字段提取检查与覆盖模式。 -
返回结果
返回添加字段信息的日志。
-
函数示例
- 示例1:使用默认Syslog RFC5424协议提取facility、severity和level信息。
- 原始日志
receive_time: 1558663265 _priority_: 13 _version_: 1 _log_time_: 2019-05-06 11:50:16.015554+08:00 _hostname_: iZbp1a65********i2qZ _program_: root _procid_: - _msgid_: - _extradata_: - _content_: twish
- 加工规则
e_syslogrfc("_priority_","SYSLOGRFC5424")
- 加工结果
receive_time: 1558663265 _priority_: 13 _version_: 1 _log_time_: 2019-05-06 11:50:16.015554+08:00 _hostname_: iZbp1a65********i2qZ _program_: root _procid_: - _msgid_: - _extradata_: - _content_: twish _facility_: 1 _severity_: 5 _severitylabel_: Notice: normal but significant condition _facilitylabel_: user-level messages
- 原始日志
- 示例2:使用Syslog RFC5424协议提取facility、severity和level信息,并使用fields_info重命名字段名。
- 原始日志
receive_time: 1558663265 _priority_: 13 _version_: 1 _log_time_: 2019-05-06 11:50:16.015554+08:00 _hostname_: iZbp1a65********i2qZ _program_: root _procid_: - _msgid_: - _extradata_: - _content_: twish
- 加工规则
e_syslogrfc( "_priority_", "SYSLOGRFC5424", { "_facility_": "fac", "_severity_": "sev", "_facilitylabel_": "_facility_label_", "_severitylabel_": "_severity_label_", }, )
- 加工结果
receive_time: 1558663265 _priority_: 13 _version_: 1 _log_time_: 2019-05-06 11:50:16.015554+08:00 _hostname_: iZbp1a65********i2qZ _program_: root _procid_: - _msgid_: - _extradata_: - _content_: twish _facility_: 1 _severity_: 5 _severity_label_: Notice: normal but significant condition _facility_label_: user-level messages
- 原始日志
- 示例1:使用默认Syslog RFC5424协议提取facility、severity和level信息。
-
更多参考
支持和其他函数组合使用。相关示例,请参见解析Syslog标准格式数据。
e_anchor
使用定义的anchor_rules规则提取字符串。
-
函数格式
e_anchor(key,anchor_rules,fields,restrict=False,mode="overwrite")
-
参数说明
参数名称 参数类型 是否必填 说明 key 任意 是 字段名。 anchor_rules String 是 提取字符串的规则,例如: User = *; Severity = *;,
待提取的内容用*表示。
控制台上展示的日志(Key : Value形式)中,Value与冒号之间有默认的空格,填写anchor_rules时,请勿带上默认的空格。
说明 在源字段的值中,不能使用*作为前后缀标识。fields 任意 是 源字段值经过提取后,每个值对应的字段名。可以为字符串的列表,例如: ["user", "job", "result"]
。当字段名中不包含半角逗号(,)时,也可以直接用半角逗号(,)分隔的字符串,例如:"user, job, result"
。特殊字段名(包含特殊符号,但不能包含*号)的设置请参见事件类型。支持跳过某个字段名,使用*代替。例如:
"user,*,result"
,在提取的结果中会只有user和result。更多信息,请参见示例10。restrict Boolean 否 是否采用严格模式,默认为False表示非严格模式。当提取的值的个数与目标字段列表数不一致时: - 严格模式下不进行任何操作。
- 非严格模式下对前几个可以配对的字段进行赋值。
mode String 否 默认为overwrite。更多信息,请参见字段提取检查与覆盖模式。 -
返回结果
返回提取成功后的内容。
-
函数示例
- 示例1:提取多组值。
- 原始日志
content : "Aug 2 04:06:08: host=192.168.0.10: local/ssl2 notice mcpd[3772]: User=jsmith@example.com: severity=warning: 01070638:5: Pool member 172.31.51.22:0 monitor status down."
- 加工规则
e_anchor("content","User=*: severity=*:",["user_field","severity_field"])
- 加工结果
content : "Aug 2 04:06:08: host=192.168.0.10: local/ssl2 notice mcpd[3772]: User=jsmith@example.com: severity=warning: 01070638:5: Pool member 172.31.51.22:0 monitor status down." user_field : jsmith@example.com severity_field : warning
- 原始日志
- 示例2:提取多jsonArray值。
- 原始日志
content : '"information":{"name_list":["Twiss","Evan","Wind","like"],"university":["UCL","Stanford University","CMU"]},"other":"graduate"'
- 加工规则
e_anchor("content",'name_list":*,"university":*},', ["name_list","universities"])
- 加工结果
content : '"information":{"name_list":["Twiss","Evan","Wind","like"],"university":["UCL","Stanford University","CMU"]},"other":"graduate"' name_list : ["Twiss","Evan","Wind","like"] universities : ["UCL","Stanford University","CMU"]
- 原始日志
- 示例3:提取包含特殊字符值的日志。
- 原始日志
content : (+2019) June 24 "I am iron man"
- 加工规则
e_anchor("content", "(+*) * \"*\"",["Year","Date","Msg"])
- 加工结果
content : (+2019) June 24 "I am iron man" Year : 2019 Date : June 24 Msg : I am iron man
- 原始日志
- 示例4:提取包含特殊字符(不可见字符
- 原始日志
content : Chrome/55.0 Safari/537.36
- 加工规则
e_anchor("content", " */55.0 */537.36",["Google", "Apple"])
- 加工结果
content : Chrome/55.0 Safari/537.36 Google : Chrome Apple : Safari
- 原始日志
- 示例5:提取包含特殊字符值的字段content,其中
MESSAGE:
后的To...Subject
都是content内容。- 原始日志
content : 12:08:10,651 INFO sample_server ReportEmailer:178 - DEBUG SENDING MESSAGE: To: example@aliyun.com Subject: New line Breaks in Message
- 加工规则
e_anchor("content","* INFO *: To: * Subject: *",["time","message","email","subject"])
- 加工结果
content : 12:08:10,651 INFO sample_server ReportEmailer:178 - DEBUG SENDING MESSAGE: To: example@aliyun.com Subject: New line Breaks in Message time : 12:08:10,651 message : sample_server ReportEmailer:178 - DEBUG SENDING MESSAGE email : example@aliyun.com subject : New line Breaks in Message
- 原始日志
- 示例6:提取包含特殊字符值的字段content,不可见的
- 原始日志
content : I'm tabbed in
- 加工规则
e_anchor("content"," I'm * in","word") # 或者使用以下规则,复制content的value(请勿复制默认的空格) e_anchor("content"," I'm * in","word")
- 加工结果
content : I'm tabbed in word : tabbed
- 原始日志
- 示例7:提取包含特殊字符值的字段content,可见的
- 原始日志
content : I'm tabbed in
- 加工规则
e_anchor("content"," I'm * in","word") # 或者使用以下规则 e_anchor("content"," I'm * in","word")
- 加工结果
content : I'm tabbed in word : tabbed
- 原始日志
- 示例8:使用严格模式提取日志。
- 原始日志
content : I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood
- 加工规则
e_anchor("content","I * to * having",["v_word", "n_word","asd"],restrict=True)
- 加工结果
content : I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood
- 原始日志
- 示例9:使用非严格模式提取日志。
- 原始日志
content : I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood
- 加工规则
e_anchor("content","love * fight with my * and",["test1","test2","test13"],restrict=False)
- 加工结果
content : I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood test1 : having snowball test2 : friends
- 原始日志
- 示例10:提取某个字段的值,并给另一个字段赋值。
- 原始日志
content: Could you compare the severity of natural disasters to man-made disasters
- 加工规则
e_anchor('content', 'compare the * of natural disasters to man-made *', 'n-word,*')
- 加工结果
content : Could you compare the severity of natural disasters to man-made disasters n-word : severity
- 原始日志
- 示例1:提取多组值。
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/161869.html