web-dev-qa-db-fra.com

Lister tous les index sur le serveur ElasticSearch?

J'aimerais répertorier tous les index présents sur un serveur ElasticSearch. J'ai essayé ceci:

curl -XGET localhost:9200/

mais cela me donne juste ceci:

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

Je veux une liste de tous les index ..

188
Eva

Pour obtenir une liste concise de tous les index de votre cluster, appelez 

curl http://localhost:9200/_aliases

cela vous donnera une liste d'index et leurs alias.

Si vous voulez que ce soit joliment imprimé, ajoutez pretty=1:

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

Le résultat ressemblera à ceci, si vos index s'appellent old_deuteronomy et mungojerrie:

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

Essayer 

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

Je vais vous donner ci-dessous une sortie explicative de manière tabulaire

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

Vous pouvez interroger localhost:9200/_status et cela vous donnera une liste d'index et d'informations sur chacun. La réponse ressemblera à ceci:

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

La commande _stats permet de personnaliser les résultats en spécifiant les métriques souhaitées. Pour obtenir les index, la requête est la suivante:

GET /_stats/indices

Le format général de la requête _stats est le suivant:

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

Où les métriques sont:

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

À titre d’exercice, j’ai écrit un petit plugin elasticsearch qui fournit la fonctionnalité permettant de répertorier les indices elasticsearch sans aucune autre information. Vous pouvez le trouver à l'URL suivante:

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

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

25
paweloque

J'utilise ceci pour obtenir tous les indices:

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

Avec cette liste, vous pouvez travailler sur ...

Exemple

$ 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

Pour obtenir la 3ème colonne ci-dessus (noms des index):

$ 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

REMARQUE: Vous pouvez également utiliser awk '{print $3}' au lieu de cut -d\ -f3.

En-têtes de colonne

Vous pouvez également suffixer la requête avec un ?v pour ajouter un en-tête de colonne. Cela romprait la méthode cut... et je vous recommande donc d'utiliser la sélection awk.. à ce stade.

$ 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
15
themisterunknown

Je recommanderais également de faire/_cat/indices, ce qui donne une liste lisible de vos index.

10
Matt Watson

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

Cela va sortir comme ci-dessous

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

Je vais vous donner la requête que vous pouvez exécuter sur kibana.

GET /_cat/indices?v

et la version CURL sera 

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

_stats/indices donne le résultat avec indices.

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

Essayez cette API de chat: elle vous donnera la liste de tous les indices avec la santé et d’autres détails. 

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

2
Gaurav

Le moyen le plus simple d'obtenir une liste d'index uniquement est d'utiliser la réponse ci-dessus, avec le paramètre 'h = index': 

curl -XGET "localhost:9200/_cat/indices?h=index"
2
J. Lewis

Les gens ici ont expliqué comment le faire en boucle et en sens, certaines personnes pourraient avoir besoin de le faire en Java. 

Le voici

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

J'utilise le point final _stats/indexes pour obtenir un blob JSON de données, puis filtrer avec jq .

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

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

Si vous ne voulez pas de guillemets, ajoutez un drapeau -r à jq.

Oui, le noeud final est indexes et la clé de données est indices. Ils ne peuvent donc pas se décider :)

J'avais besoin de cela pour nettoyer ces index de déchets créés par un scan de sécurité interne (nessus).

PS. Je vous recommande fortement de vous familiariser avec jq si vous allez interagir avec ES à partir de la ligne de commande.

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

API Java

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

vous pouvez essayer cette commande 

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

0
dat nguyen

Kibana et ES ont été installés sur une machine. Mais je ne connaissais pas les détails (sur quel chemin ou port) était le nœud ES sur cette machine.

Alors, comment pouvez-vous le faire à partir de Kibana (version 5.6)?

  • Aller à Outils de développement
  • Voir Console section et exécuter la requête suivante:

GET _cat/indices

Je voulais connaître la taille d'un index ES particulier

0
razvang

Pour lister les index que vous pouvez faire: curl 'localhost: 9200/_cat/indices? V' Elasticsearch Documentation

0
kartikcr

Pour Elasticsearch 6.X, les éléments suivants ont été les plus utiles. Chacun fournit des données différentes dans la réponse.

# 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
0
Justin W.

voici une autre façon de voir les indices dans la base de données:

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

L'un des meilleurs moyens de lister les index + d'afficher son statut avec list: est simplement d'exécuter la requête ci-dessous.

Remarque: utilisez de préférence Sense pour obtenir le bon résultat.

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

L'exemple de sortie est comme ci-dessous. Le principal avantage est qu’il affiche essentiellement le nom de l’index et les fragments dans lesquels il est enregistré, la taille de l’index et les fragments, etc.

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                                                 
...
...
...
0
Ritesh Aryal
You may use this command line.

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

Pour plus (Site officiel Elasticsearch) 

0
Yagnesh bhalala

Si vous travaillez dans scala, un moyen de le faire et d'utiliser Future est de créer un RequestExecutor, puis d'utiliser IndicesStatsRequestBuilder et le client d'administration pour soumettre votre demande. 

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

L’exécuteur est levé de this blog post , qui est certainement une bonne lecture si vous essayez d’interroger ES par programmation et non par curl. Une fois que vous avez ceci, vous pouvez créer une liste de tous les index assez facilement, comme ceci: 

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 est une instance de Client qui peut être un noeud ou un client de transport, selon vos besoins. Vous devez également avoir une variable implicite ExecutionContext pour cette demande. Si vous essayez de compiler ce code sans celui-ci, le compilateur scala vous avertira de la façon de l'obtenir si vous n'en avez pas déjà importé. 

J'avais besoin du nombre de documents, mais si vous n'avez vraiment besoin que des noms d'index, vous pouvez les extraire des clés de la carte plutôt que de la variable IndexStats:

indicesStatsResponse.getIndices().keySet()

Cette question apparaît lorsque vous cherchez comment faire cela, même si vous essayez de le faire par programme. J'espère donc que cela aidera tous ceux qui cherchent à le faire en scala/Java. Autrement, les utilisateurs de curl peuvent simplement faire ce que la réponse principale dit et utiliser

curl http://localhost:9200/_aliases
0
EdgeCaseBerg
You can also get specific index using 

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"
      }
    }
  }
}
For more info [https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-get-index.html][1]
0
Yagnesh bhalala