我的集群有几个月前的每一天的索引,每个索引5个分片(默认值),并且我无法在整个集群上运行查询,因为分片太多(超过1000).
文档ID是自动生成的.
如何将索引合并为一个索引,处理冲突的ID(如果甚至可能发生冲突),并更改类型?
我使用的是ES 5.2.1版
Mr.*_*fee 45
只有在使用ELK堆栈几个月后才能看到的常见问题,并且filebeat
每天都会创建索引.这里有几个选项可以解决性能问题.
_forcemerge
首先,您可以使用_forcemerge
限制Lucene索引中的段的数量.操作不会限制或合并索引,但会提高Elasticsearch的性能.
curl -XPOST 'localhost:9200/logstash-2017.07*/_forcemerge?max_num_segments=1'
Run Code Online (Sandbox Code Playgroud)
这将贯穿整月索引和强制合并段.每个月完成后,它应该会大大提高Elasticsearch的性能.在我的情况下,CPU使用率从100%下降到2.7%.
不幸的是,这不会解决分片问题.
_reindex
请继续阅读
_reindex
文档并备份数据库.
正如托马斯所说.如果要限制分片数或索引数,除了用于_reindex
将少数索引合并为一个之外没有其他选项.这可能需要一段时间,具体取决于您拥有的索引的数量和大小.
您可以预先创建目标索引,并指定它应包含的分片数.这将确保您的最终索引将具有您需要的分片数.
curl -XPUT 'localhost:9200/new-logstash-2017.07.01?pretty' -H 'Content-Type: application/json' -d'
{
"settings" : {
"index" : {
"number_of_shards" : 1
}
}
}
'
Run Code Online (Sandbox Code Playgroud)
如果要限制每个索引的分片数,可以_reindex
一对一运行.在这种情况下,应该没有条目被删除,因为它将是精确副本但具有较少数量的分片.
curl -XPOST 'localhost:9200/_reindex?pretty' -H 'Content-Type: application/json' -d'
{
"conflicts": "proceed",
"source": {
"index": "logstash-2017.07.01"
},
"dest": {
"index": "logstash-v2-2017.07.01",
"op_type": "create"
}
}
'
Run Code Online (Sandbox Code Playgroud)
执行此操作后,您可以删除旧索引并使用新索引.不幸的是,如果你想使用旧名称,你需要再次_reindex
使用新名称.如果你决定这样做
不要忘记指定新指数的数量!默认情况下,它将回落到5.
curl -XPOST 'localhost:9200/_reindex?pretty' -H 'Content-Type: application/json' -d'
{
"conflicts": "proceed",
"source": {
"index": "logstash-2017.07*"
},
"dest": {
"index": "logstash-2017.07",
"op_type": "create"
}
}
'
Run Code Online (Sandbox Code Playgroud)
完成后,你应该有所有的条目logstash-2017.07.01
来logstash-2017.07.31
合并成logstash-2017.07
.请注意,必须手动删除旧索引.
某些条目可以被覆盖或合并,具体取决于您选择的选项conflicts
和op_type
选项.
您可以设置每次创建新索引时将使用的索引模板logstash
.
curl -XPUT 'localhost:9200/_template/template_logstash?pretty' -H 'Content-Type: application/json' -d'
{
"template" : "logstash-*",
"settings" : {
"number_of_shards" : 1
}
}
'
Run Code Online (Sandbox Code Playgroud)
这将确保创建的每个新索引logstash-
在名称中只匹配一个分片.
如果您没有流式传输太多日志,则可以logstash
按月设置组日志.
// file: /etc/logstash/conf.d/30-output.conf
output {
elasticsearch {
hosts => ["localhost"]
manage_template => false
index => "%{[@metadata][beat]}-%{+YYYY.MM}"
document_type => "%{[@metadata][type]}"
}
}
Run Code Online (Sandbox Code Playgroud)
修复初始错误配置并不容易!祝你优化弹性搜索!
归档时间: |
|
查看次数: |
16952 次 |
最近记录: |