it-swarm.com.de

Alle Indizes auf dem ElasticSearch-Server auflisten?

Ich möchte alle auf einem ElasticSearch-Server vorhandenen Indizes auflisten. Ich habe das versucht:

curl -XGET localhost:9200/

aber es gibt mir nur das:

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

Ich möchte eine Liste aller Indizes.

188
Eva

Rufen Sie eine kurze Liste aller Indizes in Ihrem Cluster auf 

curl http://localhost:9200/_aliases

dadurch erhalten Sie eine Liste der Indizes und deren Aliasnamen.

Wenn Sie es hübsch drucken möchten, fügen Sie pretty=1 hinzu:

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

Das Ergebnis sieht ungefähr so ​​aus, wenn Ihre Indizes old_deuteronomy und mungojerrie heißen:

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

Versuchen 

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

Ich werde Ihnen die folgende selbsterklärende Ausgabe in Tabellenform geben

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

Sie können localhost:9200/_status abfragen. Daraufhin erhalten Sie eine Liste mit Indizes und Informationen zu jedem Index. Die Antwort sieht etwa so aus:

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

Mit dem Befehl _stats können Sie die Ergebnisse anpassen, indem Sie die gewünschten Metriken angeben. Um die Indizes zu erhalten, lautet die Abfrage wie folgt:

GET /_stats/indices

Das allgemeine Format der _stats-Abfrage lautet:

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

Wo sind die Metriken:

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

Als Übung für mich selbst habe ich ein kleines Elasticsearch-Plugin geschrieben, das die Funktionalität zum Auflisten von Elasticsearch-Indizes ohne weitere Informationen bietet. Sie finden es unter folgender URL:

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

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

25
paweloque

Ich verwende das, um alle Indizes zu erhalten:

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

Mit dieser Liste können Sie arbeiten ...

Beispiel

$ 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

So erhalten Sie die 3. Spalte oben (Namen der Indizes):

$ 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

HINWEIS: Sie können auch awk '{print $3}' anstelle von cut -d\ -f3 verwenden.

Spaltenüberschriften

Sie können die Abfrage auch mit ?v versehen, um eine Spaltenüberschrift hinzuzufügen. Wenn Sie dies tun, wird die cut... -Methode nicht verwendet. Ich empfehle an dieser Stelle die awk..-Auswahl.

$ 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

Ich würde auch empfehlen,/_cat/indexes zu machen, was eine von Nizza lesbare Liste Ihrer Indizes enthält.

10
Matt Watson

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

Dies wird wie folgt ausgegeben

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

Ich gebe Ihnen die Abfrage, die Sie mit Kibana ausführen können.

GET /_cat/indices?v

und die CURL-Version wird sein 

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

_stats/indices liefert das Ergebnis mit 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

Probieren Sie diese Katzen-API aus: Sie erhalten eine Liste aller Indizes mit Gesundheitszustand und anderen Details. 

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

2
Gaurav

Die einfachste Möglichkeit, eine Liste nur Indizes zu erhalten, ist die Verwendung der obigen Antwort mit dem Parameter 'h = index': 

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

Die Leute hier haben geantwortet, wie das geht, und einige Leute müssen dies in Java tun. 

Hier kommt's

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

Ich benutze den _stats/indexes-Endpunkt, um einen Json-Datenblock zu erhalten, und filtere dann mit jq .

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

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

Wenn Sie keine Anführungszeichen wünschen, fügen Sie jq ein -r-Flag hinzu.

Ja, der Endpunkt ist indexes und der Datenschlüssel ist indices, sodass sie sich auch nicht entscheiden konnten :)

Ich brauchte dies, um diese durch einen internen Sicherheits-Scan (nessus) erstellten Abfallindizes aufzuräumen.

PS. Ich empfehle Ihnen dringend, sich mit jq vertraut zu machen, wenn Sie von der Befehlszeile aus mit ES interagieren möchten.

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

sie können diesen Befehl ausprobieren 

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

0
dat nguyen

Ich hatte Kibana und ES auf einer Maschine installiert. Ich wusste jedoch nicht, welche Details (an welchem ​​Pfad oder an welchem ​​Port) der ES-Knoten auf dieser Maschine war.

Wie kann man das also von Kibana (Version 5.6) aus machen?

  • Gehe zu Dev Tools
  • Siehe Abschnitt Console und führen Sie die folgende Abfrage aus:

GET _cat/indices

Ich war daran interessiert, die Größe eines bestimmten ES-Index herauszufinden

0
razvang

So listen Sie die Indizes auf: curl 'localhost: 9200/_cat/indexes? V' Elasticsearch-Dokumentation

0
kartikcr

Für Elasticsearch 6.X war das Folgende am hilfreichsten. Jeder liefert unterschiedliche Daten in der Antwort.

# 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.

hier ist eine andere Möglichkeit, nur die Indizes in der Datenbank zu sehen:

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

Eine der besten Methoden zum Auflisten von Indizes + zur Anzeige des Status zusammen mit list: Durch einfaches Ausführen der folgenden Abfrage.

Hinweis: Verwenden Sie vorzugsweise Sense, um die korrekte Ausgabe zu erhalten.

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

Die Beispielausgabe ist wie folgt. Der Hauptvorteil besteht darin, dass im Wesentlichen der Indexname und die darin enthaltenen Shards, die Indexgröße und die Shards ip usw. angezeigt werden

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"

Für mehr (Elasticsearch Official site) 

0
Yagnesh bhalala

Wenn Sie in scala arbeiten, können Sie dazu einen RequestExecutor erstellen und Future verwenden. Verwenden Sie dann IndicesStatsRequestBuilder und den Verwaltungsclient, um Ihre Anfrage zu senden. 

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

Der Executor wird von diesem Blogbeitrag abgehoben, was definitiv eine gute Lektüre ist, wenn Sie versuchen, ES programmgesteuert und nicht durch curl abzufragen. Wenn Sie dies haben, können Sie ganz einfach eine Liste aller Indizes erstellen: 

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 ist eine Instanz von Client , bei der es sich um einen Knoten oder einen Transport-Client handeln kann, je nachdem, was Ihren Anforderungen entspricht. Für diese Anforderung benötigen Sie außerdem eine implizite ExecutionContext im Geltungsbereich. Wenn Sie versuchen, diesen Code ohne diesen Code zu kompilieren, erhalten Sie vom Scala-Compiler eine Warnung, wie der Code abgerufen werden kann, wenn Sie noch keinen Code importiert haben. 

Ich habe die Dokumentanzahl benötigt, aber wenn Sie wirklich nur die Namen der Indizes benötigen, können Sie sie aus den Schlüsseln der Karte heraus ziehen, statt aus der IndexStats:

indicesStatsResponse.getIndices().keySet()

Diese Frage wird angezeigt, wenn Sie suchen, wie Sie dies tun, auch wenn Sie versuchen, dies programmgesteuert auszuführen. Ich hoffe, dies hilft allen, die dies in scala/Java tun möchten. Andernfalls können curl-Benutzer nur die Top-Antwort ausführen und verwenden

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