在单个节点上部署 ELK docker swarm 失败

Deploy ELK on single node docker swarm failed

我正在尝试在我的小型服务器 2 Core / 2G RAM 上部署 ELK。但是ELK stack server一直在重启,无法正常工作。

打印在这些容器上的日志没有显示任何错误,只有一些关于已弃用方法的警告。

Logstash log:
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.headius.backport9.modules.Modules (file:/usr/share/logstash/logstash-core/lib/jars/jruby-complete-9.2.7.0.jar) to field java.io.FileDescriptor.fd
WARNING: Please consider reporting this to the maintainers of com.headius.backport9.modules.Modules
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

Kibana 和 elasticsearch 容器中没有错误打印

这是 docker 堆栈编写器文件:https://github.com/deviantony/docker-elk/blob/master/docker-stack.yml。除了调低堆大小外,我没有做任何更改。

但是如果我在 swarm 模式下使用 docker-compose 而不是 docker stack deploy,一切都会顺利进行。

此外,当我启动服务时,我的 CPU 跳到 100%,而内存使用率只有 60%。

如何调试这个问题?提前致谢。

我认为你的问题还是内存不足造成的。我会测试您在上面显示的撰写堆栈。检查 docker stats。内存使用量波动在1.8G。

您提到您将 compose file 中的堆大小从 ES_JAVA_OPTS: "-Xmx512m -Xms512m" 调低。 但仍然不建议将堆大小减少到 256m 以下。任何低于该值的值都会导致一些错误,例如:

[circuit_breaking_exception] [parent] Data too large, data for [<http_request>] would be xxx, which is larger than the limit of xxx

任何更复杂的查询或其他操作都会抛出更多错误。

此外,请注意你有一个主机,但你仍然使用 swarm 作为主节点和工作节点。任何其他冗余服务或应用程序都会将您的主机推向崩溃的边缘。 对于大多数常见用途,2G RAM 服务器不足以托管整个 ELK 堆栈。如果你坚持,尝试在你的 compose 文件中添加 mem_limit (你真的不需要使用 v3,v2 足以用于单节点服务)来限制你的容器内存使用。