Elastik Arama sunucusundaki tüm dizinler listeleniyor mu?


251

Elastik Arama sunucusunda bulunan tüm dizinleri listelemek istiyorum. Bunu denedim:

curl -XGET localhost:9200/

ama bana sadece şunu veriyor:

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

Tüm indekslerin bir listesini istiyorum ..

Yanıtlar:


407

Kümenizdeki tüm dizinlerin kısa bir listesi için arayın

curl http://localhost:9200/_aliases

bu size indekslerin ve takma adlarının bir listesini verecektir.

Güzel yazdırılmasını istiyorsanız ekleyin pretty=true:

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

Senin endeksleri denir eğer sonuç, bu gibi bir şey olacaktır old_deuteronomyve mungojerrie:

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

5
@paweloque cevap şimdi doğru çözüm gibi görünüyor; daha temiz görünüyor. curl http://localhost:9200/_stats/indexes\?pretty\=1
notapatch

1
Düz (json olmayan) bir liste için 2 sent:curl -s localhost:9200/_aliases?pretty=true | awk -F\" '!/aliases/ && $2 != "" {print $2}'
Yaron

Elasticsearch 6.5 için ya vurmak /statsbitiş noktası veya param ile sağlık bitiş noktası_cluster/health?level=indices
Justin W.

curl localhost: 9200 / _cat / indeks? v benim için çalıştı (Elastik 6.2.4'te)
Matt L.

78

Deneyin

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

Tablo şeklinde kendi kendini açıklayan çıktıları takip etmenizi sağlar.

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

Sıralamak için bir boru eklemek, neyin yeşil olduğunu görmeyi kolaylaştırdı. Ayrıca store.size değişikliği ek ilerleme gösterdi.
kevpie

Ayrıca & h = health, index ekleyerek sütunları seçebilir ve sipariş edebilirsiniz. & s = health: desc
Georg Engel

33

Sorgulayabilirsiniz localhost:9200/_statusve bu size her biri hakkında bir indeks listesi ve bilgi verecektir. Yanıt şöyle görünecektir:

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

3
Dizin adlarının listesini bilmek istiyorsanız, bu yaklaşım çok ve yavaştır. Daha iyi kullanım -GET /_stats/indexes
asyncwait

4
@asyncwait /_stats/indicesDoğru çoğul ve aynı zamanda /_statusve içinde kullanılan anahtar olduğundan tavsiye ederim /_stats.
Nicholas Shanks

2
5.6 sürümünde artık geçerli bir URL gibi görünmüyor.
The Unknown Dev

1
API uç noktası _nodes/statsve _nodes/status@KimberlyW
maxymoo olarak

1.2.0'da kullanımdan kaldırıldı.
jarmod

26

_Stats komutu, istenen metrikleri belirterek sonuçları özelleştirmek için yollar sağlar. Endeksleri almak için sorgu aşağıdaki gibidir:

GET /_stats/indices

_statsSorgunun genel biçimi :

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

Metrikler nerede:

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

Kendime bir alıştırma olarak, elasticsearch indekslerini başka bir bilgi olmadan listeleme işlevselliği sağlayan küçük bir elasticsearch eklentisi yazdım. Aşağıdaki url'de bulabilirsiniz:

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

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


2
"type": "illegal_argument_exception", "reason": "request [/_stats/indices] contains unrecognized metric: [indices]"
Çalışmıyor

@IvanYurchenko Uzun zamandır elasticsearch eklentimi uyguladım. API'lerin o zamandan beri değişmiş olması ve artık çalışmıyor olması çok iyi .. En iyisi '_aliases' komutunu kullanmaktır. Ayrıca, elasticsearch'teki tüm endeksler hakkında bilgi sağlayacaktır.
paweloque

18

Bunu tüm endeksleri almak için kullanıyorum:

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

Bu liste ile üzerinde çalışabilirsiniz ...

Misal

$ 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

Yukarıdaki 3. sütunu almak için (dizinlerin adları):

$ 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

NOT: Bunun awk '{print $3}'yerine de kullanabilirsiniz cut -d\ -f3.

Sütun Başlıkları

?vSütun üstbilgisi eklemek için sorguyu a ile son ekleyebilirsiniz. Bunu yapmak cut...yöntemi kıracak, bu yüzden awk..seçimi bu noktada kullanmanızı tavsiye ederim .

$ 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

1
curl -s 'http://localhost:9200/_cat/indices?h=index'yalnızca dizin adını yazdıracaktır. Sütunu filtrelemek için kabuk hileleri kullanmaya gerek yoktur.
hgf

sadece sen awk kullanabilirsiniz, sen gerekir (veya başka kullanım awk kullanmak tr -s ' 'önce cutalanların yoğunlaşma pistlerine) veya durum ise başka bir dizin adı almazsınız red, arada boşluk ve doldurulur olacak çünkü cutdavranır sınırlandıran olarak her alanını "alan" boş
kalsa

11

Ayrıca dizinlerinizin okunabilir güzel bir listesini veren / _cat / dizinleri yapmanızı tavsiye ederim.


8

Yalnızca dizinlerin bir listesini almanın en basit yolu yukarıdaki cevabı 'h = index' parametresiyle kullanmaktır:

curl -XGET "localhost:9200/_cat/indices?h=index"

7

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

Bu aşağıdaki gibi çıkacaktır

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

Diğer tüm uç noktalar benim için çalışmadı. Cevabınız işe yaradı! Teşekkürler. Bkz. Stackoverflow.com/questions/49204526/…
arun

Ben de, bu daha yeni bir sürüm. Ana cevaplar 2.x üzerinde çalışıyor gibi görünüyor ama 6.x üzerinde değil
Andrew Jon Dodds

5

Size kibana'da çalıştırabileceğiniz sorguyu vereceğim.

GET /_cat/indices?v

ve CURL sürümü

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


3

Endeksleri listelemek için şunları yapabilirsiniz: curl 'localhost: 9200 / _cat / indices? V' Elasticsearch Documentation


3

Güvenli Elastik Aramaya Kıvrılma Yoluyla Erişme (Güncelleme 2020)

Eğer Elastic Searchsabitlenir, Sen liste indeksleri için bu komutu kullanabilirsiniz

curl http://username:password@localhost:9200/_aliases?pretty=true

2

_stats/indicessonucu verir indices.

$ curl -XGET "localhost:9200/_stats/indices?pretty=true"
{
  "_shards" : {
    "total" : 10,
    "successful" : 5,
    "failed" : 0
  },
  "_all" : {
    "primaries" : { },
    "total" : { }
  },
  "indices" : {
    "visitors" : {
      "primaries" : { },
      "total" : { }
    }
  }
}

2

Buradaki insanlar bunu kıvrılma ve anlamla nasıl yapacağını yanıtladı, bazı insanların bunu java'da yapması gerekebilir.

İşte gidiyor

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


2

Elasticsearch 6.X için aşağıdakileri en yararlı buldum. Her biri yanıtta farklı veriler sağlar.

# 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

2

Ayrıca aşağıdakileri kullanarak belirli bir dizin alabilirsiniz:

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

Daha fazla bilgi için

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


1

İşte sadece db endeksleri görmek için başka bir yol:

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

1

Endeksleri listelemenin en iyi yollarından biri + durumunu listeyle birlikte görüntülemek için: sadece aşağıdaki sorguyu çalıştırmaktır.

Not: uygun çıktıyı almak için tercihen Sense kullanın.

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

Örnek çıktı aşağıdaki gibidir. Temel avantajı, temel olarak dizin adını ve içine kaydettiği parçaları, dizin boyutunu ve parçaları ip vb.

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

1

Kullandığım _stats/indexesverilerin bir json damla ve daha sonra filtreyi almak için son nokta JQ .

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

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

Tırnak işareti istemiyorsanız -rjq'ye bir bayrak ekleyin .

Evet, bitiş noktası indexesve veri anahtarı indices, bu yüzden de kararlarını veremediler :)

Bir iç güvenlik taraması (nessus) tarafından oluşturulan bu çöp dizinlerini temizlemek için buna ihtiyacım vardı.

PS. Komut satırından ES ile etkileşime girecekseniz jq ile tanışmanızı şiddetle tavsiye ederim .


1
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>2.4.0</version>
</dependency>

Java API'sı

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

Kod için biraz açıklama yapabilir ve cevabı biraz daha okunabilir hale getirebilirsiniz ... Nasıl
Yanıtlanır

1

FutureScala'da çalışıyorsanız, bunu yapmanın ve kullanmanın bir yolu bir RequestExecutor oluşturmaktır, ardından isteğinizi göndermek için IndicesStatsRequestBuilder ve yönetici istemcisini kullanın.

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

İcracı bu blog yazısından kaldırılır ve bu da kıvrımdan değil ES programlı olarak sorgulamaya çalışıyorsanız kesinlikle iyi bir okuma olur. Bu bir tane var gibi kolayca tüm dizinlerin bir listesini oluşturabilirsiniz:

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

clientbir düğüm veya aktarım istemcisi olabilen, hangisi ihtiyaçlarınıza uygun olursa olsun , İstemci örneğidir . Ayrıca ExecutionContext, bu istek için örtük bir kapsamınızın olması gerekir . Bu kodu onsuz derlemeye çalışırsanız, önceden alınmış bir dosyanız yoksa, scala derleyicisinden bunu nasıl alacağınıza dair bir uyarı alırsınız.

Belge sayımına ihtiyacım vardı, ancak gerçekten sadece indekslerin adlarına ihtiyacınız varsa, bunları haritanın anahtarlarından çekebilirsiniz IndexStats:

indicesStatsResponse.getIndices().keySet()

Bu soru, bunu programlı olarak yapmaya çalışsanız bile, bunu nasıl yapacağınızı ararken ortaya çıkıyor, bu yüzden umarım bu, scala / java'da bunu yapmak isteyen herkese yardımcı olur. Aksi takdirde, curl kullanıcıları en üstteki cevabın söylediği gibi kullanabilir ve kullanabilir

curl http://localhost:9200/_aliases

1

bu komutu deneyebilirsin

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


1
Merhaba, kısa bir not. Bu, yukarıdaki cevaplarda 3 kata yakın olarak belirtilmiştir. Lütfen bunu düzenlemeyi düşünmedikçe daha önce verilen tekrarlanan yanıtları göndermeyin ve önceki yanıtlarda daha önce gönderilmemiş daha fazla bilgi eklemeyin. Umarım sizi caydırmıyorum ama bu tüm soruların ve cevapların tekrarlanmamasını ve tekrarlanmamasını sağlamaktır.
Opster ES Ninja - Kamal

1

Bir makineye Kibana ve ES taktım. Ama ayrıntıları bilmiyordum (hangi yolda veya limanda) o makinedeki ES düğümü.

Peki bunu Kibana'dan (sürüm 5.6) nasıl yapabilirsiniz?

  • Geliştirici Araçlarına git
  • Konsol bölümüne bakın ve aşağıdaki sorguyu çalıştırın:

GET _cat/indices

Belirli bir ES dizininin boyutunu bulmakla ilgileniyordum


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.