Logstash - 来自 CSV 列的子字符串
Logstash - Substring from CSV column
我想将 CSV 文件中的许多信息导入 Elastic Search。
我的问题是我不知道如何使用等效的子字符串将 select 信息放入 CSV 列中。
在我的例子中,我有一个字段日期 (YYYYMMDD),我想要 (YYYY-MM-DD)。
我像这样使用过滤器、变异、gsub:
filter
{
mutate
{
gsub => ["date", "[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]", "[0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]"]
}
}
但我的结果是错误的。
我可以识别我的字符串,但我不知道如何提取其中的一部分。
我的目标是拥有类似的东西:
gsub => ["date", "[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]","%{date}(0..3}-%{date}(4..5)-%{date}"(6..7)]
%{date}(0..3} : select 从 csv 列的第一个到 4 个字符 date
您可以使用ruby
插件进行转换。如您所说,您将有一个 date
字段。所以,我们可以直接在ruby
中使用
filter {
ruby {
code => "
date = Time.strptime(event['date'],'%Y%m%d')
event['date_new'] = date.strftime('%Y-%m-%d')
"
}
}
date_new
字段是你想要的格式。
首先,您可以使用正则表达式范围来匹配序列,因此您可以使用 [0-9] 而不是 [0123456789]。如果你知道会有 4 个数字,你可以做 [0-9]{4}.
其次,您想要 "capture" 部分输入字符串并在输出中重新排序。为此,您需要捕获组:
([0-9]{4})([0-9]{2})([0-9]{2})
其中括号定义组。然后你可以参考你的gsub右边的那些:
--
\1为第一个捕获组等
你也可以考虑在做 grok{} 的时候得到这三个字段,然后再把它们放在一起(也许用 add_field)。
我想将 CSV 文件中的许多信息导入 Elastic Search。 我的问题是我不知道如何使用等效的子字符串将 select 信息放入 CSV 列中。
在我的例子中,我有一个字段日期 (YYYYMMDD),我想要 (YYYY-MM-DD)。
我像这样使用过滤器、变异、gsub:
filter
{
mutate
{
gsub => ["date", "[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]", "[0123456789][0123456789][0123456789][0123456789]-[0123456789][0123456789]-[0123456789][0123456789]"]
}
}
但我的结果是错误的。 我可以识别我的字符串,但我不知道如何提取其中的一部分。
我的目标是拥有类似的东西:
gsub => ["date", "[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]","%{date}(0..3}-%{date}(4..5)-%{date}"(6..7)]
%{date}(0..3} : select 从 csv 列的第一个到 4 个字符 date
您可以使用ruby
插件进行转换。如您所说,您将有一个 date
字段。所以,我们可以直接在ruby
filter {
ruby {
code => "
date = Time.strptime(event['date'],'%Y%m%d')
event['date_new'] = date.strftime('%Y-%m-%d')
"
}
}
date_new
字段是你想要的格式。
首先,您可以使用正则表达式范围来匹配序列,因此您可以使用 [0-9] 而不是 [0123456789]。如果你知道会有 4 个数字,你可以做 [0-9]{4}.
其次,您想要 "capture" 部分输入字符串并在输出中重新排序。为此,您需要捕获组:
([0-9]{4})([0-9]{2})([0-9]{2})
其中括号定义组。然后你可以参考你的gsub右边的那些:
--
\1为第一个捕获组等
你也可以考虑在做 grok{} 的时候得到这三个字段,然后再把它们放在一起(也许用 add_field)。