Filebeat-Logstash-多个配置文件-重复数据

r6hnlfcb  于 2022-12-09  发布在  Logstash
关注(0)|答案(1)|浏览(317)

我是logstash和filebeat的新手。我正在尝试为我的logstash示例设置多个配置文件。使用filebeat向logstash发送数据。即使我为这两个logstash配置文件创建了过滤器,我也会得到重复的数据。
Logstash配置文件-1:

input {
  beats {
    port => 5045
  }
}

filter {
   if [fields][env] == "prod" {
     grok {   match => { "message" => "%{LOGLEVEL:loglevel}] %{GREEDYDATA:message}$" }
     overwrite => [ "message" ]
     }
   }
}

output {
  stdout {
    codec => rubydebug
  }

  elasticsearch {
    hosts => ["https://172.17.0.2:9200"]
    index => "logstash-myapp-%{+YYYY.MM.dd}"
    user => "elastic"
    password => "password"
    ssl => true
    cacert => "/usr/share/logstash/certs/http_ca.crt"
  }
}

logstash配置文件-2

input {
  beats {
    port => 5044
  }
}

filter {
   if [fields][env] == "dev" {
     grok {   match => { "message" => "%{LOGLEVEL:loglevel}] %{GREEDYDATA:message}$" }
     overwrite => [ "message" ]
     }
   }
}

output {
  stdout {
    codec => rubydebug
  }

  elasticsearch {
    hosts => ["https://172.17.0.2:9200"]
    index => "logstash-myapp-%{+YYYY.MM.dd}"
    user => "elastic"
    password => "password"
    ssl => true
    cacert => "/usr/share/logstash/certs/http_ca.crt"
  }
}

日志文件内容:

[INFO] First Line
[INFO] Second Line
[INFO] Third Line

文件节拍配置:

filebeat.inputs:
- type: filestream
  enabled: true
  paths:
    - /root/data/logs/*.log
  fields:
    app: test
    env: dev

output.logstash:
  # The Logstash hosts
    hosts: ["172.17.0.4:5044"]

我知道,即使我们有多个配置文件,logstash也会根据所有配置文件中存在的所有过滤器处理每一行数据。因此,我们在每个配置文件中为"fields. env"放置了过滤器。我希望有3行被发送到Elasticsearch,因为"fields. env"是"dev",但它发送了6行到Elasticsearch并复制了数据。请帮助。

mzsu5hc0

mzsu5hc01#

问题是您的两个配置文件被合并了,不仅过滤器被合并了,输出也被合并了。
因此,通过任何输入进入管道的每个日志行,都将经过所有过滤器(当然带有任何条件)和所有输出(输出中不可能有任何条件)。
因此,来自端口5044的第一个日志行[INFO] First Line将只通过由[fields][env] == "dev"保护的过滤器,但随后将通过两个输出中的每一个,因此它在ES中结束了两次。
所以简单的解决方案是从其中一个配置文件中删除输出部分,这样日志行只通过一个输出。
更好的解决方案是创建separate pipelines

相关问题