我遇到一个问题,即我的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"
答案 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"
或者您可以在tags
,input
和filter
中使用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