Wyświetla wszystkie indeksy na serwerze ElasticSearch?

251

Chciałbym wyświetlić listę wszystkich indeksów obecnych na serwerze ElasticSearch. Próbowałem tego:

curl -XGET localhost:9200/

ale to po prostu daje mi to:

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

Chcę listę wszystkich indeksów ..

Eva
źródło

Odpowiedzi:

407

Aby uzyskać zwięzłą listę wszystkich wskaźników w klastrze, zadzwoń

curl http://localhost:9200/_aliases

da ci to listę indeksów i ich aliasów.

Jeśli chcesz ładnie wydrukować, dodaj pretty=true:

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

Wynik będzie wyglądał mniej więcej tak, jeśli twoje indeksy zostaną wywołane old_deuteronomyi mungojerrie:

{
  "old_deuteronomy" : {
    "aliases" : { }
  },
  "mungojerrie" : {
    "aliases" : {
      "rumpleteazer" : { },
      "that_horrible_cat" : { }
    }
  }
}
karmi
źródło
5
@paweloque odpowiedź wygląda teraz na prawidłowe rozwiązanie; wydaje się czystszy. curl http://localhost:9200/_stats/indexes\?pretty\=1
notapatch
1
Moje 2 centy za zwykłą (nie-jsonowską) listę:curl -s localhost:9200/_aliases?pretty=true | awk -F\" '!/aliases/ && $2 != "" {print $2}'
Yaron
W przypadku Elasticsearch 6.5 albo /statspunkt końcowy, albo punkt końcowy zdrowia z param_cluster/health?level=indices
Justin W.
curl localhost: 9200 / _cat / indices? v pracował dla mnie (na Elastic 6.2.4)
Matt L.
78

Próbować

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

Umożliwi to śledzenie danych wyjściowych w sposób tabelaryczny

health index    pri rep docs.count docs.deleted store.size pri.store.size
yellow customer   5   1          0            0       495b           495b
Abhijit Mazumder
źródło
Dodanie fajki do sortowania sprawiło, że łatwo było zobaczyć, co stanie się zielone. Również zmiana wielkości sklepu wskazała dodatkowy postęp.
kevpie
możesz także wybierać i porządkować kolumny, dodając np. & h = zdrowie, indeks, a także sortować za pomocą & s = zdrowie: desc
Georg Engel
33

Możesz zapytać, localhost:9200/_statusa to da ci listę indeksów i informacji o każdym z nich. Odpowiedź będzie wyglądać mniej więcej tak:

{
  "ok" : true,
  "_shards" : { ... },
  "indices" : {
    "my_index" : { ... },
    "another_index" : { ... }
  }
}
Matthew Boynes
źródło
3
Jeśli chcesz tylko poznać listę nazw indeksów, to podejście jest zbyt duże i wolniejsze. Lepsze wykorzystanie -GET /_stats/indexes
asyncwait
4
@asyncwait polecam /_stats/indicesponieważ jest to poprawne mnogiej, a także klucz stosowany w /_statusa /_stats.
Nicholas Shanks
2
Wydaje się, że nie jest już prawidłowym adresem URL w wersji 5.6.
The Unknown Dev,
1
Punkt końcowy API zmienił się _nodes/statsi _nodes/status@KimberlyW
maxymoo
Przestarzałe w 1.2.0.
jarmod
26

Komenda _stats zapewnia sposoby dostosowywania wyników poprzez określenie żądanych metryk. Aby uzyskać indeksy, zapytanie jest następujące:

GET /_stats/indices

Ogólny format _statszapytania to:

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

Gdzie są dane:

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

Jako ćwiczenie dla siebie napisałem małą wtyczkę elasticsearch, która zapewnia funkcjonalność do wyświetlania indeksów elasticsearch bez żadnych innych informacji. Można go znaleźć pod następującym adresem URL:

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

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

pawelokowy
źródło
2
Nie działa:"type": "illegal_argument_exception", "reason": "request [/_stats/indices] contains unrecognized metric: [indices]"
Ivan Yurchenko
@IvanYurchenko Już dawno zaimplementowałem moją wtyczkę elasticsearch. Bardzo możliwe, że interfejsy API uległy zmianie i już nie działają. Najlepiej jest użyć polecenia „_aliases”. Dostarczy również informacji o wszystkich indeksach w elasticsearch.
pawelokalny
18

Używam tego, aby uzyskać wszystkie indeksy:

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

Dzięki tej liście możesz pracować nad ...

Przykład

$ 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

Aby uzyskać trzecią kolumnę powyżej (nazwy indeksów):

$ 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

UWAGA: Możesz także użyć awk '{print $3}'zamiast cut -d\ -f3.

Nagłówki kolumn

Możesz również ?vdodać zapytanie do znaku, aby dodać nagłówek kolumny. Spowoduje to złamanie cut...metody, dlatego polecam użycie awk..zaznaczenia w tym miejscu.

$ 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
themisterunknown
źródło
1
curl -s 'http://localhost:9200/_cat/indices?h=index'wypisze tylko nazwę indeksu. Nie trzeba używać sztuczek powłoki do filtrowania kolumny.
hgf
nie tylko możesz użyć awk, powinieneś użyć awk (lub użyj tr -s ' 'wcześniej, cutaby skondensować spacje), albo nie dostaniesz nazwy indeksu, jeśli status jest taki, redże będzie wypełniony spacjami i cuttraktuje każdą spację jako rozgraniczającą nowe pole, nawet jeśli to „pole” skończy się puste
kbolino,
11

Poleciłbym także wykonanie / _cat / indices, które dają ładną czytelną dla ludzi listę twoich indeksów.

Matt Watson
źródło
8

Najprostszym sposobem uzyskania listy tylko indeksów jest użycie powyższej odpowiedzi z parametrem „h = indeks”:

curl -XGET "localhost:9200/_cat/indices?h=index"
J. Lewis
źródło
7

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

To wyjdzie jak poniżej

{
  "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
    }}
PShetty
źródło
Wszystkie pozostałe punkty końcowe nie działały dla mnie. Twoja odpowiedź zadziałała! Dzięki. Zobacz stackoverflow.com/questions/49204526/…
arun
Ja też, czy jest to nowsza wersja. Główne odpowiedzi wydają się działać w wersji 2.x, ale nie w wersji 6.x
Andrew Jon Dodds
5

Dam ci zapytanie, które możesz uruchomić na kibana.

GET /_cat/indices?v

a wersja CURL będzie

CURL -XGET http://localhost:9200/_cat/indices?v
Pinkesh Sharma
źródło
5
You may use this command line.

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

Więcej informacji (oficjalna strona Elasticsearch)

Jagagala Bhagala
źródło
3

Aby wyświetlić listę indeksów, możesz: curl 'localhost: 9200 / _cat / indices? V' Dokumentacja elasticsearch

kartikcr
źródło
3

Dostęp do bezpiecznego wyszukiwania elastycznego za pomocą funkcji Curl (aktualizacja 2020)

Jeśli Elastic Searchjest zabezpieczony, możesz użyć tego polecenia, aby wyświetlić listę indeksów

curl http://username:password@localhost:9200/_aliases?pretty=true
klapsa wiśnia
źródło
2

_stats/indicesdaje wynik z indices.

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

Ludzie tutaj odpowiedzieli, jak to zrobić w curl i sensie, niektórzy ludzie mogą potrzebować zrobić to w java.

Oto jest

client.admin().indices().stats(new IndicesStatsRequest()).actionGet().getIndices().keySet()
Avinash Kumar Pandey
źródło
2

W przypadku Elasticsearch 6.X najbardziej pomocne okazało się następujące. Każdy z nich podaje w odpowiedzi inne dane.

# 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
Justin W.
źródło
2

Możesz także uzyskać określony indeks za pomocą

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

Po więcej informacji

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-get-index.html

Jagagala Bhagala
źródło
1

oto inny sposób, aby zobaczyć wskaźniki w db:

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"}
TheodoreC
źródło
1

Jednym z najlepszych sposobów wyświetlania list indeksów + w celu wyświetlenia ich statusu wraz z listą: jest po prostu wykonanie poniższego zapytania.

Uwaga: najlepiej użyć Sense, aby uzyskać odpowiednią moc wyjściową.

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

Przykładowy wynik jest następujący. Główną zaletą jest to, że w zasadzie pokazuje nazwę indeksu i fragmenty, w których został zapisany, rozmiar indeksu i fragmenty ip itp

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                                                 
...
...
...
Ritesh Aryal
źródło
1

Używam _stats/indexespunktu końcowego, aby uzyskać blob danych typu json, a następnie filtrować za pomocą jq .

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

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

Jeśli nie chcesz cytatów, dodaj -rflagę do jq.

Tak, punktem końcowym jest indexesklucz danych indices, dlatego też nie mogli się zdecydować :)

Potrzebowałem tego, aby wyczyścić te wskaźniki śmieci utworzone przez wewnętrzny skan bezpieczeństwa (nessus).

PS. Gorąco polecam zapoznanie się z jq, jeśli zamierzasz wchodzić w interakcję z ES z wiersza poleceń.

spazm
źródło
1
<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 + "]");
}
StanislavKo
źródło
Możesz podać wyjaśnienie kodu i uczynić odpowiedź nieco bardziej czytelną ... Jak odpowiedzieć
AgataB 10.09.16
1

Jeśli pracujesz w scali, sposobem na to i skorzystanie Futurez tego jest utworzenie RequestExecutor, a następnie skorzystanie z IndicesStatsRequestBuilder i klienta administracyjnego w celu przesłania żądania.

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

Egzekutor jest usuwany z tego postu na blogu, co jest zdecydowanie dobrą lekturą, jeśli próbujesz programowo wysyłać zapytania do ES, a nie przez zwijanie. Po jego utworzeniu możesz łatwo utworzyć listę wszystkich indeksów:

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

clientjest instancją klienta, która może być węzłem lub klientem transportu, w zależności od potrzeb. Będziesz także musiał mieć domyślny ExecutionContextzakres dla tego żądania. Jeśli spróbujesz skompilować ten kod bez niego, otrzymasz od kompilatora scala ostrzeżenie, jak go uzyskać, jeśli jeszcze go nie zaimportowano.

Potrzebowałem liczby dokumentów, ale jeśli naprawdę potrzebujesz tylko nazw indeksów, możesz wyciągnąć je z klawiszy mapy zamiast z IndexStats:

indicesStatsResponse.getIndices().keySet()

To pytanie pojawia się, gdy szukasz sposobu, aby to zrobić, nawet jeśli próbujesz to zrobić programowo, więc mam nadzieję, że pomoże to każdemu, kto chce to zrobić w scala / java. W przeciwnym razie użytkownicy curl mogą zrobić to, co mówi najlepsza odpowiedź i użyć

curl http://localhost:9200/_aliases
EdgeCaseBerg
źródło
1

możesz wypróbować to polecenie

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

dat nguyen
źródło
1
Cześć, tylko krótka notatka. Zostało to określone w powyższych odpowiedziach blisko 3 razy. Nie publikuj powtarzających się odpowiedzi, które już zostały udzielone, chyba że masz zamiar je edytować i dodać więcej informacji, które nie zostały opublikowane wcześniej we wcześniejszych odpowiedziach. Mam nadzieję, że was nie zniechęcam, ale ma to na celu zapewnienie, że wszystkie pytania i odpowiedzi nie zostaną zduplikowane i powtarzalne.
Opster ES Ninja - Kamal
1

Miałem Kibana i ES zainstalowane na komputerze. Ale nie znałem szczegółów (przy której ścieżce lub porcie) był węzeł ES na tym komputerze.

Jak możesz to zrobić z Kibana (wersja 5.6)?

  • Idź do Dev Tools
  • Zobacz sekcję Konsola i uruchom następujące zapytanie:

GET _cat/indices

Byłem zainteresowany znalezieniem wielkości konkretnego indeksu ES

razvang
źródło
0

Jeśli masz curl zainstalowany w swoim systemie, spróbuj tego prostego polecenia: curl -XGET xx.xx.xx.xx: 9200 / _cat / indices? V

Wyżej wymienione polecenie daje wynik w tym formacie: wynik, aby pobrać wszystkie indeksy

Ranjan Singh
źródło