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.
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" : { }
}
}
}
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
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" : { ... }
}
}
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/
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 ...
$ 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.
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
Ich würde auch empfehlen,/_cat/indexes zu machen, was eine von Nizza lesbare Liste Ihrer Indizes enthält.
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
}}
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
_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" : { }
}
}
}
Probieren Sie diese Katzen-API aus: Sie erhalten eine Liste aller Indizes mit Gesundheitszustand und anderen Details.
CURL -XGET http: // localhost: 9200/_cat/indexe
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"
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.
<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 + "]");
}
sie können diesen Befehl ausprobieren
curl -X GET http: // localhost: 9200/_cat/indices? v
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?
GET _cat/indices
Ich war daran interessiert, die Größe eines bestimmten ES-Index herauszufinden
So listen Sie die Indizes auf: curl 'localhost: 9200/_cat/indexes? V' Elasticsearch-Dokumentation
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
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"}
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
...
...
...
You may use this command line.
curl -X GET "localhost: 9200/_cat/indices? v"
Für mehr (Elasticsearch Official site)
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
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]