Splunk:从 JSON 结构中提取元素作为单独的字段
Splunk : Extracting the elements from JSON structure as separate fields
在 Splunk 中,我试图在 JSON 结构的“标签”元素中提取键值对,这样每个键值对都成为一个单独的列,以便我可以搜索它们。
例如:
| spath data | rename data.tags.EmailAddress AS Email
虽然这并没有帮助,但在 empty.I 尝试对所有标签执行此操作时出现电子邮件字段。任何 thoughts/pointers?
{
"timestamp": "2021-10-26T18:23:05.180707Z",
"data": {
"tags": [
{
"key": "Email",
"value": "john.doe@example.com"
},
{
"key": "ProjectCode",
"value": "ABCD"
},
{
"key": "Owner",
"value": "John Doe"
}
]
},
"field1": "random1",
"field2": "random2"
}
我认为可以如你所愿:
| spath data.tags{}
| mvexpand data.tags{}
| spath input=data.tags{}
| table key value
| transpose header_field=key
| fields - column
工作原理:
| spath data.tags{}
采用 json 并创建一个多值字段,其中包含标签数组中的每个项目
| mvexpand data.tags{}
将多值字段拆分为单独的事件 - 每个事件都包含标签数组中的一项
| spath input=data.tags{}
在每个事件中获取 json 并为该项目中的每个 KVP 创建一个字段(在本例中为 key
和 value
)
| table key value
限制对这两个字段的进一步命令
| transpose header_field=key
为 key
字段的每个值创建一个字段(包括名为 column
的字段)`
| fields - column
从输出中删除 column
字段
这是一个完全可运行的示例:
| makeresults
| eval _raw="
{
\"timestamp\": \"2021-10-26T18:23:05.180707Z\",
\"data\": {
\"tags\": [
{\"key\": \"Email\", \"value\": \"john.doe@example.com\"},
{\"key\": \"ProjectCode\", \"value\": \"ABCD\"},
{\"key\": \"Owner\", \"value\": \"John Doe\"}
]
},
\"field1\": \"random1\",
\"field2\": \"random2\"
}
"
| spath data.tags{}
| mvexpand data.tags{}
| spath input=data.tags{}
| table key value
| transpose header_field=key
它创建了这个输出:
+----------------------+-------------+----------+
| Email | ProjectCode | Owner |
+----------------------+-------------+----------+
| john.doe@example.com | ABCD | John Doe |
+----------------------+-------------+----------+
在 Splunk 中,我试图在 JSON 结构的“标签”元素中提取键值对,这样每个键值对都成为一个单独的列,以便我可以搜索它们。 例如:
| spath data | rename data.tags.EmailAddress AS Email
虽然这并没有帮助,但在 empty.I 尝试对所有标签执行此操作时出现电子邮件字段。任何 thoughts/pointers?
{
"timestamp": "2021-10-26T18:23:05.180707Z",
"data": {
"tags": [
{
"key": "Email",
"value": "john.doe@example.com"
},
{
"key": "ProjectCode",
"value": "ABCD"
},
{
"key": "Owner",
"value": "John Doe"
}
]
},
"field1": "random1",
"field2": "random2"
}
我认为可以如你所愿:
| spath data.tags{}
| mvexpand data.tags{}
| spath input=data.tags{}
| table key value
| transpose header_field=key
| fields - column
工作原理:
| spath data.tags{}
采用 json 并创建一个多值字段,其中包含标签数组中的每个项目
| mvexpand data.tags{}
将多值字段拆分为单独的事件 - 每个事件都包含标签数组中的一项
| spath input=data.tags{}
在每个事件中获取 json 并为该项目中的每个 KVP 创建一个字段(在本例中为 key
和 value
)
| table key value
限制对这两个字段的进一步命令
| transpose header_field=key
为 key
字段的每个值创建一个字段(包括名为 column
的字段)`
| fields - column
从输出中删除 column
字段
这是一个完全可运行的示例:
| makeresults
| eval _raw="
{
\"timestamp\": \"2021-10-26T18:23:05.180707Z\",
\"data\": {
\"tags\": [
{\"key\": \"Email\", \"value\": \"john.doe@example.com\"},
{\"key\": \"ProjectCode\", \"value\": \"ABCD\"},
{\"key\": \"Owner\", \"value\": \"John Doe\"}
]
},
\"field1\": \"random1\",
\"field2\": \"random2\"
}
"
| spath data.tags{}
| mvexpand data.tags{}
| spath input=data.tags{}
| table key value
| transpose header_field=key
它创建了这个输出:
+----------------------+-------------+----------+
| Email | ProjectCode | Owner |
+----------------------+-------------+----------+
| john.doe@example.com | ABCD | John Doe |
+----------------------+-------------+----------+