Splunk:从 JSON 结构中提取元素作为单独的字段

Ash*_*pta 5 splunk splunk-query

在 Splunk 中,我尝试提取 JSON 结构的“标签”元素内的键值对,以便每个键值对成为一个单独的列,以便我可以搜索它们。例如 :

| spath data | rename data.tags.EmailAddress AS Email
Run Code Online (Sandbox Code Playgroud)

但这并没有帮助,电子邮件字段为空。我正在尝试对所有标签执行此操作。有什么想法/指示吗?

{
    "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"
}
Run Code Online (Sandbox Code Playgroud)

Jer*_*iah 11

我认为做你想要的:

 | spath data.tags{}
 | mvexpand data.tags{}
 | spath input=data.tags{}
 | table key value
 | transpose header_field=key
 | fields - column
Run Code Online (Sandbox Code Playgroud)

怎么运行的:

| spath data.tags{}获取 json 并创建一个多值字段,其中包含标签数组中的每个项目

| mvexpand data.tags{}将多值字段拆分为单独的事件 - 每个事件都包含标签数组中的一项

| spath input=data.tags{}获取每个事件中的 json 并为该项目中的每个 KVP 创建一个字段(keyvalue本例中)

| table key value限制对这两个字段的进一步命令

| transpose header_field=key为字段的每个值创建一个字段key(包括名为 的字段column)`

| fields - columncolumn从输出中删除该字段

这是一个完全可运行的示例:

| 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
Run Code Online (Sandbox Code Playgroud)

它创建以下输出:

+----------------------+-------------+----------+
| Email                | ProjectCode | Owner    |
+----------------------+-------------+----------+
| john.doe@example.com | ABCD        | John Doe |
+----------------------+-------------+----------+
Run Code Online (Sandbox Code Playgroud)