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..
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" : { }
}
}
}
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
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" : { ... }
}
}
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/
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
Je recommande également de faire /_cat / indices qui donne une belle liste lisible par l'homme de vos index.
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
}}
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
_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" : { }
}
}
}
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()
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
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.
<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 + "]");
}
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"}
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
...
...
...
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
}
}
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