Liệt kê tất cả các chỉ mục trên máy chủ ElasticSearch?


251

Tôi muốn liệt kê tất cả các chỉ mục hiện diện trên máy chủ ElasticSearch. Tôi đã thử điều này:

curl -XGET localhost:9200/

nhưng nó chỉ cho tôi điều này:

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

Tôi muốn một danh sách tất cả các chỉ mục ..

Câu trả lời:


405

Để biết danh sách ngắn gọn của tất cả các chỉ số trong cụm của bạn, hãy gọi

curl http://localhost:9200/_aliases

điều này sẽ cung cấp cho bạn một danh sách các chỉ số và bí danh của họ.

Nếu bạn muốn nó được in đẹp, hãy thêm pretty=true:

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

Kết quả sẽ trông giống như thế này, nếu các chỉ số của bạn được gọi old_deuteronomymungojerrie:

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

5
@paweloque trả lời bây giờ có vẻ như đó là giải pháp chính xác; có vẻ sạch sẽ hơn curl http://localhost:9200/_stats/indexes\?pretty\=1
bố

1
2 xu của tôi cho một danh sách đơn giản (không phải json):curl -s localhost:9200/_aliases?pretty=true | awk -F\" '!/aliases/ && $2 != "" {print $2}'
Yaron

Đối với Elaticsearch 6.5, hoặc đạt /statsđiểm cuối hoặc điểm cuối về sức khỏe với param_cluster/health?level=indices
Justin W.

curl localhost: 9200 / _cat / chỉ số? v làm việc cho tôi (trên Đàn hồi 6.2.4)
Matt L.

78

Thử

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

Nó sẽ cung cấp cho bạn sau đầu ra tự giải thích theo cách thức bảng

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

Thêm một đường ống để sắp xếp làm cho điều này dễ dàng để thấy những gì đang diễn ra. Ngoài ra các thay đổi store.size chỉ ra tiến bộ bổ sung.
kevpie

bạn cũng có thể chọn và đặt hàng các cột thêm ví dụ & h = Health, chỉ mục cũng như sắp xếp với & s = Health: desc
Georg Engel

33

Bạn có thể truy vấn localhost:9200/_statusvà điều đó sẽ cung cấp cho bạn một danh sách các chỉ số và thông tin về từng chỉ số. Phản hồi sẽ trông giống như thế này:

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

3
Nếu bạn chỉ muốn biết danh sách các tên chỉ mục thì cách tiếp cận này quá nhiều và chậm hơn. Sử dụng tốt hơn -GET /_stats/indexes
chờ

4
@asyncwait Tôi muốn giới thiệu /_stats/indicesvì đó là số nhiều chính xác và cũng là khóa được sử dụng trong /_statusvà trong /_stats.
Nicholas Shanks

2
Dường như không còn là một URL hợp lệ nữa trên phiên bản 5.6.
The Dev Dev

1
Điểm cuối API đã thay đổi thành _nodes/stats_nodes/status@KimberlyW
maxymoo

Không dùng nữa trong 1.2.0.
jarmod

26

Lệnh _stats cung cấp các cách để tùy chỉnh kết quả bằng cách chỉ định các số liệu mong muốn. Để có được các chỉ số, truy vấn như sau:

GET /_stats/indices

Định dạng chung của _statstruy vấn là:

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

Trường hợp các số liệu là:

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

Với tư cách là một bài tập cho chính tôi, tôi đã viết một plugin elaticsearch nhỏ cung cấp chức năng để liệt kê các chỉ số elaticsearch mà không có bất kỳ thông tin nào khác. Bạn có thể tìm thấy nó ở url sau:

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

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


2
Không hoạt động:"type": "illegal_argument_exception", "reason": "request [/_stats/indices] contains unrecognized metric: [indices]"
Ivan Yurchenko

@IvanYurchenko Tôi đã triển khai plugin elaticsearch của tôi từ lâu. Rất có thể các API đã thay đổi kể từ đó và nó không còn hoạt động nữa .. Tốt nhất là sử dụng lệnh '_aliases'. Nó cũng sẽ cung cấp thông tin về tất cả các chỉ số trong elaticsearch.
paweloque

18

Tôi sử dụng điều này để có được tất cả các chỉ số:

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

Với danh sách này, bạn có thể làm việc trên ...

Thí dụ

$ 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

Để có được cột thứ 3 ở trên (tên của các chỉ số):

$ 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

LƯU Ý: Bạn cũng có thể sử dụng awk '{print $3}'thay vì cut -d\ -f3.

Tiêu đề cột

Bạn cũng có thể thêm hậu tố truy vấn với một ?vtiêu đề cột. Làm như vậy sẽ phá vỡ cut...phương thức vì vậy tôi khuyên bạn nên sử dụng awk..lựa chọn tại thời điểm này.

$ 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'sẽ chỉ in ra tên chỉ mục. Không cần sử dụng thủ thuật shell để lọc cột.
hgf

Bạn không chỉ có thể sử dụng awk, bạn nên sử dụng awk (hoặc sử dụng tr -s ' 'trước đó cutđể ngưng tụ các khoảng trắng) nếu không bạn sẽ không nhận được tên chỉ mục nếu trạng thái là redvì nó sẽ được đệm bằng khoảng trắng và cutcoi mỗi không gian riêng lẻ là phân định một trường mới ngay cả khi "trường" đó kết thúc trống rỗng
kbolino

11

Tôi cũng khuyên bạn nên làm / _cat / chỉ số cung cấp một danh sách dễ đọc của con người về các chỉ mục của bạn.


8

Cách đơn giản nhất để có danh sách chỉ mục là sử dụng câu trả lời ở trên, với tham số 'h = index':

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

7

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

Điều này sẽ xuất ra như dưới đây

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

Tất cả các điểm cuối khác không làm việc cho tôi. Câu trả lời của bạn đã làm việc! Cám ơn. Xem stackoverflow.com/questions/49204526/ từ
arun

Tôi cũng vậy, đây là một phiên bản mới hơn. Các câu trả lời chính dường như hoạt động trên 2.x nhưng không phải 6.x
Andrew Jon Dodds

5

Tôi sẽ cung cấp cho bạn truy vấn mà bạn có thể chạy trên kibana.

GET /_cat/indices?v

và phiên bản CURL sẽ là

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


3

Để liệt kê các chỉ mục bạn có thể làm: curl 'localhost: 9200 / _cat / indices? V' Elaticsearch Documentation


3

Truy cập Tìm kiếm đàn hồi an toàn mặc dù Curl (Cập nhật 2020)

Nếu Elastic Searchđược bảo mật, bạn có thể sử dụng lệnh này để liệt kê các chỉ số

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

2

_stats/indicescho kết quả với indices.

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

2

Mọi người ở đây đã trả lời làm thế nào để làm điều đó theo nghĩa cong và một số người có thể cần phải làm điều này trong java.

Nó đi từ đây

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


2

Đối với Elaticsearch 6.X, tôi thấy những điều sau đây hữu ích nhất. Mỗi cung cấp dữ liệu khác nhau trong phản ứng.

# 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

Bạn cũng có thể nhận được chỉ mục cụ thể bằng cách sử dụng

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

Để biết thêm thông tin

https://www.elastic.co/guide/en/elSTERearch/reference/civerse/indices-get-index.html


1

Đây là một cách khác để xem các chỉ số trong 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"}

1

Một trong những cách tốt nhất để liệt kê các chỉ mục + để hiển thị trạng thái của nó cùng với danh sách: chỉ bằng cách thực hiện bên dưới truy vấn.

Lưu ý: tốt nhất là sử dụng Sense để có đầu ra thích hợp.

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

Đầu ra mẫu như dưới đây. Ưu điểm chính là, về cơ bản nó hiển thị tên chỉ mục và các phân đoạn được lưu vào, kích thước chỉ mục và phân đoạn ip, v.v.

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

Tôi sử dụng _stats/indexesđiểm cuối để lấy một mẩu dữ liệu json và sau đó lọc với jq .

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

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

Nếu bạn không muốn báo giá, hãy thêm -rcờ vào jq.

Vâng, điểm cuối là indexesvà khóa dữ liệu indices, vì vậy họ cũng không thể quyết định được :)

Tôi cần điều này để dọn sạch các chỉ số rác được tạo bởi quét an ninh nội bộ (nessus).

Tái bút Tôi thực sự khuyên bạn nên làm quen với jq nếu bạn sẽ tương tác với ES từ dòng lệnh.


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

API Java

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

Bạn có thể cung cấp một số giải thích cho mã và làm cho câu trả lời dễ đọc hơn một chút ... Cách trả lời
AgataB

1

Nếu bạn đang làm việc trong scala, một cách để làm điều này và sử dụng Futurelà tạo một RequestExecutor, sau đó sử dụng IndicesStatsRequestBuilder và ứng dụng khách quản trị để gửi yêu cầu của bạ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
        }
    }
}

Trình thực thi được nâng lên từ bài đăng trên blog này, đây chắc chắn là một bài đọc tốt nếu bạn đang cố gắng truy vấn ES theo chương trình và không thông qua curl. Bạn có cái này bạn có thể tạo một danh sách tất cả các chỉ mục khá dễ dàng như vậy:

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

clientlà một phiên bản của Client có thể là nút hoặc máy khách vận chuyển, tùy theo nhu cầu của bạn. Bạn cũng cần phải có một ẩnExecutionContext phạm vi cho yêu cầu này. Nếu bạn cố gắng biên dịch mã này mà không có mã thì bạn sẽ nhận được cảnh báo từ trình biên dịch scala về cách lấy mã đó nếu bạn chưa nhập mã.

Tôi cần số lượng tài liệu, nhưng nếu bạn thực sự chỉ cần tên của các chỉ số, bạn có thể kéo chúng từ các phím của bản đồ thay vì từ IndexStats:

indicesStatsResponse.getIndices().keySet()

Câu hỏi này xuất hiện khi bạn đang tìm cách làm điều này ngay cả khi bạn đang cố gắng thực hiện việc này theo chương trình, vì vậy tôi hy vọng điều này sẽ giúp bất cứ ai muốn làm điều này trong scala / java. Mặt khác, người dùng curl chỉ có thể làm như câu trả lời hàng đầu nói và sử dụng

curl http://localhost:9200/_aliases

1

bạn có thể thử lệnh này

curl -X NHẬN http: // localhost: 9200 / _cat / chỉ số? v


1
Xin chào, chỉ là một ghi chú nhanh. Điều này đã được chỉ định trong các câu trả lời trên gần 3 lần. Vui lòng không đăng các câu trả lời lặp đi lặp lại đã được đưa ra trừ khi bạn có ý định chỉnh sửa và thêm một số thông tin chưa được đăng trước đó trong các câu trả lời trước đó. Tôi hy vọng tôi không làm bạn nản lòng nhưng điều này là để đảm bảo rằng tất cả các câu hỏi và câu trả lời sẽ không bị trùng lặp và lặp đi lặp lại.
Opster ES Ninja - Kamal

1

Tôi đã cài đặt Kibana và ES trên máy. Nhưng tôi không biết chi tiết (tại đường dẫn hoặc cổng nào) là nút ES trên máy đó.

Vậy làm thế nào bạn có thể làm điều đó từ Kibana (phiên bản 5.6)?

  • Chuyển đến Công cụ Dev
  • Xem phần Bảng điều khiển và chạy truy vấn sau:

GET _cat/indices

Tôi đã quan tâm đến việc tìm kích thước của một chỉ số ES cụ thể


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.