Splunk - 用点/句点提取字段

时间:2017-09-21 12:54:15

标签: regex splunk rex

似乎无法提取名称中包含.的字段。

我正在尝试在旧数据上使用字段提取器来创建与较新数据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'命令出错:编译正则表达式时遇到以下错误'(?[^,] +)':正则表达式:子模式名称中的语法错误(缺少终结符)

从'字段»字段提取»添加新的'我得到:

  

尝试保存时遇到以下错误:正则表达式:子模式名称中的语法错误(缺少终结符)

关于如何解决这个问题的任何想法?

1 个答案:

答案 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'