无法在 Logstash 中克隆一个字段,只能将其中一个小写
Can't clone a field in Logstash and only lowercase one of them
我正在使用 Logstash RSS 输入来收集和标记 Google 新闻提醒。为了正确标记,我想先规范化文本,并保持原始大小写以显示在 UI.
我尝试了以下方法,但似乎每个组合都以原始字段和克隆字段小写结束,而没有特别询问 Logstash。
方法一-使用mutate { add_field
input {
rss { [my RSS feed URLs] }
}
filter {
mutate
{
add_field => ["displayTitle", "%{@title}"] }
mutate
{
add_field => ["displayText", "%{@message}"] }
mutate {
lowercase => [ "title","message" ] }
if "3d-print" in [title] or "3d-print" in [message] { mutate { add_tag => "3d printing" } }
output {}
方法二-使用Ruby代码克隆事件
input {
rss { [my RSS feed URLs] }
}
filter {
ruby {
code => "event['displayTitle'] = event['title']" }
ruby {
code => "event['displayText'] = event['message']" }
mutate {
lowercase => [ "title","message" ] }
if "3d-print" in [title] or "3d-print" in [message] { mutate { add_tag => "3d printing" } }
output {}
方法三-使用Clone插件克隆事件
input {
rss { [my RSS feed URLs] }
}
filter {
clone {
add_field => { "%{title}" => "displayTitle" } }
mutate {
lowercase => [ "title","message" ] }
if "3d-print" in [title] or "3d-print" in [message] { mutate { add_tag => "3d printing" } }
output {}
尽管我只在标题字段上使用了 mutate { lowercase => ,但所有这三种方法都会生成同时将 'displayTitle' 和 'title' 字段小写的输出。
'displayText'和'message'字段也是如此。我希望 displayTitle 和 displayMessage 字段与原始外壳一起保留。
感谢您的帮助!
正如@alain-collins 所指出的,您必须在第二个块中使用小写字母。
这与 logstash 的工作原理有关。它从 filter
class 继承了 add_field
等方法。 add_field 只有在完成所有 mutate
过滤器后才会被调用。
所以你需要这样做:
mutate {
add_field => {
"displayTitle" => "%{title}",
"displayMessage" => "%{message}"
}
}
mutate { lowercase => [ "title","message" ] }
如果您在末尾添加 .clone,您的 ruby 版本就可以使用。如果没有它,它会制作字符串的浅表副本,因此当您将其小写时,它会被修改为相同的字符串。
我正在使用 Logstash RSS 输入来收集和标记 Google 新闻提醒。为了正确标记,我想先规范化文本,并保持原始大小写以显示在 UI.
我尝试了以下方法,但似乎每个组合都以原始字段和克隆字段小写结束,而没有特别询问 Logstash。
方法一-使用mutate { add_field
input {
rss { [my RSS feed URLs] }
}
filter {
mutate
{
add_field => ["displayTitle", "%{@title}"] }
mutate
{
add_field => ["displayText", "%{@message}"] }
mutate {
lowercase => [ "title","message" ] }
if "3d-print" in [title] or "3d-print" in [message] { mutate { add_tag => "3d printing" } }
output {}
方法二-使用Ruby代码克隆事件
input {
rss { [my RSS feed URLs] }
}
filter {
ruby {
code => "event['displayTitle'] = event['title']" }
ruby {
code => "event['displayText'] = event['message']" }
mutate {
lowercase => [ "title","message" ] }
if "3d-print" in [title] or "3d-print" in [message] { mutate { add_tag => "3d printing" } }
output {}
方法三-使用Clone插件克隆事件
input {
rss { [my RSS feed URLs] }
}
filter {
clone {
add_field => { "%{title}" => "displayTitle" } }
mutate {
lowercase => [ "title","message" ] }
if "3d-print" in [title] or "3d-print" in [message] { mutate { add_tag => "3d printing" } }
output {}
尽管我只在标题字段上使用了 mutate { lowercase => ,但所有这三种方法都会生成同时将 'displayTitle' 和 'title' 字段小写的输出。
'displayText'和'message'字段也是如此。我希望 displayTitle 和 displayMessage 字段与原始外壳一起保留。
感谢您的帮助!
正如@alain-collins 所指出的,您必须在第二个块中使用小写字母。
这与 logstash 的工作原理有关。它从 filter
class 继承了 add_field
等方法。 add_field 只有在完成所有 mutate
过滤器后才会被调用。
所以你需要这样做:
mutate {
add_field => {
"displayTitle" => "%{title}",
"displayMessage" => "%{message}"
}
}
mutate { lowercase => [ "title","message" ] }
如果您在末尾添加 .clone,您的 ruby 版本就可以使用。如果没有它,它会制作字符串的浅表副本,因此当您将其小写时,它会被修改为相同的字符串。