Logstash输出来自另一个输入

时间:2019-04-18 17:14:46

标签: kubernetes logstash pipeline metricbeat

我遇到一个问题,即我的http管道捕获了节拍。

Logstash,Elastic和Metricbeat都在Kubernetes中运行。

我的心律设置为发送到端口5044上的Logstash并记录到/ tmp中的文件。这很好。但是,每当我使用http输入创建管道时,这似乎也 捕获拍子输入并将其发送到index2管道中定义的Elastic中的http

为什么会这样?

/usr/share/logstash/pipeline/http.conf

input {
  http {
    port => "8080"
  }
}

output {

  #stdout { codec => rubydebug }

  elasticsearch {

    hosts => ["http://my-host.com:9200"]
    index => "test2"
  }
}

/usr/share/logstash/pipeline/beats.conf

input {
    beats {
        port => "5044"
    }
}

output {
    file {
        path => '/tmp/beats.log'
        codec => "json"
    }
}

/usr/share/logstash/config/logstash.yml

pipeline.id: main
pipeline.workers: 1
pipeline.batch.size: 125
pipeline.batch.delay: 50
http.host: "0.0.0.0"
http.port: 9600
config.reload.automatic: true
config.reload.interval: 3s

/usr/share/logstash/config/pipeline.yml

- pipeline.id: main
  path.config: "/usr/share/logstash/pipeline"

1 个答案:

答案 0 :(得分:2)

即使您有多个配置文件,logstash也会将它们作为单个管道读取,并连接输入,过滤器和输出,如果您需要运行,则可以作为两个单独的管道运行。

更改您的pipelines.yml并创建不同的pipeline.id,每个指向一个配置文件。

- pipeline.id: beats
  path.config: "/usr/share/logstash/pipeline/beats.conf"
- pipeline.id: http
  path.config: "/usr/share/logstash/pipeline/http.conf"

或者您可以在tagsinputfilter中使用output,例如:

input {
  http {
    port => "8080"
    tags => ["http"]
  }
  beats {
    port => "5044"
    tags => ["beats"]
  }
}
output {
 if "http" in [tags] {
      elasticsearch {
        hosts => ["http://my-host.com:9200"]
        index => "test2"
      }
  }
 if "beats" in [tags] {
      file {
        path => '/tmp/beats.log'
        codec => "json"
      }
  }
}

建议使用pipelines.yml文件来运行multiple pipelines