我已经建立了ELK堆栈。对于logstash实例,它具有两个输出,包括Kafka和elasticsearch。
对于elasticsearch的输出,我想保留字段@timestamp。对于Kafka的输出,我想删除@timestamp字段。所以我不能只删除过滤器中的@timestamp字段。我只希望将其删除以用于Kafka输出。
我还没有找到这种解决方案。
尝试使用克隆插件:
clone {
clones => ["kafka"]
id => ["kafka"]
remove_field => ["@timestamp"]
}
output {
if [type] != "kafka" {
elastcsearch output
}
if [type] == "kafka" {
kafka output
}
}
Elasticsearch的输出可以正常工作很奇怪。但是它不能输出到kafka。而且我已经尝试通过ID进行判断,但仍然无法识别。
由于您只能删除filter
块中的字段,因此要使同一管道输出同一事件的两个不同版本,您将需要克隆事件,删除克隆事件中的字段并在输出中使用条件。
要克隆事件并删除@timestamp
字段,您需要在filter
块中添加类似内容。
filter {
# your other filters
#
clone {
clones => ["kafka"]
}
if [type] == "kafka" {
mutate {
remove_field => ["@timestamp"]
}
}
}
这将克隆事件,并且克隆的事件在字段kafka
中将具有值type
,然后您将在输出的条件条件中使用此字段。
output {
if [type] != "kafka" {
your elasticsearch output
}
if [type] == "kafka" {
your kafka output
}
}