列出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_deuteronomy
和mungojerrie
,结果将如下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/
我也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 } }
client
是client
的一个实例,它可以是节点或传输客户端,以适合您的需求为准。 您还需要在此请求的作用域中包含一个隐式的ExecutionContext
。 如果你试图在没有它的情况下编译这个代码,那么你会从scala编译器得到一个警告,告诉你如果你还没有导入一个。
我需要文档数量,但是如果您真的只需要索引的名称,您可以从地图的键而不是从IndexStats
它们拉出来:
indicesStatsResponse.getIndices().keySet()
当你正在寻找如何做到这一点时,这个问题就出现了,即使你想以编程的方式来做这件事,所以我希望这可以帮助任何想要在scala / java中做到这一点的人。 否则,curl用户可以做最好的答案说和使用
curl http://localhost:9200/_aliases
尝试这个猫的API:它会给你所有的指标与健康和其他细节的列表。
CURL -XGET http:// localhost:9200 / _cat / indices