0

我有一个格式如下的文件:

10302\t<document>.....</document>   
12303\t<document>.....</document>   
10054\t<document>.....</document>   
10034\t<document>.....</document>   

如您所见,有两个值由制表符分隔。我需要

  • 将第一个令牌(例如 10302、12303...)索引为 ID
  • 从第二个标记(XML 文档)中提取(然后索引)一些信息。换句话说,第二个标记将与 xml 过滤器一起用于提取一些信息

是否可以使用 kv 过滤器分离两个值?理想情况下,我应该以这样的文档结束每一行:

id:10302       
msg:<document>....</document>

我可以使用 grok 过滤器,但我想避免使用任何正则表达式,因为字段检测非常容易,并且可以通过简单的键值逻辑来完成。但是,使用普通的 kv 检测,我将以以下方式结束:

"10302": <document>.....</document>   
"12303": <document>.....</document>   
"10054": <document>.....</document>   
"10034": <document>.....</document>  

这不是我需要的。

4

1 回答 1

0

据我所知,不可能将 kv 用于您想做的工作,因为 id 没有可能的密钥(10302、10303、10304 ...)。没有可能的密钥,因为 id 之前没有任何内容。

假设每个 id + 文档都在同一行上,这个 grok 配置将起作用:

grok {
  match => { "message" => "^%{INT:ID}\t%{GREEDYDATA:msg}"}
}
于 2016-11-03T10:19:04.417 回答