Показать все индексы на сервере ElasticSearch?


252

Я хотел бы перечислить все индексы, присутствующие на сервере 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}'
Ярон

Для Elasticsearch 6.5 либо /stats_cluster/health?level=indices
Джастин В.

curl localhost: 9200 / _cat / indices? v работал для меня (на Elastic 6.2.4)
Мэтт Л.

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

Добавление трубы для сортировки позволило легко увидеть, что происходит зеленым. Также изменение store.size указывает на дополнительный прогресс.
Kevpie

Вы также можете выбрать и упорядочить столбцы, добавив, например, & h = здоровье, индекс, а также отсортировать с помощью & s = health: desc
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.
Николас Шенкс

2
Кажется, больше не является действительным URL в версии 5.6.
Неизвестный Дев

1
API конечная точка изменилась к _nodes/statsи _nodes/status@KimberlyW
maxymoo

Устаревший в 1.2.0.
Джармод

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

В качестве упражнения для себя я написал небольшой плагин эластичного поиска, предоставляющий функциональность для перечисления индексов эластичного поиска без какой-либо другой информации. Вы можете найти его по следующему адресу:

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]"
Иван Юрченко

@IvanYurchenko Я давно внедрил свой плагин эластичного поиска. Вполне возможно, что API изменились с тех пор, и он больше не работает. Лучше всего использовать команду _aliases. Он также предоставит информацию обо всех показателях вasticsearch.
Павелок

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.

Заголовки столбцов

Вы также можете ?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'распечатает только имя индекса. Не нужно использовать хитрости оболочки для фильтрации столбца.
августа

вы не только можете использовать awk, вы должны использовать awk (или использовать tr -s ' 'ранее, cutчтобы сжать пробелы), иначе вы не получите имя индекса, если статус таков, redчто он будет заполнен пробелами и будет cutрассматривать каждый отдельный пробел как разделитель. новое поле, даже если это «поле»
окажется

11

Я бы также порекомендовал сделать / _cat / indices, который дает хороший читабельный список ваших индексов.


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
Эндрю Джон Доддс

5

Я дам вам запрос, который вы можете запустить на кибане.

GET /_cat/indices?v

и версия CURL будет

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


3

Чтобы вывести список индексов, вы можете сделать: curl 'localhost: 9200 / _cat / indices? V' Документация Elasticsearch


3

Доступ к защищенному эластичному поиску через Curl (обновление 2020 г.)

Если Elastic Searchон защищен, вы можете использовать эту команду для вывода списка

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

2

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

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'

Пример вывода, как показано ниже. Основным преимуществом является то, что он в основном показывает имя индекса и сегменты, в которых он сохранен, размер индекса и 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>

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

Вы могли бы дать некоторое объяснение коду и сделать ответ немного более читабельным ... Как ответить
AgataB

1

Если вы работаете в Scala, способ сделать это и использовать 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 область действия для этого запроса. Если вы попытаетесь скомпилировать этот код без него, вы получите предупреждение от компилятора scala о том, как его получить, если у вас его еще нет.

Мне нужно было количество документов, но если вам действительно нужны только имена индексов, вы можете извлечь их из ключей карты, а не из 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 - Камаль

1

У меня были Kibana и ES, установленные на машине. Но я не знал деталей (по какому пути или порту) был узел ES на этой машине.

Итак, как вы можете сделать это из Kibana (версия 5.6)?

  • Перейти к Dev Tools
  • См. Раздел « Консоль » и выполните следующий запрос:

GET _cat/indices

Я был заинтересован в поиске размера конкретного индекса ES


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.