IT story

ElasticSearch 서버의 모든 인덱스를 나열 하시겠습니까?

hot-time 2020. 4. 29. 08:10
반응형

ElasticSearch 서버의 모든 인덱스를 나열 하시겠습니까?


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

모든 인덱스 목록을 원합니다 ..


클러스터에있는 모든 지수의 간결한 목록을 보려면

curl http://localhost:9200/_aliases

인덱스와 별칭 목록이 나타납니다.

예쁘게 인쇄하려면 다음을 추가하십시오 pretty=true.

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

인덱스가 호출되면 결과는 다음 old_deuteronomymungojerrie같습니다.

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

시험

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

당신은 쿼리 할 수 ​​있으며 localhost:9200/_status, 각각에 대한 색인 및 정보 목록을 제공합니다. 응답은 다음과 같습니다.

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

_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 플러그인을 작성했습니다. 다음 URL에서 찾을 수 있습니다.

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

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


나는 이것을 사용하여 모든 지수를 얻는다.

$ 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

위의 세 번째 열을 가져 오려면 (지수 이름) :

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

열 헤더

?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

또한 사람이 읽을 수있는 인덱스 목록을 제공하는 / _cat / indices를 수행하는 것이 좋습니다.


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

kibana에서 실행할 수있는 쿼리를 제공합니다.

GET /_cat/indices?v

CURL 버전은

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

인덱스 만 목록을 얻는 가장 간단한 방법은 위의 답변을 'h = index'매개 변수와 함께 사용하는 것입니다.

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

_stats/indices로 결과를 제공합니다 indices.

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

여기 사람들은 말과 의미로 그것을하는 방법에 대답했습니다. 일부 사람들은 이것을 자바로해야 할 수도 있습니다.

여기 간다

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

이 cat API를 사용해보십시오 : 건강 및 기타 세부 정보가있는 모든 색인 목록을 제공합니다.

컬 -XGET http : // localhost : 9200 / _cat / indices


_stats/indexes끝점을 사용하여 json blob 데이터를 얻은 다음 jq 로 필터링 합니다.

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

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

따옴표를 원하지 않으면 -rjq에 플래그를 추가하십시오 .

예, 끝 점이 indexes있고 데이터 키가 indices이므로 마음을 구성 할 수 없었습니다. :)

내부 보안 검색 (nessus)으로 생성 된 가비지 인덱스를 정리하려면이 기능이 필요했습니다.

추신. 커맨드 라인에서 ES와 상호 작용하려면 jq에 익숙해지는 것이 좋습니다 .


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

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

Kibana와 ES를 컴퓨터에 설치했습니다. 그러나 해당 시스템의 ES 노드 세부 사항 (어떤 경로 또는 포트)을 알지 못했습니다.

Kibana (버전 5.6)에서 어떻게 할 수 있습니까?

  • 개발 도구로 이동
  • 콘솔 섹션을 참조 하고 다음 쿼리를 실행하십시오.

GET _cat/indices

특정 ES 인덱스의 크기를 찾는 데 관심이있었습니다


You may use this command line.

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

(Elasticsearch 공식 사이트)


here's another way just to see the indices in the 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"}

One of the best way to list indices + to display its status together with list : is by simply executing below query.

Note: preferably use Sense to get the proper output.

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

The sample output is as below. The main advantage is, it basically shows index name and the shards it saved into, index size and shards ip etc

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

If you're working in scala, a way to do this and use Future's is to create a RequestExecutor, then use the IndicesStatsRequestBuilder and the administrative client to submit your request.

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

The executor is lifted from this blog post which is definitely a good read if you're trying to query ES programmatically and not through curl. One you have this you can create a list of all indexes pretty easily like so:

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 is an instance of Client which can be a node or a transport client, whichever suits your needs. You'll also need to have an implicit ExecutionContext in scope for this request. If you try to compile this code without it then you'll get a warning from the scala compiler on how to get that if you don't have one imported already.

I needed the document count, but if you really only need the names of the indices you can pull them from the keys of the map instead of from the IndexStats:

indicesStatsResponse.getIndices().keySet()

This question shows up when you're searching for how to do this even if you're trying to do this programmatically, so I hope this helps anyone looking to do this in scala/java. Otherwise, curl users can just do as the top answer says and use

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]

you can try this command

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


For Elasticsearch 6.X, I found the following the most helpful. Each provide different data in the response.

# 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

To list the indices you can do : curl 'localhost:9200/_cat/indices?v' Elasticsearch Documentation

참고URL : https://stackoverflow.com/questions/17426521/list-all-indexes-on-elasticsearch-server

반응형