如何使用这两个键值对使用 CEF 数据扩展此 RegEx?
How do I extend this RegEx with CEF data with these two KeyValue pairs?
我目前有这个正则表达式:
?P<key>\w+)=(?P<value>[a-zA-Z0-9-_:/@. ]+
输入第 1 行:event=1921;json={"source":"A","location":B":"folder":"c:\windows\system32"},"id":2,"address":null,"name":"gone";
输入第 2 行:dev=b;json={"dest":"123","home":AZ":"loc":"sys"},"ab":9,"home":null,"someKey":"someValue";
它正确地提取了“event=1921;”但确实提取了其他两种类型。
- 如何使用键 (JSON) 和值提取
"json={...}"
?
- 如何使用键(名称)和值(消失)提取
"name":"gone"
?
解决方案需要是动态的,因为关键字段在其他行中的命名方式不同。
您应该可以使用 parse
运算符:https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/parseoperator
例如:
print input = 'event=1921;json={"source":"A","location":B":"folder":"c:\windows\system32"},"id":2,"address":null,"name":"gone";'
| parse input with * "json=" json:dynamic ',"id"' * '"name":"' name '"' *
如果您的负载/属性 名称完全是动态的,那么:
一个。我建议您评估以标准格式构建源数据的选项(目前,即使是“json
”部分也无效 JSON)
b。您可以尝试以下 - 功能正常,但效率很低(不推荐用于大规模数据处理)
datatable(input:string)
[
'event=1921;json={"source":"A","location":B":"folder":"c:\windows\system32"},"id":2,"address":null,"name":"gone";',
'dev=b;json={"dest":"123","home":AZ":"loc":"sys"},"ab":9,"home":null,"someKey":"someValue";'
]
| parse input with prefix ";json={" json:dynamic '},' suffix
| mv-apply x = extract_all(@'(\w+)=(\w+)', prefix) on (
project p = pack(tostring(x[0]), x[1])
| summarize b1 = make_bag(p)
)
| mv-apply y = extract_all(@'"(\w+)":"?(\w+)"?', suffix) on (
project p = pack(tostring(y[0]), y[1])
| summarize b2 = make_bag(p)
)
| project json = strcat("{", json, "}"), b = bag_merge(b1, b2)
| evaluate bag_unpack(b)
我目前有这个正则表达式:
?P<key>\w+)=(?P<value>[a-zA-Z0-9-_:/@. ]+
输入第 1 行:event=1921;json={"source":"A","location":B":"folder":"c:\windows\system32"},"id":2,"address":null,"name":"gone";
输入第 2 行:dev=b;json={"dest":"123","home":AZ":"loc":"sys"},"ab":9,"home":null,"someKey":"someValue";
它正确地提取了“event=1921;”但确实提取了其他两种类型。
- 如何使用键 (JSON) 和值提取
"json={...}"
? - 如何使用键(名称)和值(消失)提取
"name":"gone"
? 解决方案需要是动态的,因为关键字段在其他行中的命名方式不同。
您应该可以使用 parse
运算符:https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/parseoperator
例如:
print input = 'event=1921;json={"source":"A","location":B":"folder":"c:\windows\system32"},"id":2,"address":null,"name":"gone";'
| parse input with * "json=" json:dynamic ',"id"' * '"name":"' name '"' *
如果您的负载/属性 名称完全是动态的,那么:
一个。我建议您评估以标准格式构建源数据的选项(目前,即使是“json
”部分也无效 JSON)
b。您可以尝试以下 - 功能正常,但效率很低(不推荐用于大规模数据处理)
datatable(input:string)
[
'event=1921;json={"source":"A","location":B":"folder":"c:\windows\system32"},"id":2,"address":null,"name":"gone";',
'dev=b;json={"dest":"123","home":AZ":"loc":"sys"},"ab":9,"home":null,"someKey":"someValue";'
]
| parse input with prefix ";json={" json:dynamic '},' suffix
| mv-apply x = extract_all(@'(\w+)=(\w+)', prefix) on (
project p = pack(tostring(x[0]), x[1])
| summarize b1 = make_bag(p)
)
| mv-apply y = extract_all(@'"(\w+)":"?(\w+)"?', suffix) on (
project p = pack(tostring(y[0]), y[1])
| summarize b2 = make_bag(p)
)
| project json = strcat("{", json, "}"), b = bag_merge(b1, b2)
| evaluate bag_unpack(b)