Ste*_* E. 3 logstash logstash-configuration
配置Logstash时,add_field和之间有什么区别replace?
从语义上讲,他们可能希望做不同的事情,但是当前手册没有任何内容说明这两种功能如何根据相关领域的存在而有所不同。
范例1:
filter {
mutate {
add_field => { "foo_%{somefield}" => "Hello world, from %{host}" }
}
}
Run Code Online (Sandbox Code Playgroud)
该手册没有说明如果该字段已经存在,预期的行为是什么。行为是否相同replace?
范例2:
filter {
mutate {
replace => { "message" => "%{source_host}: My new message" }
}
}
Run Code Online (Sandbox Code Playgroud)
手册再次没有说明如果该字段不存在,则预期的行为是什么。一样add_field吗?
从语义上看,它们看起来是等效的,但它们与 add_field并不总是。
replace是mutate过滤器的一部分,并且如果您正在查看该插件的源代码,您将看到replace 始终会设置一个字段,即使该字段不存在:
def replace(event)
@replace.each do |field, newvalue|
event.set(field, event.sprintf(newvalue))
end
end
Run Code Online (Sandbox Code Playgroud)
add_field,但是,它是所有输入和过滤器插件的通用配置,您经常会在某些特定过滤器插件的文档中看到类似以下内容(例如,用于grok过滤器):
如果此筛选器成功,则将任何任意字段添加到此事件。[...]
此配置继承自LogStash::Filters::Base,它是所有过滤器插件的超类。这意味着在某些过滤器插件中,为了add_field实际添加字段,过滤器必须成功,否则将不添加任何字段。
因此,在您的情况下,mutate/replace即使它不存在,也将始终设置一个字段,并mutate/add_field在运行mutate过滤器的所有操作后添加指定的字段。
因此,如果您有一个执行某些特定操作(例如gsub由于某种原因而失败)的mutate过滤器,则不会添加任何字段。
| 归档时间: |
|
| 查看次数: |
1420 次 |
| 最近记录: |