无法在 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 版本就可以使用。如果没有它,它会制作字符串的浅表副本,因此当您将其小写时,它会被修改为相同的字符串。