Получить указанный элемент в массиве json - SPLUNK - PullRequest
0 голосов
/ 07 мая 2020

Я новичок ie в 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».

Ответы [ 2 ]

0 голосов
/ 11 мая 2020

Есть несколько способов сделать это - вот тот, который я использую чаще всего (предполагая, что вы также хотите 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*"

Это пропускает все события, у которых нет "x-real-ip" где-нибудь в request.headers{}.name многозначном поле

Затем он объединяет два многозначных поля (имя и значение) в одно поле mv, разделенное | символ

Затем разверните набор результатов так, чтобы вы просматривали по одной строке за раз

Наконец, вы ищете только результатов со значением "x-real-ip "в них

Если вы хотите затем извлечь value из объединенного поля, добавьте следующую строку:

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

И, конечно, вы можете сделать любые другие операции SPL с вашими данными sh

0 голосов
/ 09 мая 2020
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*

Задавая вопрос, укажите верную информацию. У вас закончились журналы процесса.

...