Список усіх індексів на сервері 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}'
Ярон,

Для Elasticsearch 6.5 або потрапив у /statsкінцеву точку, або в кінцеву точку здоров’я з парам_cluster/health?level=indices
Джастін В.

curl localhost: 9200 / _cat / індекси? v працював на мене (на Еластичний 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 = здоров’я: desc
Георг Енгель

33

Ви можете запитувати, localhost:9200/_statusі це дасть вам список індексів та інформацію про кожен. Відповідь буде виглядати приблизно так:

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

3
Якщо ви просто хочете дізнатися список імен індексу, то такий підхід занадто великий і повільний. Краще використовувати -GET /_stats/indexes
asyncwait

4
@asyncwait Я рекомендую, /_stats/indicesоскільки це правильна множина, а також ключ, що використовується в /_statusі в /_stats.
Ніколас Шенкс

2
Здається, це версія не більше, ніж версія 5.6.
Невідомий 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

В якості прикладу до себе, я написав невеликий плагін для гумових досліджень, що забезпечує функціональність для перерахування індексів еластичного пошуку без будь-якої іншої інформації. Ви можете знайти його за наступною 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]"
Іван Юрченко

@IvanYurchenko Я вже давно реалізував свій плагін для гумових досліджень. Дуже можливо, що API змінилися з тих пір, і він більше не працює .. Найкраще використовувати команду '_aliases'. Він також надасть інформацію про всі показники в еластичному дослідженні.
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.

Заголовки стовпців

Ви також можете суфіксувати запит а, ?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кожен окремий простір вважає обмежуючим нове поле, навіть якщо це "поле" закінчиться порожнім
kbolino

11

Я також рекомендую робити / _cat / індекси, що дає чудовий людський список ваших індексів.


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/…
arun

Мені теж це річ з новою версією. Основні відповіді, здається, працюють на 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' Документація про еластичний пошук


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

ось ще один спосіб просто побачити індекси в 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

Один з найкращих способів перерахування індексів + відображення його стану разом зі списком: це просто виконати нижче запит.

Примітка: бажано використовувати 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>

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's - це створити RequestExecutor, тоді використовуйте IndeicesStatsRequestBuilder та адміністративний клієнт, щоб подати ваш запит.

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

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 / індекси? v


1
Привіт, лише швидка записка. Це було зазначено у вищезазначених відповідях близько 3 разів. Будь ласка, не публікуйте повторювані відповіді, які вже були надані, якщо ви не збираєтесь редагувати це, та додайте більше інформації, яка не була розміщена раніше у попередніх відповідях. Я сподіваюся, що я не відволікаю вас, але це для того, щоб усі запитання та відповіді не повторювалися та повторювалися.
Opster ES Ninja - Камаль

1

У мене були встановлені Kibana та ES на машині. Але я не знав деталей (на якому шляху чи порту) знаходився вузол ES на цій машині.

То як же це зробити з Кібани (версія 5.6)?

  • Перейдіть до Dev Tools
  • Дивіться розділ Консолі та виконайте наступний запит:

GET _cat/indices

Мені було цікаво знайти розмір певного індексу ES


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.