0

似乎没有办法提取.名称中带有 a 的字段。

我正在尝试对旧数据使用字段提取器来创建与新数据 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”原型和“字段提取”页面中出现相同的错误消息。

从'rex'原型我得到:

“rex”命令出错:编译正则表达式“(?[^,]+)”时遇到以下错误:Regex: syntax error in subpattern name (missing terminator)

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

尝试保存时遇到以下错误:Regex: syntax error in subpattern name (missing terminator)

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

4

1 回答 1

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'
于 2017-09-30T21:49:37.873 回答