Список всех индексов на сервере 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"
}
Мне нужен список всех индексов.
Ответы
Ответ 1
Чтобы получить краткий список всех индексов в вашем кластере, позвоните
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" : { }
}
}
}
Ответ 2
Попробуйте
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
Ответ 3
Вы можете запросить localhost:9200/_status
, и это даст вам список индексов и информации о каждом из них. Ответ будет выглядеть примерно так:
{
"ok" : true,
"_shards" : { ... },
"indices" : {
"my_index" : { ... },
"another_index" : { ... }
}
}
Ответ 4
Команда _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, предоставляющий функциональность для перечисления индексов elasticsearch без какой-либо другой информации. Вы можете найти его по следующему URL:
http://blog.iterativ.ch/2014/04/11/listindices-writing-your-first-elasticsearch-java-plugin/
https://github.com/iterativ/elasticsearch-listindices
Ответ 5
Я использую это, чтобы получить все индексы:
$ 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
Ответ 6
Я также рекомендовал бы делать /_cat/indices, который дает хороший читаемый пользователем список ваших индексов.
Ответ 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
}}
Ответ 8
Я дам вам запрос, который вы можете запустить на кибане.
GET /_cat/indices?v
и версия CURL будет
CURL -XGET http://localhost:9200/_cat/indices?v
Ответ 9
Самый простой способ получить список только индексов - использовать вышеприведенный ответ с параметром "h = index":
curl -XGET "localhost:9200/_cat/indices?h=index"
Ответ 10
_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" : { }
}
}
}
Ответ 11
Люди здесь ответили, как это сделать в завитке и смысле, некоторым людям, возможно, потребуется сделать это в java.
Здесь он идет
client.admin().indices().stats(new IndicesStatsRequest()).actionGet().getIndices().keySet()
Ответ 12
Попробуйте этот API кошки: он предоставит вам список всех индексов со здоровьем и другими деталями.
CURL -XGET http://localhost:9200/_cat/indices
Ответ 13
Я использую конечную точку _stats/indexes
, чтобы получить json blob данных, а затем фильтр 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 из командной строки.
Ответ 14
<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 + "]");
}
Ответ 15
У меня были Kibana и ES, установленные на машине. Но я не знал деталей (на каком пути или в порту) был узел ES на этой машине.
Итак, как вы можете это сделать из Кибаны (версия 5.6)?
- Перейдите в Dev Tools
- См. Раздел Консоль и выполните следующий запрос:
GET _cat/indices
Мне было интересно узнать размер конкретного индекса ES
Ответ 16
You may use this command line.
curl -X GET "localhost: 9200/_cat/index? v"
Для получения дополнительной информации (официальный сайт Elasticsearch)
Ответ 17
здесь другой способ просто увидеть индексы в 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"}
Ответ 18
Один из лучших способов отображения индексов + для отображения его статуса вместе со списком: просто выполнив ниже запрос.
Примечание: желательно использовать 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
...
...
...
Ответ 19
Если вы работаете в 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 программно, а не через завиток, У вас есть это, вы можете легко создать список всех индексов:
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
является экземпляром Client, который может быть node или транспортным клиентом, в зависимости от ваших потребностей. Для этого запроса вам также понадобится неявный ExecutionContext
. Если вы попытаетесь скомпилировать этот код без него, вы получите предупреждение от компилятора scala о том, как его получить, если у вас еще нет импортированного.
Мне понадобилось количество документов, но если вам действительно нужны имена индексов, вы можете вытащить их из ключей карты, а не из IndexStats
:
indicesStatsResponse.getIndices().keySet()
Этот вопрос появляется, когда вы ищете, как это сделать, даже если вы пытаетесь сделать это программно, поэтому я надеюсь, что это поможет любому, кто хочет это сделать, в scala/java. В противном случае, завитые пользователи могут просто делать, как говорит верхний ответ, и использовать
curl http://localhost:9200/_aliases
Ответ 20
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]
Ответ 21
вы можете попробовать эту команду
curl -X GET http://localhost: 9200/_cat/index? v
Ответ 22
Для 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
Ответ 23
Чтобы получить список индексов, вы можете сделать: curl 'localhost: 9200/_cat/indices? V' Документация Elasticsearch