似乎无法提取名称中包含.
的字段。
我正在尝试在旧数据上使用字段提取器来创建与较新数据JSON字段匹配的字段。
{ "pirate": { "say ": "Shiver me timbers" } }
pirate.say = "Shiver me timbers"
要测试这个,你可以这样做:
| metadata type=hosts index=_internal
| head 1
| eval message="Shiver me timbers, goes the pirate"
| table message
| rex field=message "(?<pirate.say>[^,]+)"
但我所得到的所有努力都是上述“rex”原型和“Field extractions”页面中的相同错误信息。
从'rex'原型我得到:
'rex'命令出错:编译正则表达式时遇到以下错误'(?[^,] +)':正则表达式:子模式名称中的语法错误(缺少终结符)
从'字段»字段提取»添加新的'我得到:
尝试保存时遇到以下错误:正则表达式:子模式名称中的语法错误(缺少终结符)
关于如何解决这个问题的任何想法?
答案 0 :(得分:1)
这里有几件不同的事情。
首先,不,您无法在提取的字段名称中创建带有点的正则表达式。 (在regex101.com上测试过,它不起作用。)
从JSON中提取时,splunk可以创建其中包含点的字段,表示JSON的层次结构。
另一方面,当从普通数据中自动提取时,splunk通常会用下划线替换无效字符。
要提取JSON,通常使用spath命令。
要提取正则表达式,只需给它一个有效的名称,然后重命名以包含点。
| makeresults
| eval message="Shiver me timbers, goes the pirate"
| table message
| rex field=message "(?<piratesays>[^,]+)"
| rename piratesays as "pirate.say"
我忘记了你是否需要单引号或双引号用于奇数名称,所以如果这不起作用,试试这个。
| rename piratesays as 'pirate.say'