我按照this教程在我的Ubuntu服务器上安装了软件堆栈Logstash / ES / Kibana。在尝试发送日志之前,我更改了logstash配置以在本地测试所有内容。所以我有一个运行ES / Kibana和Logstash的节点配置如下:
input {
file {
path => "/var/log/syslog"
type => "syslog"
}
}
output {
elasticsearch { host => localhost }
}
我在Kibana上看到的一切都按照预期工作,但是我有一个后台进程可以吃掉100%的cpu。 Top告诉我它是在logstash用户下运行的java工作。 sudo service logstash stop
不会阻止进程运行。我还试图在this之后删除网络服务,但没有成功。
我真的不知道从哪里搜索。非常感谢任何帮助。
答案 0 :(得分:21)
Digital Ocean的教程在 Kibana 前面使用 nginx 并侦听端口80. logstash 附带 logstash-web 也想听80端口。
由于 Ubuntu 使用 upstart ,因此尝试终止java进程将无法成功,因为它们将根据/etc/init/logstash*.conf
继续重生。高CPU使用率来自 logstash 在启动时使用大量CPU时间并且应该在几秒钟后冷静下来的事实,但是因为它死了无法绑定到端口80并保持重生,它看起来好像在不断地使用资源。
如果您遇到与我相同的问题,请查看 logstash 的 PID ,您会发现它们已发生变化。您还应该在Address already in use - bind - Address already in use
的末尾看到/var/log/logstash/logstash.log
。
因此,我们只需要禁用 logstash-web 。在 Ubuntu 上,可以通过以下方式完成:
$ echo manual | sudo tee /etc/init/logstash-web.override
要停止 logstash-web 而不重新启动,我们使用
$ sudo stop logstash-web
答案 1 :(得分:0)
您可以使用skill -u logstash
终止logstash进程。在前台运行logstash,增加了详细程度。
如果您(暂时)将输出更改为stdout输出,您会注意到什么?
请注意,如果您可能与其他节点进行通信;说host => localhost
并不意味着您只是与端口9300
进行通信(我建议您使用tcpdump
和lo
上的eth0
进行测试(或其他这是合适的。所以检查防火墙,或者暂时关闭防火墙。
另请注意,localhost
可能会为您提供IPv6结果;您可能想要127.0.0.0
代替。
弹性搜索输出的文档可以在logstash docs
看到如果您使用的是嵌入式弹性搜索,您不会说;默认值为false,所以我猜你不是。
我确实记得在我自己的部署中遇到问题,其中logstash和elasticsearch存在于同一主机上,并且端口9300发生了冲突;我通过使用logstash使用端口9301
(bind_port)来解决这个问题。
我建议你也应该设置'群集'。默认的'协议'将是' node',这意味着它将尝试成为群集的一部分(虽然不是数据节点),您可以尝试将其更改为' transport'或http
并观察行为变化。
我发现在我开始时仔细查看网络流量非常有用,以便仔细验证行为。
FWIW,我找到了#Logstash Book'非常值得(又便宜)。