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


251

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

我想要所有索引的列表。

Answers:


404

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

curl http://localhost:9200/_aliases

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

如果要打印精美,请添加pretty=true

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

如果调用索引old_deuteronomy和,结果将类似于以下内容mungojerrie

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

5
@paweloque答案现在看起来像是正确的解决方案;看起来更干净。curl http://localhost:9200/_stats/indexes\?pretty\=1
notapatch 2014年

1
我的2美分清单(不含json):curl -s localhost:9200/_aliases?pretty=true | awk -F\" '!/aliases/ && $2 != "" {print $2}'
Yaron 2015年

对于Elasticsearch 6.5,要么命中/stats端点,要么使用参数运行状况端点_cluster/health?level=indices
Justin W.

curl localhost:9200 / _cat / indices?v为我工作(在Elastic 6.2.4上)
Matt L.

78

尝试

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

添加管道进行排序可以轻松查看正在变绿的内容。同样,store.size的更改指示其他进度。
kevpie

您还可以选择和排序列,例如添加&h = health,index以及使用&s = health:desc进行排序
Georg Engel

33

您可以查询localhost:9200/_status,这将为您提供索引列表以及有关每个索引的信息。响应如下所示:

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

3
如果您只想知道索引名称列表,则此方法太多且更慢。更好地利用-GET /_stats/indexes
asyncwait

4
@asyncwait我建议,/_stats/indices因为它是正确的复数形式,也是in /_status和in中使用的键/_stats
Nicholas Shanks

2
在5.6版上似乎不再是有效的URL。
未知开发人员

1
API端点已更改为_nodes/stats_nodes/status@KimberlyW
maxymoo '18

在1.2.0中已弃用。
jarmod

26

_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索引的功能。您可以在以下网址找到它:

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

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


2
不起作用:"type": "illegal_argument_exception", "reason": "request [/_stats/indices] contains unrecognized metric: [indices]"
伊万·尤琴科

@IvanYurchenko我很早以前就实现了我的elasticsearch插件。此后很可能API发生了更改,现在不再可用。.最好是使用'_aliases'命令。它还将提供有关Elasticsearch中所有索引的信息。
paweloque

18

我用它来获取所有索引:

$ 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

1
curl -s 'http://localhost:9200/_cat/indices?h=index'将只打印索引名称。无需使用shell技巧即可过滤列。
hgf

您不仅可以使用awk,还应该使用awk(或使用tr -s ' 'before cut来压缩空格),否则,如果状态为red因为它将用空格填充cut并将每个单独的空格视为定界符,则不会获得索引名称一个新字段,即使该“字段”最终为空
kbolino '18

11

我还建议您做/ _cat / indices,它会为您的索引提供一个很好的人类可读列表。


8

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

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

7

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

所有其他端点都不适用于我。您的答案有效!谢谢。见stackoverflow.com/questions/49204526/...
阿伦

我也是,这是新版本吗?主要答案似乎适用于2.x,但不适用于6.x
Andrew Jon Dodds,

5

我将为您提供可以在kibana上运行的查询。

GET /_cat/indices?v

CURL版本将是

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


3

要列出索引,您可以执行以下操作:curl'localhost:9200 / _cat / indices?v'Elasticsearch文档


3

通过卷毛访问安全的弹性搜索(2020更新)

如果Elastic Search安全,则可以使用此命令列出索引

curl http://username:password@localhost:9200/_aliases?pretty=true

2

_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" : { }
    }
  }
}



2

对于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

2

您也可以使用

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/zh-CN/elasticsearch/reference/current/indices-get-index.html


1

这是查看数据库中索引的另一种方法:

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

1

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

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

1

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

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

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

如果不需要引号,请-r在jq中添加一个标志。

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

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

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


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

您可以为代码提供一些解释,并使答案更具可读性... 如何回答
AgataB 2016年

1

如果您在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
    }
}

clientClient的一个实例,可以是一个节点或一个传输客户端,以适合您的需求为准。您还需要ExecutionContext对此请求的范围进行隐式处理。如果您尝试在没有此代码的情况下编译此代码,那么您将收到来自scala编译器的警告,提示如果尚未导入该代码,则如何获取。

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

indicesStatsResponse.getIndices().keySet()

即使您正在尝试以编程方式执行此操作,当您搜索如何执行此操作时也会出现此问题,因此我希望这对希望在scala / java中执行此操作的人有所帮助。否则,curl用户可以按照最佳答案的说明进行操作并使用

curl http://localhost:9200/_aliases

1

你可以试试这个命令

curl -X GET http:// localhost:9200 / _cat / indices?v


1
您好,请注意。在上面的答案中已经指定了将近3次。请不要发布已经给出的重复性答案,除非您打算对其进行编辑并添加一些先前的答案中尚未发布的更多信息。我希望我不会阻止您,但这是为了确保所有问题和答案都不会重复和重复。
Opster ES Ninja-卡马尔

1

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

那么如何从Kibana(5.6版)中做到这一点呢?

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

GET _cat/indices

我对寻找特定ES索引的大小感兴趣


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.