我使用elasticsearch作为Logstash堆栈的一部分,其中堆栈的所有组件都安装在同一台服务器上。
这样做的目的是将应用程序日志公开给开发人员进行debugging。 我不需要保留创build的索引。 我有一个cron作业,删除超过7天的索引。
如果我们需要历史分析,原始日志将保存在别处。
我遇到的问题是elasticsearch因未分配的碎片而不断进入红色健康状态。 我已经研究了各种方法来恢复,但不可避免地,我最终删除原始索引文件并重新启动服务。
这是一个真正的痛苦,就像开发者需要访问elasticsearch的时候一样。
在我看来,除了删除违规指数之外,还没有更简单的方式来恢复elasticsearch。 我已经configurationelasticsearch使用单个节点,没有副本,不做任何networking发现,但每隔几天,它不断下降。
我是否浪费时间试图在单个服务器上运行elasticsearch? 由于未分配的碎片,它总是会继续下降吗? 考虑到我使用它,实际上不得不部署一个集群似乎是矫枉过正的。
注意:我在Amazon EC2中运行这个堆栈
我经历了许多苦难之后才发现,在单个服务器上运行elasticsearch的最佳方法是更改默认设置:
index.number_of_replicas: 1
至
index.number_of_replicas: 0
如果有0个副本,则elasticsearch将永远不会尝试将碎片分配给任何其他的“副本”,从而消除未分配的碎片和损坏的索引的问题。
我的完整(稳定)独立的,非默认的elasticsearchconfiguration是:
node.max_local_storage_nodes: 1 index.number_of_replicas: 0
请注意,这是仅用于日志读取器设置的configuration,而不是全面的生产设置。
不知道为什么你得到未分配的碎片,特别是与Logstash。 我使用馆长来pipe理elasticsearch。 我的ELK堆栈运行在单个虚拟机(现在),所以它是充足的权力,但它仍然运行。 我不得不调整弹性search本身来优化它的虚拟机。 我的关键组件是ES_HEAP_SIZE&MAX_OPEN_FILES。