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

Igo*_*lio 5 javascript json analytics 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"
        }
Run Code Online (Sandbox Code Playgroud)

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

war*_*ren 4

有几种方法可以做到这一点 - 这是我最常使用的一种(假设您想要value旁边的name):

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

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

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

然后扩展结果集,以便您一次查看一行

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

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

| rex field-combined "\|(?<x_real_ip>.+)"
Run Code Online (Sandbox Code Playgroud)

当然,您可以对数据执行任何您希望的其他 SPL 操作