logstash add_field 和 remove_field
logstash add_field and remove_field
我正在尝试简化我的 logstash 配置。我想将程序字段拆分为单独的字段(如下所示),但我更愿意只使用一个 grok 语句(如果可能的话!)
在下面的两个示例中,我在第二个示例中得到了 _grokparsefailure,但在第一个示例中没有。由于 grok 具有 add_field 和 remove_field 选项,我假设我可以将它们全部合并到一个 grok 语句中。为什么不是这样呢?我错过了一些 ordering/syntax 什么地方吗?
示例日志:
2016-02-16T16:42:06Z ubuntu docker/THISTESTNAME[892]: 172.16.229.1 - - [16/Feb/2016:16:42:06 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36" "-"
为什么这样做:
filter {
# Extracts the docker name, ID, image etc elements
mutate {
add_field => { "[@metadata][program]" => "%{program}" }
remove_field => "[program]"
}
grok {
patterns_dir => "/logstash/patterns_dir/docker"
match => { "[@metadata][program]" => "%{D_ID}" }
}
}
但这不是:
filter {
grok {
add_field => { "[@metadata][program]" => "%{program}" }
remove_field => "[program]"
patterns_dir => "/logstash/patterns_dir/docker"
match => { "[@metadata][program]" => "%{D_ID}" }
}
}
add_field 和 remove_field 只有 运行 如果基础过滤器有效。在您的第二个示例中,[@metadata][程序] 尚不存在,您无法 运行 grok{} 反对。
@Alan 直接回答了这个问题,但是我发现这种方式更具可读性,并且进一步压缩了我的代码:
grok {
patterns_dir => "/logstash/patterns_dir/docker-patterns"
match => { "program" => "%{D_ID}" }
overwrite => [ "program" ]
}
我正在尝试简化我的 logstash 配置。我想将程序字段拆分为单独的字段(如下所示),但我更愿意只使用一个 grok 语句(如果可能的话!)
在下面的两个示例中,我在第二个示例中得到了 _grokparsefailure,但在第一个示例中没有。由于 grok 具有 add_field 和 remove_field 选项,我假设我可以将它们全部合并到一个 grok 语句中。为什么不是这样呢?我错过了一些 ordering/syntax 什么地方吗?
示例日志:
2016-02-16T16:42:06Z ubuntu docker/THISTESTNAME[892]: 172.16.229.1 - - [16/Feb/2016:16:42:06 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.109 Safari/537.36" "-"
为什么这样做:
filter {
# Extracts the docker name, ID, image etc elements
mutate {
add_field => { "[@metadata][program]" => "%{program}" }
remove_field => "[program]"
}
grok {
patterns_dir => "/logstash/patterns_dir/docker"
match => { "[@metadata][program]" => "%{D_ID}" }
}
}
但这不是:
filter {
grok {
add_field => { "[@metadata][program]" => "%{program}" }
remove_field => "[program]"
patterns_dir => "/logstash/patterns_dir/docker"
match => { "[@metadata][program]" => "%{D_ID}" }
}
}
add_field 和 remove_field 只有 运行 如果基础过滤器有效。在您的第二个示例中,[@metadata][程序] 尚不存在,您无法 运行 grok{} 反对。
@Alan 直接回答了这个问题,但是我发现这种方式更具可读性,并且进一步压缩了我的代码:
grok {
patterns_dir => "/logstash/patterns_dir/docker-patterns"
match => { "program" => "%{D_ID}" }
overwrite => [ "program" ]
}