重复 grok 模式
Repeat grok pattern
我收到一条这样的消息 "Something word word 20/07/2018 word word 25/04/2015"。我如何使用 grok 模式或客户模式获取所有日期并将它们添加到一个新的数组字段中?
我尝试使用自定义正则表达式模式,但是当我指定全局标志时,ES 无法识别“/g”flag.The问题是我不知道我将有多少个日期文件因为是发票或其他类型的文件,里面有很多 dates/numbers。
由于您在评论部分中声明您可以自由实施,我将使用 logstashs ruby 过滤器并借助本文解决此问题:
https://zzamboni.org/post/capturing-multiple-matches-in-ruby/
(抱歉没有格式化 link,但我现在正在使用手机 phone。)
本文介绍了如何将字符串与正则表达式进行匹配并将找到的所有值存储在数组中。
所以过滤器看起来像这样(未经测试):
filter{
ruby{
code => '
my_string = event.get("my_field")
my_array = my_string.scan(/[0-9]+\/[0-9]+\/[0-9]+/)
event.set("my_array_field_name", my_array)
'
}
}
通过使用这个骨架,您应该能够解决问题。另请查看文档。
我收到一条这样的消息 "Something word word 20/07/2018 word word 25/04/2015"。我如何使用 grok 模式或客户模式获取所有日期并将它们添加到一个新的数组字段中?
我尝试使用自定义正则表达式模式,但是当我指定全局标志时,ES 无法识别“/g”flag.The问题是我不知道我将有多少个日期文件因为是发票或其他类型的文件,里面有很多 dates/numbers。
由于您在评论部分中声明您可以自由实施,我将使用 logstashs ruby 过滤器并借助本文解决此问题:
https://zzamboni.org/post/capturing-multiple-matches-in-ruby/
(抱歉没有格式化 link,但我现在正在使用手机 phone。)
本文介绍了如何将字符串与正则表达式进行匹配并将找到的所有值存储在数组中。
所以过滤器看起来像这样(未经测试):
filter{
ruby{
code => '
my_string = event.get("my_field")
my_array = my_string.scan(/[0-9]+\/[0-9]+\/[0-9]+/)
event.set("my_array_field_name", my_array)
'
}
}
通过使用这个骨架,您应该能够解决问题。另请查看文档。