消除Logstash中的顶级字段

消除Logstash中的顶级字段,logstash,Logstash,我正在使用Logstash,我的一个应用程序向我发送如下字段: [message][UrlVisited] [message][TotalDuration] [message][AccountsProcessed] 我希望能够折叠这些字段,同时删除顶级消息。因此,上述字段将变为: [UrlVisited] [TotalDuration] [AccountsProcessed] 在Logstash中有这样做的方法吗?假设预先知道所有这些子字段的名称,您可以使用: 或者,使用a(即使您不知道字段

我正在使用Logstash,我的一个应用程序向我发送如下字段:

[message][UrlVisited]
[message][TotalDuration]
[message][AccountsProcessed]
我希望能够折叠这些字段,同时删除顶级消息。因此,上述字段将变为:

[UrlVisited]
[TotalDuration]
[AccountsProcessed]

在Logstash中有这样做的方法吗?

假设预先知道所有这些子字段的名称,您可以使用:

或者,使用a(即使您不知道字段名也可以使用):


此示例适用于Logstash2.4及更高版本。对于早期版本,请使用
event['message']。每个…
event[k]=v

谢谢!我试图避免这种情况。新的数据字段将经常被添加,我正试图避免每次都会破坏日志存储配置。@MattW:所以。。。那么ruby过滤器会不会有帮助呢?哦,哇,不知怎么的,我把答案的第二部分给遮住了。这很有效。谢谢你的帮助-我很感激!我们现在必须使用get&set方法访问事件,您应该更新答案。
filter {
  mutate {
    rename => ["[message][UrlVisited]", "UrlVisited"]
  }
  mutate {
    rename => ["[message][TotalDuration]", "TotalDuration"]
  }
  mutate {
    rename => ["[message][AccountsProcessed]", "AccountsProcessed"]
  }
  mutate {
    remove_field => ["message"]
  }
}
filter {
  ruby {
    code => "
      event.get('message').each {|k, v|
        event.set(k, v)
      }
      event.remove('message')
    "
  }
}