перечислите все индексы на сервере 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"
}
мне нужен список всех индексов..
16 ответов:
для получения краткого списка всех индексов в кластере, позвоните
curl http://localhost:9200/_aliasesэто даст вам список индексов и их псевдонимы.
если вы хотите, чтобы он красиво напечатан, добавьте
pretty=1:curl http://localhost:9200/_aliases?pretty=1результат будет выглядеть примерно так, если ваши показатели называются
old_deuteronomyиmungojerrie:{ "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, предоставляющий функциональность для перечисления индексов elasticsearch без какой-либо другой информации. Вы можете найти его по следующей url:
http://blog.iterativ.ch/2014/04/11/listindices-writing-your-first-elasticsearch-java-plugin/
Я использую это, чтобы получить все индексы:
$ 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 }'вместо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 / indexes, который дает хороший читаемый список ваших индексов.
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
_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" : { } } } }
люди здесь ответили, как это сделать в curl и смысле, некоторые люди, возможно, потребуется сделать это в java.
вот он
client.admin().indices().stats(new IndicesStatsRequest()).actionGet().getIndices().keySet()
попробуйте этот API cat: он даст вам список всех индексов со здоровьем и другими деталями.
CURL-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" ...если вы не хотите цитат, добавьте
-rфлаг в jq.да, конечная точка
indexesи ключ данныхindices, так что они тоже не могли решить:)мне нужно было это, чтобы очистить эти индексы мусора, созданные с помощью внутреннего сканирования безопасности (nessus).
PS. Я настоятельно рекомендую ознакомиться с jq если вы собираетесь взаимодействовать с ES из командной строки.
<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 + "]"); }
вот еще один способ просто увидеть индексы в БД:
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"}
один из лучших способов перечислить индексы + для отображения его статуса вместе со списком : это просто выполнить запрос ниже.
Примечание: предпочтительно использовать смысл, чтобы получить правильный выход.
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 ... ... ...
если вы работаете в scala, способ сделать это и использовать
Future' s-это создать 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
Comments