แสดงรายการดัชนีทั้งหมดบนเซิร์ฟเวอร์ ElasticSearch หรือไม่


251

ฉันต้องการแสดงรายการดัชนีทั้งหมดที่มีอยู่ในเซิร์ฟเวอร์ ElasticSearch ฉันลองสิ่งนี้:

curl -XGET localhost:9200/

แต่มันให้สิ่งนี้กับฉัน:

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

ฉันต้องการรายการดัชนีทั้งหมด ..

คำตอบ:


407

สำหรับรายการดัชนีย่อทั้งหมดในคลัสเตอร์ของคุณให้โทร

curl http://localhost:9200/_aliases

นี่จะให้รายการดัชนีและชื่อแทนของคุณ

ถ้าคุณต้องการพิมพ์สวยเพิ่มpretty=true:

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

ผลลัพธ์จะมีลักษณะดังนี้หากดัชนีของคุณถูกเรียกold_deuteronomyและmungojerrie:

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

5
@paweloque คำตอบตอนนี้ดูเหมือนว่ามันเป็นทางออกที่ถูกต้อง; ดูเหมือนว่าสะอาดขึ้น curl http://localhost:9200/_stats/indexes\?pretty\=1
notapatch

1
2 เซ็นต์ของฉันสำหรับรายการธรรมดา (ไม่ใช่แบบ json):curl -s localhost:9200/_aliases?pretty=true | awk -F\" '!/aliases/ && $2 != "" {print $2}'
Yaron

สำหรับ Elasticsearch 6.5 อาจไปถึง/statsจุดสิ้นสุดหรือจุดสิ้นสุดด้านสุขภาพด้วย param_cluster/health?level=indices
Justin W.

locall curl : 9200 / _cat / indices? vใช้ได้สำหรับฉัน (บน Elastic 6.2.4)
Matt L.

78

ลอง

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

มันจะให้ผลต่อไปนี้อธิบายด้วยตนเองในลักษณะตาราง

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

การเพิ่มไปป์เพื่อจัดเรียงทำให้ง่ายต่อการดูว่าเกิดอะไรขึ้นสีเขียว การเปลี่ยนแปลงขนาดร้านค้ายังระบุความคืบหน้าเพิ่มเติม
kevpie

นอกจากนี้คุณยังสามารถเลือกและเรียงลำดับคอลัมน์เพิ่มเช่น & h = สุขภาพ, ดัชนีและเรียงลำดับด้วย & s = สุขภาพ: เรียง
Georg Engel

33

คุณสามารถค้นหาlocalhost:9200/_statusและจะให้รายการดัชนีและข้อมูลเกี่ยวกับแต่ละรายการ การตอบสนองจะมีลักษณะดังนี้:

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

3
หากคุณเพียงต้องการทราบรายชื่อดัชนีวิธีการนี้มากเกินไปและช้าลง ใช้ดีกว่า -GET /_stats/indexes
asyncwait

4
@asyncwait ผมอยากแนะนำ/_stats/indicesเพราะมันเป็นพหูพจน์ที่ถูกต้องและยังเป็นกุญแจสำคัญที่ใช้ในการและ/_status /_stats
Nicholas Shanks

2
ดูเหมือนจะไม่ใช่ URL ที่ถูกต้องอีกต่อไปในเวอร์ชัน 5.6
The Dev ที่ไม่รู้จัก

1
จุดสิ้นสุดของ API ได้เปลี่ยนเป็น_nodes/statsและ_nodes/status@KimberlyW
maxymoo

เลิกใช้แล้วใน 1.2.0
jarmod

26

คำสั่ง _stats จัดเตรียมวิธีในการปรับแต่งผลลัพธ์โดยการระบุเมทริกที่ต้องการ ในการรับดัชนีเคียวรีจะเป็นดังนี้:

GET /_stats/indices

รูปแบบทั่วไปของ_statsแบบสอบถามคือ:

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

ตัวชี้วัดอยู่ที่ไหน:

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

ในฐานะที่เป็นตัวฉันเองฉันได้เขียนปลั๊กอิน elasticsearch ขนาดเล็กที่มีฟังก์ชั่นในการแสดงรายการดัชนี elasticsearch โดยไม่มีข้อมูลอื่นใด คุณสามารถค้นหาได้ที่ URL ต่อไปนี้:

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]"
Ivan Yurchenko

@IvanYurchenko ฉันได้ติดตั้งปลั๊กอิน elasticsearch มานานแล้ว เป็นไปได้อย่างมากว่า API มีการเปลี่ยนแปลงตั้งแต่และไม่ทำงานอีกต่อไป .. ดีที่สุดคือการใช้คำสั่ง '_aliases' นอกจากนี้ยังจะให้ข้อมูลเกี่ยวกับดัชนีทั้งหมดใน elasticsearch
Paweloque

18

ฉันใช้สิ่งนี้เพื่อรับดัชนีทั้งหมด:

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

ด้วยรายการนี้คุณสามารถทำงานได้ ...

ตัวอย่าง

$ 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

ในการรับคอลัมน์ที่ 3 ด้านบน (ชื่อของดัชนี):

$ 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

หมายเหตุ:คุณยังสามารถใช้แทนawk '{print $3}'cut -d\ -f3

ส่วนหัวของคอลัมน์

คุณสามารถต่อท้ายแบบสอบถามด้วย a ?vเพื่อเพิ่มส่วนหัวของคอลัมน์ การทำเช่นนี้จะทำลายcut...วิธีการดังนั้นฉันขอแนะนำให้ใช้การawk..เลือก ณ จุดนี้

$ 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'จะพิมพ์เฉพาะชื่อดัชนี ไม่จำเป็นต้องใช้ลูกเล่นเปลือกเพื่อกรองคอลัมน์
hgf

ไม่เพียง แต่คุณสามารถใช้ awk เท่านั้นคุณควรใช้ awk (หรือใช้tr -s ' 'ก่อนcutเพื่อควบแน่นช่องว่าง) มิฉะนั้นคุณจะไม่ได้รับชื่อดัชนีถ้าสถานะเป็นredเพราะจะมีการบุด้วยช่องว่างและcutถือว่าแต่ละพื้นที่เป็น delimiting เขตข้อมูลใหม่แม้ว่า "เขตข้อมูล" นั้นจะว่างเปล่า
kbolino


8

วิธีที่ง่ายที่สุดในการรับรายการของดัชนีเท่านั้นคือใช้คำตอบข้างต้นโดยใช้พารามิเตอร์ 'h = index':

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

7

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

จะมีผลลัพธ์เช่นนี้ด้านล่าง

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

ปลายทางอื่น ๆ ทั้งหมดไม่ได้ผลสำหรับฉัน คำตอบของคุณทำงาน! ขอบคุณ. ดูstackoverflow.com/questions/49204526/...
อรุณ

ฉันเหมือนกันนี่คือสิ่งที่เป็นรุ่นใหม่กว่า คำตอบหลักดูเหมือนจะทำงานกับ 2.x แต่ไม่ใช่ 6.x
Andrew Jon Dodds

5

ฉันจะให้คำค้นหาที่คุณสามารถใช้กับ kibana ได้

GET /_cat/indices?v

และเวอร์ชัน CURL จะเป็น

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


3

หากต้องการแสดงดัชนีที่คุณสามารถทำได้: curl 'localhost: 9200 / _cat / indices? v' เอกสาร Elasticsearch


3

การเข้าถึงการค้นหา Elastic Secured ผ่าน Curl (อัพเดท 2020)

หากการElastic Searchรักษาความปลอดภัยคุณสามารถใช้คำสั่งนี้เพื่อแสดงรายการดัชนี

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

2

_stats/indicesindicesให้ผลที่มี

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

2

ผู้คนที่นี่ตอบว่าจะทำอย่างไรด้วยความงุนงงและความรู้สึกบางคนอาจต้องทำสิ่งนี้ใน java

ที่นี่มันไป

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


2

สำหรับ Elasticsearch 6.X ฉันพบว่าสิ่งต่อไปนี้มีประโยชน์มากที่สุด แต่ละข้อมูลให้แตกต่างกันในการตอบสนอง

# 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

คุณยังสามารถรับดัชนีเฉพาะได้ด้วย

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

สำหรับข้อมูลเพิ่มเติม

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


1

นี่เป็นอีกวิธีในการดูดัชนีในฐานข้อมูล:

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

หนึ่งในวิธีที่ดีที่สุดในการแสดงรายการดัชนี + เพื่อแสดงสถานะพร้อมกับลิสต์คือเพียงดำเนินการค้นหาด้านล่าง

หมายเหตุ: ควรใช้ Sense เพื่อให้ได้ผลลัพธ์ที่เหมาะสม

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

เอาต์พุตตัวอย่างมีดังต่อไปนี้ ข้อได้เปรียบหลักคือมันจะแสดงชื่อดัชนีและเศษที่บันทึกไว้ขนาดดัชนีและ shards ip ฯลฯ โดยทั่วไป

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

ผมใช้_stats/indexesปลายทางจะได้รับหยด JSON ของข้อมูลและตัวกรองแล้วด้วยJQ

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

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

หากคุณไม่ต้องการคำพูดให้เพิ่มการ-rตั้งค่าสถานะเป็น jq

ใช่จุดสิ้นสุดคือindexesและคีย์ข้อมูลคือindicesดังนั้นพวกเขาจึงไม่สามารถตัดสินใจได้ :)

ฉันต้องการสิ่งนี้เพื่อล้างดัชนีขยะเหล่านี้ที่สร้างขึ้นโดยการสแกนความปลอดภัยภายใน (Nessus)

PS ฉันขอแนะนำให้ทำความคุ้นเคยกับjqถ้าคุณจะโต้ตอบกับ ES จากบรรทัดคำสั่ง


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

คุณสามารถให้คำอธิบายสำหรับรหัสและทำให้คำตอบอ่านง่ายขึ้นนิดหน่อย ... วิธีการตอบ
AgataB

1

หากคุณทำงานในสกาล่าวิธีการทำเช่นนี้และใช้Futureคือการสร้างRequestExecutorจากนั้นใช้IndicesStatsRequestBuilderและไคลเอนต์การจัดการเพื่อส่งคำขอของคุณ

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

ผู้ดำเนินการถูกยกขึ้นจากโพสต์บล็อกนี้ซึ่งเป็นการอ่านที่ดีถ้าคุณพยายามที่จะสืบค้น ES แบบเป็นโปรแกรมและไม่ผ่าน curl คุณมีสิ่งนี้คุณสามารถสร้างรายการดัชนีทั้งหมดได้อย่างง่ายดาย:

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เป็นตัวอย่างของลูกค้าที่สามารถเป็นโหนดหรือไคลเอนต์การขนส่งแล้วแต่ความต้องการของคุณ คุณจะต้องมีนัยExecutionContextขอบเขตสำหรับคำขอนี้ หากคุณพยายามคอมไพล์โค้ดนี้โดยไม่ใช้มันคุณจะได้รับคำเตือนจากคอมไพเลอร์สกาล่าว่าจะรับได้อย่างไรถ้าคุณยังไม่มีอิมปอร์ตอยู่แล้ว

ฉันต้องการจำนวนเอกสาร แต่ถ้าคุณต้องการชื่อดัชนีเพียงอย่างเดียวคุณสามารถดึงพวกเขาออกจากปุ่มของแผนที่แทนจากIndexStats:

indicesStatsResponse.getIndices().keySet()

คำถามนี้ปรากฏขึ้นเมื่อคุณค้นหาวิธีการนี้แม้ว่าคุณจะพยายามทำสิ่งนี้โดยใช้โปรแกรมดังนั้นฉันหวังว่าสิ่งนี้จะช่วยให้ทุกคนที่ต้องการทำสิ่งนี้ใน scala / java มิฉะนั้นผู้ใช้งาน curl ก็สามารถทำได้ตามคำตอบยอดนิยมที่พูดและใช้งาน

curl http://localhost:9200/_aliases

1

คุณสามารถลองคำสั่งนี้

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


1
สวัสดีเพียงแค่ทราบอย่างรวดเร็ว สิ่งนี้ได้ถูกระบุไว้ในคำตอบข้างต้นเกือบ 3 ครั้ง โปรดอย่าโพสต์คำตอบซ้ำ ๆ ซึ่งได้รับไปแล้วยกเว้นว่าคุณต้องการแก้ไขและเพิ่มข้อมูลเพิ่มเติมซึ่งยังไม่ได้โพสต์ก่อนหน้านี้ในคำตอบก่อนหน้านี้ ฉันหวังว่าฉันจะไม่ทำให้ท้อใจกับคุณ แต่เพื่อให้มั่นใจว่าคำถามและคำตอบทั้งหมดจะไม่ซ้ำซ้อนและซ้ำไปซ้ำมา
Opster ES Ninja - Kamal

1

ฉันติดตั้ง Kibana และ ES ไว้ในเครื่อง แต่ฉันไม่ทราบรายละเอียด (ที่เส้นทางใดหรือพอร์ต) คือโหนด ES บนเครื่องนั้น

แล้วคุณจะทำมันจาก Kibana ได้อย่างไร (เวอร์ชั่น 5.6)

  • ไปที่เครื่องมือ Dev
  • ดูส่วนคอนโซลและเรียกใช้แบบสอบถามต่อไปนี้:

GET _cat/indices

ฉันสนใจที่จะหาขนาดของดัชนี ES เฉพาะ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.