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"
}
すべてのインデックスのリストが欲しいのですが。
クラスタ内のすべてのインデックスの簡潔なリストについては、
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 $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
また、人間が読める形式のインデックスの一覧を/ _cat/indicesにすることをお勧めします。
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
インデックスのみのリストを取得する最も簡単な方法は、 'h = index'パラメータを指定して上記の回答を使用することです。
curl -XGET "localhost:9200/_cat/indices?h=index"
_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" : { }
}
}
}
この猫のAPIを試してみてください:それはあなたに健康と他の詳細ですべてのインデックスのリストを与えるでしょう。
CURL -XGET http:// localhost:9200/_cat/index
ここにいる人々はどのようにしてカールと意味でそれをするべきか答えました、中にはJavaでこれをする必要がある人もいます。
ここに行く
client.admin().indices().stats(new IndicesStatsRequest()).actionGet().getIndices().keySet()
_stats/indexes
エンドポイントを使用してデータのJSON BLOBを取得してから、 jq でフィルタ処理します。
curl 'localhost:9200/_stats/indexes' | jq '.indices | keys | .[]'
"admin"
"blazeds"
"cgi-bin"
"contacts_v1"
"flex2gateway"
"formmail"
"formmail.pl"
"gw"
...
引用符が不要な場合は、jqに-r
フラグを追加してください。
はい、エンドポイントはindexes
、データキーはindices
なので、彼らは頭を悩ますこともできませんでした:)
内部セキュリティスキャン(nessus)によって作成されたこれらのゴミインデックスを整理するためにこれが必要でした。
PS。コマンドラインからESと対話する場合は、 jq に慣れることを強くお勧めします。
<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 -X GET http:// localhost:9200/_cat/index?v
KibanaとESをマシンにインストールしました。しかし、そのマシン上のESノードが(どのパス、またはポートにあるのか)詳細を知りませんでした。
では、どうすればKibana(バージョン5.6)からそれを行うことができますか?
GET _cat/indices
特定のESインデックスのサイズを見つけることに興味がありました
実行できるインデックスを一覧表示するには、次のようにします。curl 'localhost:9200/_cat/indices?v' Elasticsearch Documentation
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
これは、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
...
...
...
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
}
}
}
Executorはこのブログ記事 から持ち上げられています 。これは、curlを介してではなく、プログラムで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 のインスタンスです。これは、ノードまたはトランスポートクライアントのいずれか、必要に応じてどちらでも構いません。このリクエストのスコープには暗黙のExecutionContext
も必要です。それなしでこのコードをコンパイルしようとすると、まだインポートされていない場合にその取得方法についてscalaコンパイラから警告を受け取ることになります。
私は文書の数を必要としました、しかしあなたが本当にインデックスの名前だけを必要とするならば、あなたはIndexStats
からの代わりにマップのキーからそれらを引くことができます:
indicesStatsResponse.getIndices().keySet()
プログラムでこれをやろうとしているにもかかわらず、これを行う方法を探しているときにこの質問が現れるので、私はこれがscala/Javaでこれをやろうとしている人に役立つことを願っています。そうでなければ、curlユーザーはトップの答えが言うようにして使うことができます。
curl http://localhost:9200/_aliases
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]