Listar todos os índices no servidor ElasticSearch?

251

Gostaria de listar todos os índices presentes em um servidor ElasticSearch. Eu tentei isso:

curl -XGET localhost:9200/

mas isso me dá o seguinte:

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

Eu quero uma lista de todos os índices ..

Eva
fonte

Respostas:

405

Para obter uma lista concisa de todos os índices em seu cluster, chame

curl http://localhost:9200/_aliases

isso fornecerá uma lista de índices e seus aliases.

Se você quiser uma impressão bonita, adicione pretty=true:

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

O resultado será mais ou menos assim, se seus índices forem chamados old_deuteronomye mungojerrie:

{
  "old_deuteronomy" : {
    "aliases" : { }
  },
  "mungojerrie" : {
    "aliases" : {
      "rumpleteazer" : { },
      "that_horrible_cat" : { }
    }
  }
}
karmi
fonte
5
A resposta do @paweloque agora parece ser a solução correta; parece mais limpo. curl http://localhost:9200/_stats/indexes\?pretty\=1
Notapatch 28/03
1
Meus 2 centavos para uma lista simples (não-json):curl -s localhost:9200/_aliases?pretty=true | awk -F\" '!/aliases/ && $2 != "" {print $2}'
Yaron
Para o Elasticsearch 6.5, clique no /statsterminal ou no terminal de integridade com param_cluster/health?level=indices
Justin W.
curl localhost: 9200 / _cat / indices? v funcionou para mim (no Elastic 6.2.4)
Matt L.
78

Experimentar

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

Ele fornecerá os seguintes resultados auto-explicativos de maneira tabular

health index    pri rep docs.count docs.deleted store.size pri.store.size
yellow customer   5   1          0            0       495b           495b
Abhijit Mazumder
fonte
Adicionar um tubo para classificar facilitou a visualização do que estava ficando verde. A alteração store.size também indica progresso adicional.
Kevpie # 28/15
você também pode selecionar e ordenar colunas adicionando, por exemplo, & h = saúde, índice e classificação com & s = saúde: desc
Georg Engel
33

Você pode consultar localhost:9200/_statuse isso fornecerá uma lista de índices e informações sobre cada um. A resposta será mais ou menos assim:

{
  "ok" : true,
  "_shards" : { ... },
  "indices" : {
    "my_index" : { ... },
    "another_index" : { ... }
  }
}
Matthew Boynes
fonte
3
Se você quer apenas saber a lista de nomes de índice, essa abordagem é muito mais lenta. Melhor utilização -GET /_stats/indexes
asyncwait
4
@asyncwait Eu recomendo, /_stats/indicespois é o plural correto e também a chave usada dentro /_statuse dentro /_stats.
Nicholas Shanks
2
Não parece mais um URL válido na versão 5.6.
The Unknown Dev
1
Endpoint API mudou para _nodes/statse _nodes/status@KimberlyW
maxymoo
Descontinuado no 1.2.0.
jarmod
26

O comando _stats fornece maneiras de personalizar os resultados especificando as métricas desejadas. Para obter os índices, a consulta é a seguinte:

GET /_stats/indices

O formato geral da _statsconsulta é:

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

Onde estão as métricas:

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

Como exercício, escrevi um pequeno plug-in elasticsearch que fornece a funcionalidade de listar índices de elasticsearch sem nenhuma outra informação. Você pode encontrá-lo no seguinte URL:

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

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

paweloque
fonte
2
Não funciona:"type": "illegal_argument_exception", "reason": "request [/_stats/indices] contains unrecognized metric: [indices]"
Ivan Yurchenko
@IvanYurchenko Eu implementei meu plugin elasticsearch há muito tempo. É muito possível que as APIs tenham mudado desde então e não funcione mais. O melhor é usar o comando '_aliases'. Ele também fornecerá informações sobre todos os índices na pesquisa elástica.
paweloque
18

Eu uso isso para obter todos os índices:

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

Com esta lista, você pode trabalhar em ...

Exemplo

$ 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

Para obter a 3ª coluna acima (nomes dos índices):

$ 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

NOTA: Você também pode usar em awk '{print $3}'vez de cut -d\ -f3.

Cabeçalhos de coluna

Você também pode sufocar a consulta com a ?vpara adicionar um cabeçalho de coluna. Fazer isso quebrará o cut...método, então eu recomendo usar a awk..seleção neste momento.

$ 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
fonte
1
curl -s 'http://localhost:9200/_cat/indices?h=index'imprimirá apenas o nome do índice. Não há necessidade de usar truques de shell para filtrar a coluna.
Hgf
não apenas você pode usar o awk, você deve usar o awk (ou então usartr -s ' ' antes cutpara condensar execuções de espaços) ou também não obterá o nome do índice se o status for redporque será preenchido com espaços e cuttratará cada espaço individualmente como delimitador um novo campo, mesmo se esse "campo" acaba vazio
kbolino
11

Eu também recomendaria o / _cat / indices, que fornece uma boa lista legível por humanos dos seus índices.

Matt Watson
fonte
8

A maneira mais simples de obter uma lista apenas de índices é usar a resposta acima, com o parâmetro 'h = index':

curl -XGET "localhost:9200/_cat/indices?h=index"
J. Lewis
fonte
7

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

Isso será exibido como abaixo

{
  "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
fonte
Todos os outros pontos de extremidade não funcionaram para mim. Sua resposta funcionou! THX. Veja stackoverflow.com/questions/49204526/…
arun
Eu também, isso é uma coisa da versão mais recente. As principais respostas parecem trabalho em 2.x, mas não 6.x
Andrew Jon Dodds
5

Vou lhe dar a consulta que você pode executar no kibana.

GET /_cat/indices?v

e a versão CURL será

CURL -XGET http://localhost:9200/_cat/indices?v
Pinkesh Sharma
fonte
5
You may use this command line.

curl -X GET "host local: 9200 / _cat / índices? v"

Para mais (site oficial da Elasticsearch)

Yagnesh bhalala
fonte
3

Para listar os índices que você pode fazer: curl 'localhost: 9200 / _cat / indices? V' Elasticsearch Documentation

kartikcr
fonte
3

Acessando a pesquisa elástica protegida por curl (atualização 2020)

Se o Elastic Searchestiver protegido, você pode usar este comando para listar índices

curl http://username:password@localhost:9200/_aliases?pretty=true
cheira cereja
fonte
2

_stats/indicesdá o resultado com indices.

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

As pessoas aqui responderam como fazê-lo em curl e sentido, algumas pessoas podem precisar fazer isso em java.

Aqui vai

client.admin().indices().stats(new IndicesStatsRequest()).actionGet().getIndices().keySet()
Avinash Kumar Pandey
fonte
2

Para o Elasticsearch 6.X, achei o seguinte o mais útil. Cada um fornece dados diferentes na resposta.

# 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.
fonte
2

Você também pode obter um índice específico usando

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

Para mais informações

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

Yagnesh bhalala
fonte
1

aqui está outra maneira apenas de ver os índices no banco de dados:

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
fonte
1

Uma das melhores maneiras de listar índices + para exibir seu status junto com list: é simplesmente executando a consulta abaixo.

Nota: use de preferência o Sense para obter a saída adequada.

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

A saída da amostra é como abaixo. A principal vantagem é que, basicamente, mostra o nome do índice e os shards em que ele foi salvo, o tamanho do índice e o IP dos shards, 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                                                 
...
...
...
Ritesh Aryal
fonte
1

Eu uso o _stats/indexesponto de extremidade para obter um blob json de dados e depois filtrar com jq .

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

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

Se você não quiser aspas, adicione um -rsinalizador ao jq.

Sim, o ponto final é indexese a chave de dados é indices, então eles também não se decidiram :)

Eu precisava disso para limpar esses índices de lixo criados por uma verificação de segurança interna (nessus).

PS. Eu recomendo que você se familiarize com o jq se quiser interagir com o ES na linha de comando.

spazm
fonte
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 + "]");
}
StanislavKo
fonte
Você pode fornecer algumas explicações para o código e tornar a resposta um pouco mais legível ... Como responder
AgataB
1

Se você estiver trabalhando no scala, uma maneira de fazer isso e usar Futureé criar um RequestExecutor, use o IndicesStatsRequestBuilder e o cliente administrativo para enviar sua solicitação.

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

O executor é retirado desta postagem do blog, que é definitivamente uma boa leitura, se você estiver tentando consultar o ES de forma programática e não através de curl. Se você tiver isso, poderá criar uma lista de todos os índices facilmente, assim:

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é uma instância do cliente que pode ser um nó ou um cliente de transporte, conforme a sua necessidade. Você também precisará ter um ExecutionContextescopo implícito para esta solicitação. Se você tentar compilar esse código sem ele, receberá um aviso do compilador scala sobre como obtê-lo se ainda não tiver um importado.

Eu precisava da contagem de documentos, mas se você realmente precisar apenas dos nomes dos índices, poderá extraí-los das chaves do mapa em vez de IndexStats:

indicesStatsResponse.getIndices().keySet()

Essa pergunta aparece quando você está pesquisando como fazer isso, mesmo que esteja tentando fazer isso programaticamente, por isso espero que ajude quem quiser fazer isso no scala / java. Caso contrário, os usuários de curl podem fazer o que a resposta principal diz e usar

curl http://localhost:9200/_aliases
EdgeCaseBerg
fonte
1

você pode tentar este comando

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

dat nguyen
fonte
1
Olá, apenas uma nota rápida. Isso foi especificado nas respostas acima quase 3 vezes. Não poste respostas repetitivas que já foram fornecidas, a menos que você pretenda editar isso e adicione mais algumas informações que não foram postadas anteriormente nas respostas anteriores. Espero não estar desencorajando você, mas isso é para garantir que todas as perguntas e respostas não sejam duplicadas e repetitivas.
Opster ES Ninja - Kamal
1

Eu tinha o Kibana e o ES instalados em uma máquina. Mas eu não sabia os detalhes (em que caminho ou porta) era o nó ES nessa máquina.

Então, como você pode fazer isso no Kibana (versão 5.6)?

  • Vá para Dev Tools
  • Consulte a seção Console e execute a seguinte consulta:

GET _cat/indices

Eu estava interessado em encontrar o tamanho de um índice ES específico

razvang
fonte
0

Se você tiver o curl instalado em seu sistema, tente este comando simples: curl -XGET xx.xx.xx.xx: 9200 / _cat / indices? V

O comando acima mencionado fornece o resultado neste formato: result para buscar todos os índices

Ranjan Singh
fonte