字段拆分
对不同结构数据的拆分成 Json 格式,发觉数据中有价值的信息。
关键术语
| 关键术语 | 描述 |
|---|---|
| Json拆分 | 一种基于Json数据封装的函数语法,可以在Json结构中拆分出需要的字段信息。 |
| Grok拆分 | 一种基于正则表达式封装的函数语法,常用于日志数据关键信息提取时使用。 |
| 结构数据 | 数据本身已经是非常规则的KV结构。 |
| 半结构数据 | 非结构数据,但数据本身也有一定的特性,按照一定规则可以分割出原子信息。 |
| 无序数据 | 非结构数据,数据完全无序,也没有特性规则。 |
前置条件
- 分析业务中的数据,包含哪些信息,需要处理到什么样的结果。
- ONE平台上接收的数据源中的原始数据,均封装在 _Message 字段中,同时添加一个 _Timestamp 字段来表示数据的接收时间。
开始使用
选择被拆分字段
组件支持配置多个字段的拆分,每次只能拆分一个字段。

设置拆分方式
支持 Json 格式数据拆分、自定义文本拆分、grok解析器拆分。
-
Json格式拆分:被拆分字段是Json数据类型,将Json按选择的Key进行拆分。

-
自定义文本拆分:可根据设定的文本分隔符进行数据切割,切割出来的每个部分都拆分为单独字段。

-
grok解析器:使用grok语法对文本数据进行拆分,适用于日志的文本字段的数据拆分。

验证
点击执行预览,在数据预览面板中查看,执行预览状态下是对数据处理的模拟,平台中不会产生真实数据。
Grok语法支持列表
语法介绍
%{Matcher:Extract:Filter}
- Matcher(必须): 一种规则,也可能是对另一个规则名称的引用,描述所期望的内容
- Extract (可选): 表示Matcher匹配的文本片段捕获后的目的地标识符,若不指定,则表示只匹配,不获取结果值
- Filter (可选): 对匹配到的结果进行转换处理
支持的Matcher
date("pattern")
目前支持的日期格式:
| 日期格式 | pattern | 解析结果 |
|---|---|---|
| 14:20:15 | HH:mm:ss | 22815000 |
| 02:20:15 PM | hh:mm:ss a | 22815000 |
| 11/10/2014 | dd/MM/yyyy | 1412956800000 |
| Thu Jun 16 08:29:03 2016 | EEE MMM dd HH:mm:ss yyyy | 1466036943000 |
| Tue Nov 1 08:29:03 2016 | EEE MMM d HH:mm:ss yyyy | 1477960143000 |
| 06/Mar/2013:01:36:30 +0900 | dd/MMM/yyyy:HH:mm:ss Z | 1468407336000 |
| 2016-11-29T16:21:36.431+0000 | yyyy-MM-dd'T'HH:mm:ss.SSSZ | 1480436496431 |
| 2016-11-29T16:21:36.431+00:00 | yyyy-MM-dd'T'HH:mm:ss.SSSZZ | 1480407696431 |
| 06/Feb/2009:12:14:14.655 | dd/MMM/yyyy:HH:mm:ss.SSS | 1233893654655 |
| 2007-08-31 19:22:22.427 ADT | yyyy-MM-dd HH:mm:ss.SSS z | 1188598942427 |
| 2023-04-13 22:01:10 | yyyy-MM-dd HH:mm:ss | 1681394470000 |
| 2023/04/13 22:01:10 | yyyy/MM/dd HH:mm:ss | 1681394470000 |
| 2023-04-13 22:01:10.211 | yyyy-MM-dd HH:mm:ss.SSS | 1681394470211 |
| 2023-04-13 22:01:10,211 | yyyy-MM-dd HH:mm:ss,SSS | 1681394470211 |
| 2023-Apr-20 09:49:18.813567 | yyyy-MMM-dd HH:mm:ss.SSSSSS | 1681955358000 |
| 13/Jul/2016:10:55:36 +0000 | dd/MMM/yyyy:HH:mm:ss Z | 1468407336000 |
| 2017-12-29T12:33:33.095243Z | yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ | 1514522013095 |
| 25 Apr 2023 10:16:52.612 | dd MMM yyyy HH:mm:ss.SSS | 1682389012612 |
| 2016-06-15 7:53:33 | yyyy-MM-dd H:mm:ss | 1465948413000 |
| 08 Jan 17:55:41.572 | dd MMM HH:mm:ss.SSS | 1673171741572 |
| 05-04 10:30:49.710 | MM-dd HH:mm:ss.SSS | 1683167449710 |
regex("pattern")
- pattern为正则表达式,使用时请注意特殊字符的转义问题
- 正则表达式语法:正则表达式 – 语法 | 菜鸟教程 (runoob.com)
notSpace
匹配任何非空白字符。等价于 " ^ \f\n\r\t\v "。
boolean("truePattern", "falsePattern")
匹配truePattern时,值为true;匹配falsePattern时,值为false
uuid
匹配64位格式的uuid,e.g:8fb9c71d-817b-4a6a-8fea-546860f258b5。
mac
匹配MAC地址。
ipv4
匹配IPV4地址。
ipv6
匹配IPV6地址。
ip
相当于ipv4或ipv6。
port
匹配服务器端口,1-65535。
word
匹配A-Z, a-z, 0-9的字符,包括_(下划线)字符。
data
- 匹配任何字符串,包括空格和换行。相当于正则表达式中的[\s\S]*?,当以上模式都不合适时使用。
- 注:此matcher默认使用的?符号属于懒惰模式,即最小匹配;当此matcher处于最后一个时才会变成贪婪模式,即最多匹配。
支持的Filter:
number
将匹配项解析为双精度数。
integer
将匹配项解析为整数。
boolean
将' true '和' false '字符串解析为忽略大小写的布尔值。
nullIf("value")
如果匹配值等于提供的值,则返回null。
lowercase
全部转小写。
uppercase
全部转大写。
json
将json字符串转为map的kv结构,支持两种语法格式:
1. %{data:aaa:json}
2. %{data::json}
url
- 解析URL并在JSON对象中返回所有标记化的成员(域、查询参数、端口等)。
- Grok语法:
r %{data:mapping:url}
解析目标:
http://localhost:8082/deploy/config/collection/log/dataprocessing
{
"mapping": {
"url": "http://localhost:8082/deploy/config/collection/log/dataprocessing",
"scheme": "http",
"host": "localhost",
"port": 8082,
"path": "/deploy/config/collection/log/dataprocessing"
}
}
keyvalue
| 字符串形式 | keyvalue写法 | 结果 | 备注 |
|---|---|---|---|
| key=valueStr | %{data::keyvalue} | {“key”: “valueStr”} | 单k:v切分 |
| key:valueStr | %{data::keyvalue(":")} | {“key”: “valueStr”} | |
| key=valueStr | %{data::keyvalue("=")} | {“key”: “valueStr”} | |
| key1: value1,key2: value2 | %{data::keyvalue(": ", ",")} | {key1: value1, key2: value2} | 多k:v切分 |
子规则说明
- helper rule又称为子规则,理论上是解析规则的一个补充引用
- 子规则的extract,也就是别名也会作为提取后的字段名称展示
- 子规则之间是可以被其它子规则引用的
- 需要注意的是,规则可以引用子规则,但子规则不能引用规则的解析式,防止递归无限死循环
示例:
日志原文:
com.bonree.one.Task.class INFO 2023-04-20 15:02:02 log
解析规则:
auto %{r:single}
子规则:
r %{data:className} %{word:level} %{ot:timestamp} log
ot %{date("yyyy-MM-dd HH:mm:ss"):timestampgg}
解析结果:
{
"single": "com.bonree.one.Task.class INFO 2023-04-20 15:02:02 log",
"timestampgg": 1681974122000,
"level": "INFO",
"className": "com.bonree.one.Task.class",
"timestamp": "2023-04-20 15:02:02"
}