消除Logstash中的顶级字段

Mat*_*ttW 4 logstash

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

[message][UrlVisited]
[message][TotalDuration]
[message][AccountsProcessed]
Run Code Online (Sandbox Code Playgroud)

我希望能够折叠这些字段,完全删除顶级消息.所以上面的字段将成为:

[UrlVisited]
[TotalDuration]
[AccountsProcessed]
Run Code Online (Sandbox Code Playgroud)

有没有办法在Logstash中执行此操作?

Mag*_*äck 10

假设所有这些子字段的名称都是事先知道的,您可以使用mutate过滤器:

filter {
  mutate {
    rename => ["[message][UrlVisited]", "UrlVisited"]
  }
  mutate {
    rename => ["[message][TotalDuration]", "TotalDuration"]
  }
  mutate {
    rename => ["[message][AccountsProcessed]", "AccountsProcessed"]
  }
  mutate {
    remove_field => ["message"]
  }
}
Run Code Online (Sandbox Code Playgroud)

或者,使用ruby过滤器(即使您不知道字段名称也可以使用):

filter {
  ruby {
    code => "
      event.get('message').each {|k, v|
        event.set(k, v)
      }
      event.remove('message')
    "
  }
}
Run Code Online (Sandbox Code Playgroud)

此示例适用于Logstash 2.4及更高版本.对于早期版本使用event['message'].each ...event[k] = v替代.