获取 json 数组中的指定元素 - SPLUNK

Get Specified element in array of json - 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" 值时,我需要选择一个值。

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*

当您提问时,请提供正确的信息。 您 运行 在此过程中没有日志。

有几种方法可以做到这一点 - 这是我最常用的方法(假设你 想要 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*"

这会跳过 request.headers{}.name 多值字段中某处没有“x-real-ip”的所有事件

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

然后扩展结果集,这样您一次只能查看一行

最后,您只 查找其中包含值“x-real-ip”的结果

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

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

当然,您可以根据需要对数据执行任何其他 SPL 操作