将嵌套值分配给 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
以上是实际查询的一个端口,用于隔离问题。不过,问题是当我 运行 我的查询时,我可以看到:
- _时间
- 请求名称
- 状态
- 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
我在 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
以上是实际查询的一个端口,用于隔离问题。不过,问题是当我 运行 我的查询时,我可以看到:
- _时间
- 请求名称
- 状态
- 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