为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

饮歌长啸 2022-08-04 15:51:19
我是新手。我有这个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”值时,我需要选择一个值。
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

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

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


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


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


最后,仅查找其中值为 “” 的结果x-real-ip


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


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

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


查看完整回答
反对 回复 2022-08-04
?
暮色呼如

TA贡献1853条经验 获得超9个赞

我尝试@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 combined

| search combined="x-real-ip*"


查看完整回答
反对 回复 2022-08-04
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

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*

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


查看完整回答
反对 回复 2022-08-04
  • 3 回答
  • 0 关注
  • 308 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信