Ruby Can';t克隆Logstash中的字段,并且仅将其中一个字段小写

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}"]

我使用LogstashRSS输入来收集和标记谷歌新闻提醒。为了正确地标记,我想首先规范化文本,并维护原始的大小写以便在UI上显示

我尝试了以下方法,但每种组合似乎都以原始字段和克隆字段小写结束,而没有特别询问Logstash

方法一-使用mutate{add_字段

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_字段{}块移到最后,移到其他过滤器块之后,它起了作用。