【发布时间】:2020-01-24 14:28:08
【问题描述】:
Logstash 运行良好,无需通过 tcp 进行节拍配置,当我通过 tcp 发送时,我可以看到所有日志。
input {tcp{
port => 8500 }
}
output { elasticsearch { hosts => ["elasticsearch:9200"] }
}
但我想从 filebeat 将日志发送到 logstash。我用这个改变了logstash配置:
input {
beats {
port => 5044
}
}
output { elasticsearch { hosts => ["elasticsearch:9200"] }
}
这是 docker run for logstash
docker run -d -p 8500:8500 -h logstash --name logstash --link elasticsearch:elasticsearch -v C:\elk2\config-dir:/config-dir docker.elastic.co/logstash/logstash:7.5.2 -f /config-dir/logstash.conf
我在 docker 中运行 filebeat,如下:
docker run -d docker.elastic.co/beats/filebeat:6.8.6 setup --template -E output.logstash.enabled=true -E 'output.logstash.hosts=["127.0.0.1:5044"]'
但是每当我运行 filebeat 时,logstash 和 filenbeat 容器都会被停止:
没有有意义的docker日志:
[2020-01-24T14:13:37,104][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
[2020-01-24T14:13:37,978][INFO ][logstash.javapipeline ] Pipeline terminated {"pipeline.id"=>".monitoring-logstash"}
[2020-01-24T14:13:38,657][INFO ][logstash.runner ] Logstash shut down.
【问题讨论】:
-
这似乎更像是容器问题,而不是您的问题标题所暗示的。你的配置文件看起来不错。
-
不同类型的输入插件(beats vs tcp)不会是原因,因为beats-input-plugin也监听tcp。
-
此外,我假设 Filebeat 和 Logstash 各自在单独的容器中运行?如果是,则 -E 'output.logstash.hosts=["127.0.0.1:5044"] 不正确,因为 127.0.0.1 (localhost) 将引用您的 filebeat docker 容器而不是您的系统/机器。
-
@apt-get_install_skill 是的,它们在不同的容器中运行。正确的值应该是多少?
-
您还需要链接 filbeat 和 logstash 容器,因为它们必须相互通信。另一种方法是创建一个 docker-network,将所有容器放入其中。 (见docs.docker.com/engine/reference/run/#network-settings)。来自文档:默认情况下,容器可以通过其 IP 地址进行通信。要通过名称进行通信,它们必须被链接。
标签: docker elasticsearch logstash kibana filebeat