liste tous les index sur le serveur ElasticSearch?

Je voudrais lister tous les index présents sur un serveur ElasticSearch. J'ai essayé ceci:

curl -XGET localhost:9200/

Mais ça 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..

175
demandé sur Eva 2013-07-02 17:09:42

16 réponses

Pour une liste concise de tous les indices de votre cluster, appelez

curl http://localhost:9200/_aliases

Cela vous donnera une liste d'indices et leurs alias.

Si vous voulez qu'il soit joli-imprimé, ajoutez pretty=1:

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

Le résultat ressemblera à ceci, si vos indices sont appelés old_deuteronomy et mungojerrie:

{
  "old_deuteronomy" : {
    "aliases" : { }
  },
  "mungojerrie" : {
    "aliases" : {
      "rumpleteazer" : { },
      "that_horrible_cat" : { }
    }
  }
}
302
répondu karmi 2014-01-16 11:27:48

Essayez

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

Je vais vous donner la sortie explicite suivante d'une manière tabulaire

health index    pri rep docs.count docs.deleted store.size pri.store.size
yellow customer   5   1          0            0       495b           495b
40
répondu Abhijit Mazumder 2015-05-13 19:59:55

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

{
  "ok" : true,
  "_shards" : { ... },
  "indices" : {
    "my_index" : { ... },
    "another_index" : { ... }
  }
}
31
répondu Matthew Boynes 2013-07-02 14:07:05

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

GET /_stats/indices

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

/_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

Comme un exercice pour moi-même, j'ai écrit un petit plugin elasticsearch fournissant la fonctionnalité pour lister les indices elasticsearch sans aucune autre information. Vous pouvez le trouver à la suite de url:

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

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

25
répondu paweloque 2015-07-29 05:02:28

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 indices):

$ 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 aussi 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 va casser la méthode cut..., donc je recommande 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
13
répondu themisterunknown 2016-05-13 13:10:41

Je recommande également de faire /_cat / indices qui donne une belle liste lisible par l'homme de vos index.

9
répondu Matt Watson 2014-08-07 18:53:21

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

Cela produira 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
    }}
5
répondu PShetty 2018-01-16 09:44:24

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
répondu Pinkesh Sharma 2017-07-25 19:59:50

_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
répondu prayagupd 2015-01-09 08:25:17

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

Voilà

client.admin().indices().stats(new IndicesStatsRequest()).actionGet().getIndices().keySet()
2
répondu Avinash Kumar Pandey 2015-08-28 08:21:20

Essayez cette API cat: 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
répondu Gaurav 2017-09-18 11:05:43

J'utilise le point de terminaison _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 point de terminaison est indexes et la clé de données est indices, donc ils ne pouvaient pas se décider non plus:)

J'en avais besoin pour nettoyer ces indices de déchets créés par une analyse de sécurité interne (nessus).

PS. Je recommande fortement de se familiariser avec jq Si vous allez interagir avec ES de la ligne de commande.

1
répondu spazm 2016-06-15 18:00:49
<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
répondu StanislavKo 2016-09-10 15:14:36

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
répondu TheodoreC 2015-04-16 11:55:45

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

Remarque: Utilisez de préférence Sense pour obtenir la sortie appropriée.

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

La sortie de l'échantillon est comme ci-dessous. Le principal avantage est qu'il montre essentiellement le nom de l'index et les fragments dans lesquels il a été enregistré, la taille de l'index et les fragments ip 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
répondu Ritesh Aryal 2016-06-01 16:33:41

Si vous travaillez dans scala, un moyen de le faire et d'utiliser Future est de créer un RequestExecutor, puis utilisez le IndicesStatsRequestBuilder et le client administratif 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 ce blog qui est certainement une bonne lecture si vous essayez D'interroger ES par programmation et non par curl. Un 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 {[10] } qui peut être un nœud ou un client de transport, selon vos besoins. Vous devrez également avoir un ExecutionContext implicite dans la portée de cette requête. Si vous essayez de compiler ce code sans cela, vous recevrez un avertissement du compilateur scala sur 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 des indices, vous pouvez les extraire des clés de la carte au lieu de IndexStats:

indicesStatsResponse.getIndices().keySet()

Cette question apparaît lorsque vous cherchez comment le faire même si vous essayez de le faire par programme, donc j'espère que cela aidera tous ceux qui cherchent à le faire dans scala / java. Sinon, les utilisateurs de curl peuvent simplement faire comme le dit la réponse supérieure et utiliser

curl http://localhost:9200/_aliases
0
répondu EdgeCaseBerg 2016-11-15 14:12:34