列出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"
}

我想要一个所有索引的列表..

470783 次浏览

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

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

要获得集群中所有索引的简明列表,请调用

curl http://localhost:9200/_aliases

这将为您提供索引及其别名的列表。

如果你想要漂亮的打印,添加pretty=true:

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

如果你的索引名为old_deuteronomymungojerrie,结果将是这样的:

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

_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索引的功能,而不需要任何其他信息。你可以在以下网址找到它:

< a href = " http://blog.iterativ。ch / 2014/04/11 / listindices-writing-your-first-elasticsearch-java-plugin / noreferrer“rel = > http://blog.iterativ.ch/2014/04/11/listindices-writing-your-first-elasticsearch-java-plugin/ < / >

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

下面是查看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"}

我还推荐使用/_cat/ indexes,它提供了一个人类可读的索引列表。

我用它来得到所有的指标:

$ 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...方法,所以我建议在此时使用awk..选择。

$ 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给出了带有indices的结果。

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

试一试

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

它将以表格的方式为您提供以下自我说明的输出

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

这里的人已经回答了如何在curl和sense中做到这一点,有些人可能需要在java中这样做。

开始了

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

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

注意:最好使用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
...
...
...

我使用_stats/indexes端点来获取一个json数据blob,然后使用金桥进行筛选。

curl 'localhost:9200/_stats/indexes' | jq '.indices | keys | .[]'


"admin"
"blazeds"
"cgi-bin"
"contacts_v1"
"flex2gateway"
"formmail"
"formmail.pl"
"gw"
...

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

是的,端点是indexes,数据键是indices,所以他们也不能做出决定:)

我需要它来清理内部安全扫描(nessus)创建的这些垃圾索引。

PS.如果你打算从命令行与ES交互,我强烈建议你熟悉金桥

<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 + "]");
}

如果你在scala中工作,一种使用Future的方法是创建一个RequestExecutor,然后使用IndicesStatsRequestBuilder和管理客户端提交请求。

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
}
}
}

执行器是从这篇博文中提取的,如果你试图以编程方式而不是通过curl查询ES,这绝对是一个很好的阅读。首先,你可以很容易地创建一个所有索引的列表,如下所示:

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客户端的一个实例,它可以是一个节点,也可以是一个传输客户端,取决于你的需要。你还需要在这个请求的作用域中有一个隐式的ExecutionContext。如果你试图在没有导入它的情况下编译这段代码,那么你会从scala编译器那里得到一个警告,告诉你如果你还没有导入它的话,该如何得到它。

我需要文档计数,但如果你真的只需要索引的名称,你可以从映射的键中提取它们,而不是从IndexStats中:

indicesStatsResponse.getIndices().keySet()

这个问题会在你搜索如何做到这一点时出现,即使你试图以编程的方式做到这一点,所以我希望这能帮助任何想在scala/java中做到这一点的人。否则,curl用户可以按照上面的答案使用

curl http://localhost:9200/_aliases

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

GET /_cat/indices?v

而CURL版本将是

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

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
}}

您还可以使用获取特定的索引

curl -X GET "localhost:9200/<INDEX_NAME>"
e.g.   curl -X GET "localhost:9200/twitter"
You may get output like:
{
"twitter": {
"aliases": {


},
"mappings": {


},
"settings": {
"index": {
"creation_date": "1540797250479",
"number_of_shards": "3",
"number_of_replicas": "2",
"uuid": "CHYecky8Q-ijsoJbpXP95w",
"version": {
"created": "6040299"
},
"provided_name": "twitter"
}
}
}
}

更多信息

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-get-index.html

我在一台机器上安装了Kibana和ES。但是我不知道该机器上ES节点的详细信息(在什么路径或端口)。

那么,如何从Kibana(5.6版)进行操作呢?

  • 开发工具
  • 参见控制台部分,并运行以下查询:

GET _cat/indices

我感兴趣的是找到特定ES索引的大小

获得一个只有索引的列表的最简单的方法是使用上面的答案,带有'h=index'参数:

curl -XGET "localhost:9200/_cat/indices?h=index"

对于Elasticsearch 6。X,我发现下面的方法最有帮助。每个响应提供不同的数据。

# more verbose
curl -sS 'localhost:9200/_stats' | jq -C ".indices" | less


# less verbose, summary
curl -sS 'localhost:9200/_cluster/health?level=indices' | jq -C ".indices" | less

通过Curl访问安全弹性搜索(更新2020)

如果Elastic Search是安全的,你可以使用这个命令列出索引

curl http://username:password@localhost:9200/_aliases?pretty=true
如果你的系统上安装了curl,那么试试这个简单的命令: -XGET xx.xx.xx.xx:9200/_cat/ indexes ?v < / >强

上述命令给出的结果如下所示: 结果获取所有索引 < / p >

使用kibana发送请求和获取响应,kibana可以自动完成弹性查询生成器,并且有更多的工具

看kibana

 GET /_cat/indices

Kibana开发工具

http://localhost:5601/app/kibana#/dev_tools/console

To get all the details in Kibana.
GET /_cat/indices








To get names only in Kibana.
GET /_cat/indices?h=index

如果不使用Kibana,你可以在postman中发送一个get请求,或者在Brower中输入这个,这样你就会得到一个索引名称列表

http://localhost:9200/_cat/indices?h=index

enter image description here enter image description here < / p >