为什么 elasticsearch 因不活动的分片而崩溃,而 logstash 在批量操作时失败?

Why is elasticsearch crashing from inactive shards and logstash failing on bulk actions?

我目前正在 1 Ubuntu 14.04 盒子上测试 ELK 堆栈。它有 6 GB 的 RAM 和 1TB 的存储空间。这相当适中,但对于我获得的数据量来说,这应该足够了吧?我遵循了本指南 elk stack guide。总而言之,我将 Kibana4、Logstash 1.5 和 Elasticsearch 1.4.4 所有 运行 都放在一个盒子上,并使用 nginx 服务器作为反向代理,这样我就可以从外部访问 Kibana。与指南的主要区别在于,我从 logstash-forwarder 获取 json 输入,而不是系统日志,发送大约 300 events/minute。

启动后,一切正常——日志显示在 Kibana 上并且没有错误。大约 3 小时后,elasticsearch 崩溃了。我得到一个

Discover: Cannot read property 'indexOf' of undefined

站点错误。可以在 pastebin 上查看日志。似乎分片变得不活动并且 elasticsearch 更新了 index_buffer 大小。

如果我刷新 Kibana UI,它会再次开始为我的 json 日志工作。但是,如果我测试不同的日志源(使用 TCP 输入而不是 lumberjack),我会得到与上述类似的错误,除了我停止处理日志——从 10 分钟到一个小时的任何时间,我不再处理任何日志和除非执行 kill -KILL,否则我无法停止 logstash。

Killing logstash (pid 13333) with SIGTERM
Waiting logstash (pid 13333) to die...
Waiting logstash (pid 13333) to die...
Waiting logstash (pid 13333) to die...
Waiting logstash (pid 13333) to die...
Waiting logstash (pid 13333) to die...
logstash stop failed; still running.

Logstash error log shows。 Logstash .log 文件为空...

对于 tcp 输入,在 logstash 的批量插入过程中,我每 15 分钟收到大约 1500 个事件。

有什么想法吗?

编辑:我还观察到,在启动我的 elasticsearch 过程时,我的分片设置为较低的 mb...

[2015-05-08 19:19:44,302][DEBUG][index.engine.internal    ] [Eon] [logstash-    2015.05.05][0] updating index_buffer_size from [64mb] to [4mb]

我发现了我的问题。问题出在我的 logstash 配置中——DNS 过滤器 (http://www.logstash.net/docs/1.4.2/filters/dns) 由于某种原因导致 logstash 到 crash/hang。取出 DNS 过滤器后,一切正常。可能是 DNS 过滤器的配置方式出了问题。

@jeffrey,我对 DNS 过滤器有同样的问题。

我做了两件事。 我安装了 dnsmasq 作为 DNS 缓存解析器。如果您有高延迟或高负载的 DNS 服务器,它会有所帮助。

其次,我增加了 logstash 的工作线程数。只需使用 -w 选项。

在没有 dnsmasq 的情况下使用线程的技巧。不使用线程的 dnsmask 技巧。