将嵌套值分配给 Splunk 中的变量

Assign Nested Value to Variable in Splunk

我在 Splunk 中有一个事件日志,如下所示:

{ 
  "event": { 
    "Id":"12345",
    "Name": "My Event",
    "Inputs": {
      "Param1":"some value",
      "Param2":"another value"
    },
    "Result": {
      "statusCode":"304"
    }
  }
}

我需要从 Result 中获取 statusCode 的值以确定我收到的错误类型。目前,我正在使用以下 Splunk 查询:

index="myIndex"
sourcetype="*"
| spath=event
| fields
  _time
  Name
  Result.statusCode
| eval _status="tbd"
| eval _code=statusCode
| eval _code=case(statusCode>=200 AND statusCode<300, "OK", statusCode>=300 AND statusCode<400, "Redirected", statusCode>=400 AND statusCode<500, "User Error", statusCode>500, "Server Error")
| rename
  Name as RequestName
  _code as StatusCode
  _status as Status
| table
  _time
  RequestName
  Status
  StatusCode
  Result.statusCode

以上是实际查询的一个端口,用于隔离问题。不过,问题是当我 运行 我的查询时,我可以看到:

奇怪的是,让我感到困惑的是,我看不到 StatusCode。我需要一个变量来进行额外的处理,这就是我使用 eval _code 语句的原因。但是,我没有使用 Result.statusCode 作为变量。我错过了什么?

避免在字段(“变量”)名称中使用前导下划线,因为默认情况下它们是隐藏的。有些只能在将它们的值分配给另一个字段后才能使用。

此外,创建一个字段然后重命名它是不必要的,除非最终的字段名称包含空格或特殊字符。

查询中似乎缺少某些内容,因为只有 _time 和 Result.statusCode 字段存在,但经常使用 statusCode。如果 statusCode 不存在,case 函数将 return null。 Name 字段也不存在,所以我不明白您如何看到 RequestName。

index="myIndex"
sourcetype="*"
| spath event
| fields
  _time
  Result.statusCode
| eval Status="tbd", statusCode='Result.statusCode'
| eval StatusCode=case(statusCode>=200 AND statusCode<300, "OK", 
                       statusCode>=300 AND statusCode<400, "Redirected", 
                       statusCode>=400 AND statusCode<500, "User Error", 
                       statusCode>500, "Server Error",
                       1==1, statusCode)
| rename
  Name as RequestName
| table
  _time
  RequestName
  Status
  StatusCode
  Result.statusCode