如何使用这两个键值对使用 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;”但确实提取了其他两种类型。

  1. 如何使用键 (JSON) 和值提取 "json={...}"
  2. 如何使用键(名称)和值(消失)提取 "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)