去掉 Logstash 中的顶级字段
Eliminate the top-level field in Logstash
我正在使用 Logstash,我的一个应用程序向我发送如下字段:
[message][UrlVisited]
[message][TotalDuration]
[message][AccountsProcessed]
我希望能够折叠这些字段,完全删除顶级 message。所以上面的字段会变成:
[UrlVisited]
[TotalDuration]
[AccountsProcessed]
有没有办法在 Logstash 中做到这一点?
假设所有此类子字段的名称都是事先已知的,您可以使用 mutate filter:
filter {
mutate {
rename => ["[message][UrlVisited]", "UrlVisited"]
}
mutate {
rename => ["[message][TotalDuration]", "TotalDuration"]
}
mutate {
rename => ["[message][AccountsProcessed]", "AccountsProcessed"]
}
mutate {
remove_field => ["message"]
}
}
或者,使用 ruby filter(即使您不知道字段名称也可以):
filter {
ruby {
code => "
event.get('message').each {|k, v|
event.set(k, v)
}
event.remove('message')
"
}
}
此示例适用于 Logstash 2.4 及更高版本。对于早期版本,请改用 event['message'].each ...
和 event[k] = v
。
我正在使用 Logstash,我的一个应用程序向我发送如下字段:
[message][UrlVisited]
[message][TotalDuration]
[message][AccountsProcessed]
我希望能够折叠这些字段,完全删除顶级 message。所以上面的字段会变成:
[UrlVisited]
[TotalDuration]
[AccountsProcessed]
有没有办法在 Logstash 中做到这一点?
假设所有此类子字段的名称都是事先已知的,您可以使用 mutate filter:
filter {
mutate {
rename => ["[message][UrlVisited]", "UrlVisited"]
}
mutate {
rename => ["[message][TotalDuration]", "TotalDuration"]
}
mutate {
rename => ["[message][AccountsProcessed]", "AccountsProcessed"]
}
mutate {
remove_field => ["message"]
}
}
或者,使用 ruby filter(即使您不知道字段名称也可以):
filter {
ruby {
code => "
event.get('message').each {|k, v|
event.set(k, v)
}
event.remove('message')
"
}
}
此示例适用于 Logstash 2.4 及更高版本。对于早期版本,请改用 event['message'].each ...
和 event[k] = v
。