列出ElasticSearch服务器上的所有索引?

我想列出ElasticSearch服务器上的所有索引。 我试过这个:

curl -XGET localhost:9200/ 

但它只是给了我这个:

 { "ok" : true, "status" : 200, "name" : "El Aguila", "version" : { "number" : "0.19.3", "snapshot_build" : false }, "tagline" : "You Know, for Search" } 

我想要一个所有索引列表

有关群集中所有索引的简要列表,请致电

 curl http://localhost:9200/_aliases 

这会给你一个索引列表和他们的别名。

如果你想要它漂亮的印刷,添加pretty=1

 curl http://localhost:9200/_aliases?pretty=1 

如果您的索引被称为old_deuteronomymungojerrie ,结果将如下mungojerrie

 { "old_deuteronomy" : { "aliases" : { } }, "mungojerrie" : { "aliases" : { "rumpleteazer" : { }, "that_horrible_cat" : { } } } } 

尝试

 curl 'localhost:9200/_cat/indices?v' 

我将以表格的forms给出以下自我解释输出

 health index pri rep docs.count docs.deleted store.size pri.store.size yellow customer 5 1 0 0 495b 495b 

你可以查询localhost:9200/_status ,这将给你一个索引和每个信息的列表。 响应看起来像这样:

 { "ok" : true, "_shards" : { ... }, "indices" : { "my_index" : { ... }, "another_index" : { ... } } } 

_stats命令提供了通过指定所需度量来自定义结果的方法。 要获得索引,查询如下:

 GET /_stats/indices 

_stats查询的一般格式是:

 /_stats /_stats/{metric} /_stats/{metric}/{indexMetric} /{index}/_stats /{index}/_stats/{metric} 

这些指标是:

 indices, docs, store, indexing, search, get, merge, refresh, flush, warmer, filter_cache, id_cache, percolate, segments, fielddata, completion 

作为对自己的一个练习,我写了一个小的elasticsearch插件,提供了列出elasticsearch索引的function,没有任何其他信息。 您可以在以下urlfind它:

http://blog.iterativ.ch/2014/04/11/listindices-writing-your-first-elasticsearch-java-plugin/

https://github.com/iterativ/elasticsearch-listindices

我也build议做/ _cat /指数给你一个很好的人类可读的索引列表。

我用这个来得到所有的索引:

 $ curl --silent 'http://127.0.0.1:9200/_cat/indices' | cut -d\ -f3 

有了这个清单,你可以在…

 $ curl -s 'http://localhost:9200/_cat/indices' | head -5 green open qa-abcdefq_1458925279526 1 6 0 0 1008b 144b green open qa-test_learnq_1460483735129 1 6 0 0 1008b 144b green open qa-testimportd_1458925361399 1 6 0 0 1008b 144b green open qa-test123p_reports 1 6 3868280 25605 5.9gb 870.5mb green open qa-dan050216p_1462220967543 1 6 0 0 1008b 144b 

要获得上面的第三列(指数名称):

 $ curl -s 'http://localhost:9200/_cat/indices' | head -5 | cut -d\ -f3 qa-abcdefq_1458925279526 qa-test_learnq_1460483735129 qa-testimportd_1458925361399 qa-test123p_reports qa-dan050216p_1462220967543 

注意:您也可以使用awk '{print $3}'而不是cut -d\ -f3

列标题

您也可以使用?v后缀查询来添加列标题。 这样做会打破cut...方法,所以我build议使用awk..select在这一点上。

 $ curl -s 'http://localhost:9200/_cat/indices?v' | head -5 health status index pri rep docs.count docs.deleted store.size pri.store.size green open qa-abcdefq_1458925279526 1 6 0 0 1008b 144b green open qa-test_learnq_1460483735129 1 6 0 0 1008b 144b green open qa-testimportd_1458925361399 1 6 0 0 1008b 144b green open qa-test123p_reports 1 6 3868280 25605 5.9gb 870.5mb 

_stats/indices给出了_stats/indices的结果。

 $ curl -XGET "localhost:9200/_stats/indices?pretty=true" { "_shards" : { "total" : 10, "successful" : 5, "failed" : 0 }, "_all" : { "primaries" : { }, "total" : { } }, "indices" : { "visitors" : { "primaries" : { }, "total" : { } } } } 

这里的人们已经回答了如何在curl和意义上做到这一点,有些人可能需要用java来做到这一点。

在这里

 client.admin().indices().stats(new IndicesStatsRequest()).actionGet().getIndices().keySet() 

我会给你你可以在kibana上运行的查询。

 GET /_cat/indices?v 

和CURL版本会

 CURL -XGET http://localhost:9200/_cat/indices?v 

我使用_stats/indexes端点来获取数据的json blob,然后用jq进行过滤。

 curl 'localhost:9200/_stats/indexes' | jq '.indices | keys | .[]' "admin" "blazeds" "cgi-bin" "contacts_v1" "flex2gateway" "formmail" "formmail.pl" "gw" ... 

如果你不想要引号,给jq添加一个-r标志。

是的,端点是indexes ,数据键是indices ,所以他们也无法下定决心:)

我需要这个清理由内部安全扫描(nessus)创build的这些垃圾索引。

PS。 我强烈build议如果您要从命令行与ES进行交互,请熟悉jq 。

 <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>2.4.0</version> </dependency> 

Java API

 Settings settings = Settings.settingsBuilder().put("cluster.name", Consts.ES_CLUSTER_NAME).build(); TransportClient client = TransportClient.builder().settings(settings).build().addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("52.43.207.11"), 9300)); IndicesAdminClient indicesAdminClient = client.admin().indices(); GetIndexResponse getIndexResponse = indicesAdminClient.getIndex(new GetIndexRequest()).get(); for (String index : getIndexResponse.getIndices()) { logger.info("[index:" + index + "]"); } 

curl -XGET 'http://localhost:9200/_cluster/health?level=indices'

这将输出如下

{ "cluster_name": "XXXXXX:name", "status": "green", "timed_out": false, "number_of_nodes": 3, "number_of_data_nodes": 3, "active_primary_shards": 199, "active_shards": 398, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 0, "delayed_unassigned_shards": 0, "number_of_pending_tasks": 0, "number_of_in_flight_fetch": 0, "task_max_waiting_in_queue_millis": 0, "active_shards_percent_as_number": 100, "indices": { "logstash-2017.06.19": { "status": "green", "number_of_shards": 3, "number_of_replicas": 1, "active_primary_shards": 3, "active_shards": 6, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 0 }, "logstash-2017.06.18": { "status": "green", "number_of_shards": 3, "number_of_replicas": 1, "active_primary_shards": 3, "active_shards": 6, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 0 }}

这里有另一种方法来查看db中的索引:

 curl -sG somehost-dev.example.com:9200/_status --user "credentials:password" | sed 's/,/\n/g' | grep index | grep -v "size_in" | uniq { "index":"tmpdb"} { "index":"devapp"} 

列出索引+与列表一起显示其状态的最好方法之一就是简单地执行下面的查询。

注意:最好使用Sense来获得正确的输出。

 curl -XGET 'http://localhost:9200/_cat/shards' 

示例输出如下。 主要优点是,它主要显示索引名称和保存的分片,索引大小和分片ip等

 index1 0 p STARTED 173650 457.1mb 192.168.0.1 ip-192.168.0.1 index1 0 r UNASSIGNED index2 1 p STARTED 173435 456.6mb 192.168.0.1 ip-192.168.0.1 index2 1 r UNASSIGNED ... ... ... 

如果你在Scala中工作,那么使用Future的方法是创build一个RequestExecutor,然后使用IndicesStatsRequestBuilder和pipe理客户端来提交你的请求。

 import org.elasticsearch.action.{ ActionRequestBuilder, ActionListener, ActionResponse } import scala.concurrent.{ Future, Promise, blocking } /** Convenice wrapper for creating RequestExecutors */ object RequestExecutor { def apply[T <: ActionResponse](): RequestExecutor[T] = { new RequestExecutor[T] } } /** Wrapper to convert an ActionResponse into a scala Future * * @see http://chris-zen.github.io/software/2015/05/10/elasticsearch-with-scala-and-akka.html */ class RequestExecutor[T <: ActionResponse] extends ActionListener[T] { private val promise = Promise[T]() def onResponse(response: T) { promise.success(response) } def onFailure(e: Throwable) { promise.failure(e) } def execute[RB <: ActionRequestBuilder[_, T, _, _]](request: RB): Future[T] = { blocking { request.execute(this) promise.future } } } 

执行者从这个博客文章中解除,如果您试图以编程方式查询ES而不是通过curl查询,这绝对是一个很好的阅读。 你有这个,你可以很容易地创build一个所有索引列表,如下所示:

 def totalCountsByIndexName(): Future[List[(String, Long)]] = { import scala.collection.JavaConverters._ val statsRequestBuider = new IndicesStatsRequestBuilder(client.admin().indices()) val futureStatResponse = RequestExecutor[IndicesStatsResponse].execute(statsRequestBuider) futureStatResponse.map { indicesStatsResponse => indicesStatsResponse.getIndices().asScala.map { case (k, indexStats) => { val indexName = indexStats.getIndex() val totalCount = indexStats.getTotal().getDocs().getCount() (indexName, totalCount) } }.toList } } 

clientclient的一个实例,它可以是节点或传输客户端,以适合您的需求为准。 您还需要在此请求的作用域中包含一个隐式的ExecutionContext 。 如果你试图在没有它的情况下编译这个代码,那么你会从scala编译器得到一个警告,告诉你如果你还没有导入一个。

我需要文档数量,但是如果您真的只需要索引的名称,您可以从地图的键而不是从IndexStats它们拉出来:

 indicesStatsResponse.getIndices().keySet() 

当你正在寻找如何做到这一点时,这个问题就出现了,即使你想以编程的方式来做这件事,所以我希望这可以帮助任何想要在scala / java中做到这一点的人。 否则,curl用户可以做最好的答案说和使用

 curl http://localhost:9200/_aliases 

尝试这个猫的API:它会给你所有的指标与健康和其他细节的列表。

CURL -XGET http:// localhost:9200 / _cat / indices