获取SPLUNK数组中的指定元素



我是splunk的新手。我有这个json:

"request": {
"headers": [
{
"name": "x-real-ip",
"value": "10.31.68.186"
},
{
"name": "x-forwarded-for",
"value": "10.31.68.186"
},
{
"name": "x-nginx-proxy",
"value": "true"
}

当属性名称具有"x-real-ip"值时,我需要选择一个值。

有几种方法可以做到这一点-这里是我最常用的方法(假设您想要valuename(:

index=ndx sourcetype=srctp request.headers{}.name="x-real-ip"
| eval combined=mvzip(request.headers{}.name,request.headers{}.value,"|")
| mvexpand combined
| search combined="x-real-ip*"

这将跳过所有没有";CCD_ 3";request.headers{}.name多值字段中的某个位置

接下来,它将两个多值字段(名称和值(合并为一个mv字段,由|字符分隔

然后展开结果集,这样你就可以一次看到一行

最后,只查找值为"的结果;CCD_ 6";其中

如果您想从组合字段中提取value,请添加以下行:

| rex field-combined "|(?<x_real_ip>.+)"

当然,你也可以对你的数据进行任何其他SPL操作,你希望

我尝试了@Warren的答案,但我得到了以下错误:

"eval"命令中的错误:表达式格式错误。应为(。

您需要添加重命名,因为mvzip中的{}字符会导致问题。这是一个有效的查询:

index=ndx sourcetype=srctp request.headers{}.name="x-real-ip"
| rename request.headers{}.name AS headerName, request.headers{}.value AS headerValue 
| eval reviewers=mvzip(headerName,headerValue ,"|")
| mvexpand reviewers
| search reviewers="x-real-ip*"
your search
| rex max_match=0 "name":s"(?<fieldname>[^"]+)"
| rex max_match=0 "value":s"(?<fieldvalue>[^"]+)"
| eval tmp=mvzip(fieldname,fieldvalue,"=")
| rename tmp as _raw
| kv
| fields - _* field*

当你提出问题时,请提供正确的信息。在此过程中,日志已用完。

最新更新