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

すべてのインデックスのリストが必要です。

回答:


405

クラスター内のすべてのインデックスの簡潔なリストについては、

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

5
@paweloque答えは、今、それが正解だように見えます。きれいに見えます。curl http://localhost:9200/_stats/indexes\?pretty\=1
notapatch 14年

1
プレーン(非JSON)リストの2セント:curl -s localhost:9200/_aliases?pretty=true | awk -F\" '!/aliases/ && $2 != "" {print $2}'
Yaron

Elasticsearch 6.5の場合はどちらかのヒット/statsエンドポイント、またはPARAMと健康エンドポイント_cluster/health?level=indices
ジャスティン・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
やすさ

4
@asyncwaitこれ/_stats/indicesは正しい複数形であり、/_statusとで使用されるキーでもあるのでお勧めし/_statsます。
Nicholas Shanks

2
バージョン5.6では、有効なURLではなくなったようです。
不明な開発

1
APIエンドポイントは、に変更されている_nodes/stats_nodes/status@KimberlyW
maxymoo

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プラグインを作成しました。次のURLにあります。

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のすべてのインデックスに関する情報も提供します。
パウェロケ

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

上記の3番目の列(インデックスの名前)を取得するには:

$ 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

列ヘッダー

クエリの末尾にa ?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'インデックス名だけを出力します。カラムをフィルタリングするためにシェルトリックを使用する必要はありません。
hgf 2018年

awkを使用できるだけでなく、awkを使用する必要があります(または、tr -s ' 'cutにスペースの実行を圧縮するために使用します)。そうでない場合、ステータスがredスペースで埋め込まれ、cut個々のスペースを区切り文字として扱うため、インデックス名が取得されません。その「フィールド」が空になっても新しいフィールド
kbolino

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 Documentation


3

Curlを介した保護されたエラスティック検索へのアクセス(Update 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

ここの人々はカールと感覚でそれを行う方法に答えました、何人かの人々はJavaでこれをする必要があるかもしれません。

いきます

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


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


1

これは、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"}

1

インデックスを一覧表示する+ステータスをlistと一緒に表示する最良の方法の1つは、単に以下のクエリを実行することです。

注:できれば、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"
...

引用符が必要ない場合は、-rjqにフラグを追加します。

はい、エンドポイントはで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

1

FutureScalaで作業している場合、これを実行してを使用する方法は、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
        }
    }
}

executorは、このブログ投稿から削除されました。これは、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 http://localhost:9200/_aliases

1

あなたはこのコマンドを試すことができます

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


1
こんにちは、簡単なメモです。これは、上記の回答で3回近く指定されています。これを編集して、以前の回答で以前に投稿されていないいくつかの情報を追加する場合を除いて、すでに与えられている反復的な回答を投稿しないでください。私はあなたを落胆させないことを願っていますが、これはすべての質問と回答が重複して繰り返されないようにするためです。
Opster ES忍者-カマル2018年

1

マシンにKibanaとESをインストールしました。しかし、そのマシンのESノードの詳細(パスまたはポート)はわかりませんでした。

では、どうすればKibana(バージョン5.6)からそれを実行できますか?

  • 開発ツールに移動
  • コンソールセクションを参照し、次のクエリを実行します。

GET _cat/indices

特定のESインデックスのサイズを見つけることに興味があった


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.