我知道grok模式,能够使用带有过滤器和grok模式的logstash配置文件解析数据并将其存储到弹性搜索中。
例如:如果数据输入行为:
Start-field1|field2|field3
那么field1、field2、field3正在被解析并成功存储到弹性搜索中,没有任何问题。
但现在我有一个输入行,如下所示:
Start-field1|field2|field3#Start-field1|field2|field3#Start-field1|field2|field3
意味着在同一输入行中多次出现所需模式,Start作为模式的开始,#在所有所需模式中。
有什么方法可以获取所有这些字段并存储到弹性搜索中吗?
您可以根据需要使用(?:case1|case2)
。在每种情况下,您都可以使用相同的模式,如下所示:(?:|Start-your_pattern) (?:|Start-your_pattern) (?:|Start-your_pattern)
还可以多次使用相同的字段名。通过这种方式,您可以存储字段及其所有值。这是通过多次使用%{DATA:field1}, %{DATA:field2} and %{DATA:field3}
来完成的。
例如:
Start - John 5 apples # Start - Joe 10 beers # Start - Max 2 eggs
使用以下模式:
Start - %{DATA:field1} %{DATA:field2} %{DATA:field3} (?:|# Start - %{DATA:field1} %{DATA:field2} %{DATA:field3}) (?:|# Start - %{DATA:field1} %{DATA:field2} %{DATA:field3})
你会得到这样的输出:
{
"field1": [
[
"John",
"Joe",
"Max"
]
],
"field2": [
[
"5",
"10",
"2"
]
],
"field3": [
[
"apples",
"beers",
"eggs"
]
]
}
试穿一下http://grokdebug.herokuapp.com/