You need to enable JavaScript to run this app.
文档中心
日志服务

日志服务

复制全文
下载 pdf
全局操作函数
键值提取函数
复制全文
下载 pdf
键值提取函数
本文档介绍键值提取函数的语法与格式、相关的场景示例。​
ext_sep 函数​
基于单个字符的分隔符提取字段值内容。​
函数语法/格式​
​
ext_sep(field, output="目标字段名1,目标字段名2,目标字段名...", sep=",", quote="\"", restrict=False, mode="overwrite")​
​
参数说明如下:​
​
参数​
参数类型​
是否必选​
默认值​
取值范围​
说明​
field​
String​
是​
/​
/​
待分隔的日志字段名。​
output​
String​
是​
/​
/​
提取后输出的字段名,多个字段以英文半角逗号(,)分隔。​
sep​
String​
否​
,​
单个字符​
分隔符。​
quote​
String​
否​
"​
单个字符​
在该字符对内的 String 不参与分割。​
restrict​
Boolean​
否​
False​
/​
当提取的值个数与用户输入的目标字段数不一致时:​
  • True:忽略,不进行任何提取处理。​
  • False:尽量匹配前几个字段。​
mode​
String​
否​
overwrite​
overwrite,fill​
当指定字段不存在时的处理逻辑。​
  • overwrite: 覆盖写入。​
  • fill: 当目标字段不存在时,设置目标字段。​
​
函数示例​
  • 场景:根据逗号(,)将日志中 content 字段的值提取为多个字段。​
  • 加工规则:​
  • ​
    ext_sep("content", "city-1,city-2,city-3")​
    ​
  • 日志样例:​
  • ​
    {​
    "content":"shanghai,hangzhou,chengdu"​
    }​
    ​
  • 加工结果 :​
  • ​
    {​
    "content":"shanghai,hangzhou,chengdu",​
    "city-1":"shanghai",​
    "city-2":"hangzhou",​
    "city-3":"chengdu"​
    }​
    ​
ext_sepstr 函数​
基于指定的字符串提取字段值内容。​
函数语法/格式​
​
ext_sepstr(field, output="目标字段名1,目标字段名2,目标字段名...", sep=",", restrict=False, mode="overwrite")​
​
参数说明如下:​
​
参数​
参数类型​
是否必选​
默认值​
取值范围​
说明​
field​
String​
是​
/​
/​
待分隔的日志字段名。​
output​
String​
是​
/​
/​
提取后输出的字段名,多个字段以英文半角逗号(,)分隔。​
sep​
String​
否​
,​
/​
分隔字符串。​
restrict​
Boolean​
否​
False​
/​
当提取的值个数与用户输入的目标字段数不一致时:​
  • True:忽略,不进行任何提取处理。​
  • False:尽量匹配前几个字段。​
mode​
String​
否​
overwrite​
overwrite,fill​
当指定字段不存在时的处理逻辑。​
  • overwrite: 覆盖写入。​
  • fill: 当目标字段不存在时,设置目标字段。​
​
函数示例​
  • 场景:根据字符串 || 将日志中 content 字段的值提取为多个字段。​
  • 加工规则:​
  • ​
    ext_sepstr("content", "city-1,city-2,city-3", sep="||")​
    ​
  • 日志样例:​
  • ​
    {​
    "content":"shanghai||hangzhou||chengdu"​
    }​
    ​
  • 加工结果:​
  • ​
    {​
    "content":"shanghai||hangzhou||chengdu",​
    "city-1":"shanghai",​
    "city-2":"hangzhou",​
    "city-3":"chengdu"​
    }​
    ​
ext_json 函数​
对指定字段中的 JSON 字符串进行展开操作。​
Tip​
如果 JSON 字段不同层次中存在重复的 Key,建议使用 include_node 等筛选列表参数,或指定格式化方式为全路径(fmt=full)避免该 Key 的值被覆盖。例如 JSON 字符串为 { "time": "2023”, "info": { "time": "10:45" } },展开后 time 字段可能为 2023 或 10:45,如果需要指定 time 固定为 info 中的 time 字段,可以将 ext_json 函数指定为 ext_json("data",include_path="data.info.time") 或者 ext_json("data",fmt="full")。​
函数语法/格式​
​
ext_json(field, depth=100, prefix="",suffix="",fmt="simple",sep=".",expand_array=True)​
​
参数说明如下:​
​
参数​
参数类型​
是否必选​
默认值​
取值范围​
说明​
field​
String​
是​
/​
/​
待展开的原始字段名。​
depth​
Number​
否​
100​
1-500​
展开的 JSON 层次。​
prefix​
String​
否​
不添加前缀​
/​
被展开 JSON 字符串中,最深层节点的前缀。​
仅最深层 JSON 层次才会添加前缀。​
suffix​
String​
否​
不添加后缀​
/​
被展开 JSON 字符串中,最深层节点的后缀。​
仅最深层 JSON 层次才会添加后缀。​
fmt​
String​
否​
simple​
  • full​
  • simple​
格式化方式。支持配置为:​
  • full:字段名为父节点与当前节点合并后的全路径,格式为 {parent}{sep}{prefix}{key}{suffix}。其中分隔符为 sep 参数指定的字符,默认为英文句号(.)。 例如,data 字段中提取 json 的 key,字段名为data.key。​
  • simple:字段名为节点名称。格式为 {prefix}{key}{suffix}。​
sep​
String​
否​
.​
/​
父子节点格式化时的分隔符。仅当参数 fmt 取值为 full 时可以设置。​
expand_array​
Boolean​
否​
True​
  • True​
  • False​
是否展开数组。​
  • True:展开,把数组内元素展开作为 key。​
  • False:不展开,把数组作为整体作为 value。​
include_node​
String​
否​
不做处理​
/​
筛选和过滤时允许的节点名称,通过正则表达式匹配。默认只有中文、数字、字母和_.-的节点才会被自动展开。​
设置节点允许列表之后,仅包含在列表中的才会出现在结果中。例如 ext_json("json_data_filed", ...., include_node="k\d+")。​
exclude_node​
String​
否​
不做处理​
/​
筛选和过滤时需要排除的节点,通过正则表达式匹配。​
设置节点排除列表之后,列表以外的内容都会被排除在外。例如 ext_json("json_data_filed", ...., exclude_node="k\d+")。​
include_path​
String​
否​
不做处理​
/​
筛选和过滤时包含的节点路径,通过正则表达式匹配。​
include_path 与 exclude_path 的正则式从路径开头开始匹配,匹配路径以英文句号(.)分隔。例如 ext_json("json_data_filed", ...., include_path="content.k\d+")。​
exclude_path​
String​
否​
不做处理​
/​
筛选和过滤时需要排除的节点路径,通过正则表达式匹配。​
include_path 与 exclude_path 的正则式从路径开头开始匹配,匹配路径以英文句号(.)分隔。例如 ext_json("json_data_filed", ...., exclude_path="content.k\d+")。​
​
函数示例​
函数示例 1:​
  • 场景:从日志 content 字段中展开 JSON 数据,前缀为 pre_,后缀为 suf_,fmt 格式默认为 simple。​
  • 加工规则:​
  • ​
    ext_json("content",prefix="pre_",suffix="suf_")​
    ​
  • 日志样例:​
  • ​
    {​
    "content":"{\"k1\": \"v1\",\"k2\": {\"k3\": \"v3\"}}"​
    }​
    ​
  • 加工结果:​
  • ​
    {​
    "content":"{\"k1\": \"v1\",\"k2\": {\"k3\": \"v3\"}}",​
    "pre_k1suf_":"v1",​
    "pre_k3suf_":"v3"​
    }​
    ​
函数示例 2:​
  • 场景:从日志 content 字段中展开 JSON 数据,fmt 格式为 full 全路径,depth 深度为 1。​
  • 加工规则:​
  • ​
    ext_json("content",depth=1,fmt="full")​
    ​
  • 日志样例:​
  • ​
    {​
    "content":"{\"k1\": \"v1\",\"k2\": {\"k3\": \"v3\"}}"​
    }​
    ​
  • 加工结果:​
  • ​
    {​
    "content":"{\"k1\": \"v1\",\"k2\": {\"k3\": \"v3\"}}",​
    "content.k1":"v1",​
    "content.k2":"{\"k3\": \"v3\"}"​
    }​
    ​
函数示例 3:​
  • 场景:从日志 content 字段中展开 JSON 数据,只保留 k1 节点数据。​
  • 加工规则:​
  • ​
    ext_json("content",include_node="k1")​
    ​
  • 日志样例:​
  • ​
    {​
    "content":"{\"k1\": \"v1\",\"k2\": {\"k3\": \"v3\"}}"​
    }​
    ​
  • 加工结果:​
  • ​
    {​
    "content":"{\"k1\": \"v1\",\"k2\": {\"k3\": \"v3\"}}",​
    "k1":"v1"​
    }​
    ​
ext_json_jmes 函数​
使用 jmes 表达式从 json 中提取字段值。​
函数语法/格式​
​
ext_json_jmes(field, jmes="提取JSON的jmes path", output="目标字段", ignore_null=True, mode="overwrite")​
​
参数说明如下:​
​
参数​
参数类型​
是否必选​
默认值​
取值范围​
说明​
field​
String​
是​
/​
/​
待提取的原始字段名。​
jmes​
String​
是​
/​
/​
jmes 表达式。​
output​
String​
是​
/​
/​
提取后输出的字段名。​
ignore_null​
Boolean​
否​
True​
/​
是否忽略节点值为 null 的节点:​
  • True: 忽略 null 字段值。​
  • False: 当提取结果为 null 时,将输出空字符串。​
mode​
String​
否​
overwrite​
overwrite,fill​
当指定字段不存在时的处理逻辑。​
  • overwrite: 覆盖写入。​
  • fill: 当目标字段不存在时,设置目标字段。​
​
函数示例​
  • 场景:从日志 content 字段中按照“k3.k4” jmes 路径提取字段值输出到字段 k3-k4 中。​
  • 加工规则:​
  • ​
    ext_json_jmes("content", jmes="k3.k4", output="k3-k4")​
    ​
  • 日志样例:​
  • ​
    {​
    "content":"{\"k1\": 123, \"k2\": \"456\", \"k3\": {\"k4\": -34.5, \"k5\": true}}"​
    }​
    ​
  • 加工结果:​
  • ​
    {​
    "content":"{\"k1\": 123, \"k2\": \"456\", \"k3\": {\"k4\": \"-34.5\", \"k5\": true}}",​
    "k3-k4":"-34.5"​
    }​
    ​
ext_kv 函数​
基于两级分割符提取字段的值。​
函数语法/格式​
​
ext_kv(field, pair_sep="\s", kv_sep="=", prefix="", suffix="", mode="overwrite")​
​
参数说明如下:​
​
参数​
参数类型​
是否必选​
默认值​
取值范围​
说明​
field​
String​
是​
/​
/​
源字段名。​
pair_sep​
String​
否​
\s (空格)​
/​
一级分隔符,分割多个键值对。​
kv_sep​
String​
否​
=​
/​
二级分隔符,分割键和值。​
prefix​
String​
否​
/​
/​
新字段前缀。​
suffix​
String​
否​
/​
/​
新字段后缀。​
mode​
String​
否​
overwrite​
  • overwrite​
  • fill​
当指定字段不存在时的处理逻辑。​
  • overwrite: 覆盖写入。​
  • fill: 当目标字段不存在时,设置目标字段。​
​
函数示例​
  • 场景:提取日志中的 content 字段的值后,根据符号(&)将值分为键值对,再根据符号(=)将键值对分隔为键和值。​
  • 加工规则:​
  • ​
    ext_kv("content", pair_sep="&", kv_sep="=")​
    ​
  • 日志样例:​
  • ​
    {​
    "content":"f1=a&f2=b&f3=c"​
    }​
    ​
  • 加工结果:​
  • ​
    {​
    "content":"f1=a&f2=b&f3=c",​
    "f1":"a",​
    "f2":"b",​
    "f3":"c"​
    }​
    ​
ext_regex 函数​
根据指定的正则表达式提取指定字段的值,并赋值给其他字段。​
函数语法/格式​
​
ext_regex(field,regex="regex", output="输出字段", mode="fill")​
​
参数说明如下:​
​
参数​
参数类型​
是否必选​
默认值​
取值范围​
说明​
field​
String​
是​
/​
/​
待提取值的字段名称。如果指定的字段不存在,则不进行任何操作。​
regex​
String​
是​
/​
/​
用于提取字段的正则表达式。符合正则表达式规则的字段值将被提取。​
output​
String​
否​
/​
/​
匹配后输出字段。如果指定的字段不存在,则不进行任何操作。如果指定多个字段,则需要用英文逗号分隔。​
mode​
String​
否​
fill​
  • overwrite​
  • fill​
指定值对输出字段的覆盖模式。​
  • overwrite: 在任何情况下均默认覆盖写入。​
  • fill: 当目标字段不存在时,设置目标字段。​
​
函数示例​
函数示例 1:​
  • 场景:提取日志字段 call_record 通话记录中的呼叫者。​
  • 加工规则:​
  • ​
    ext_regex("call_record","\d{11}","caller")​
    ​
  • 日志样例:​
  • ​
    {​
    "call_record": "caller:13800000000 called:13800000001"​
    }​
    ​
  • 加工结果:​
  • ​
    {​
    "call_record": "caller:13800000000 called:13800000001",​
    "caller": "13800000000"​
    }​
    ​
函数示例 2:​
  • 场景:提取日志字段 call_record 通话记录中的呼叫者和被叫者。​
  • 加工规则:​
  • ​
    ext_regex("call_record","\d{11}","caller,called")​
    ​
  • 日志样例:​
  • ​
    {​
    "call_record": "caller:13800000000 called:13800000001"​
    }​
    ​
  • 加工结果:​
  • ​
    {​
    "call_record": "caller:13800000000 called:13800000001",​
    "caller": "13800000000",​
    "called": "13800000001"​
    }​
    ​
函数示例 3:​
  • 场景:提取日志字段 call_record 通话记录中的呼叫者,并覆盖 origin_caller 字段。​
  • 加工规则:​
  • ​
    ext_regex("call_record","\d{11}","origin_caller","overwrite")​
    ​
  • 日志样例:​
  • ​
    {​
    "call_record": "caller:13800000000 called:13800000001",​
    "origin_caller": "13800000002"​
    }​
    ​
  • 加工结果:​
  • ​
    {​
    "call_record": "caller:13800000000 called:13800000001",​
    "origin_caller": "13800000000"​
    }​
    ​
ext_grok 函数​
GROK 函数根据正则表达式提取特定的值,GROK表达式把常见的正则表达式定义好,比如IP地址、文件路径,直接使用即可。常见的 GROK 表达式请参考官方文档。​
函数语法/格式​
​
ext_grok(field, grok="通用 GROK 表达式", extend=自定义 GROK 表达式)​
​
参数说明如下:​
​
参数​
参数类型​
是否必选​
说明​
field​
String​
是​
待提取字段名。​
grok​
String​
是​
GROK 表达式。​
extend​
Dict​
否​
自定义 GROK 表达式,其中 key 和 value 必须是字符串格式。​
​
函数示例​
函数示例 1:​
  • 场景:计算日志字段 content 中的年月日和引用字符串。​
  • 加工规则:​
  • ​
    ext_grok("content","%{YEAR:year} %{MONTH:month} %{MONTHDAY:day} %{QUOTEDSTRING:motto}")​
    ​
  • 日志样例:​
  • ​
    {​
    "content":"2023 August 7 \"It is sunny day\""​
    }​
    ​
  • 加工结果:​
  • ​
    {​
    "content":"2023 August 7 \"It is sunny day\"",​
    "year": "2023",​
    "month": "August",​
    "day": "7",​
    "motto": "\"It is sunny day\""​
    }​
    ​
函数示例 2:​
  • 场景:根据自定义的 GROK 表达式,提取日志中的 ID。​
  • 加工规则:​
  • ​
    ext_grok("content", "%{ID1:user_id1},%{ID2:user_id2}",extend=dict_make("ID1","%{WORD}-%{INT}","ID2","%{WORD}-%{WORD}"))​
    ​
  • 日志样例:​
  • ​
    {​
    "content": "Chengdu-1023,Chongqing-Chongqing"​
    }​
    ​
  • 加工结果:​
  • ​
    {​
    "content": "Chengdu-1023,Chongqing-Chongqing",​
    "user_id1": "Chengdu-1023",​
    "user_id2": "Chongqing-Chongqing"​
    }​
    ​
​
最近更新时间:2026.10.16 15:59:53
这个页面对您有帮助吗?
有用
有用
无用
无用