Ruby Can';t克隆Logstash中的字段,并且仅将其中一个字段小写
我使用LogstashRSS输入来收集和标记谷歌新闻提醒。为了正确地标记,我想首先规范化文本,并维护原始的大小写以便在UI上显示 我尝试了以下方法,但每种组合似乎都以原始字段和克隆字段小写结束,而没有特别询问Logstash 方法一-使用mutate{add_字段Ruby Can';t克隆Logstash中的字段,并且仅将其中一个字段小写,ruby,logstash,logstash-configuration,Ruby,Logstash,Logstash Configuration,我使用LogstashRSS输入来收集和标记谷歌新闻提醒。为了正确地标记,我想首先规范化文本,并维护原始的大小写以便在UI上显示 我尝试了以下方法,但每种组合似乎都以原始字段和克隆字段小写结束,而没有特别询问Logstash 方法一-使用mutate{add_字段 input { rss { [my RSS feed URLs] } } filter { mutate { add_field => ["displayTitle", "%{@title}"]
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 {}
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 {}
方法三-使用克隆插件克隆事件
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 {}
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 {}
这三种方法都会生成输出,其中“displaytile”和“title”字段都是小写的,尽管我只在title字段上使用了mutate{lowercase=>
“displayText”和“message”字段也是如此。我希望displayTitle和displayMessage字段与原始大小写保持一致
感谢您的帮助!正如@alain collins指出的,您必须在第二个块中使用小写字母 原因与logstash的工作方式有关。它从
过滤器
类继承了add\u字段
等方法。add\u字段仅在所有mutate
过滤器完成后才被调用
因此,您需要这样做:
mutate {
add_field => {
"displayTitle" => "%{title}",
"displayMessage" => "%{message}"
}
}
mutate { lowercase => [ "title","message" ] }
如果您在末尾添加.clone,您的ruby版本就可以运行了。如果不添加.clone,它将生成字符串的浅层副本,因此当您将其小写时,它将被修改为同一个字符串。尝试在第二个筛选器中使用小写{}block.Thank@AlainCollins!这似乎确实有效。非常非常感谢@Alcanzar。我感谢对底层功能的解释。我尝试了Alain的建议,在我将add_字段{}块移到最后,移到其他过滤器块之后,它起了作用。