перечислите все индексы на сервере 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"
}


мне нужен список всех индексов..

956   16  

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/

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

Я использую это, чтобы получить все индексы:

$ 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

    Ничего не найдено.