回答:
クラスター内のすべてのインデックスの簡潔なリストについては、
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" : { }
}
}
}
curl -s localhost:9200/_aliases?pretty=true | awk -F\" '!/aliases/ && $2 != "" {print $2}'
/stats
エンドポイント、またはPARAMと健康エンドポイント_cluster/health?level=indices
試す
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" : { ... }
}
}
GET /_stats/indexes
/_stats/indices
は正しい複数形であり、/_status
とで使用されるキーでもあるのでお勧めし/_stats
ます。
_nodes/stats
と_nodes/status
@KimberlyW
_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/
"type": "illegal_argument_exception", "reason": "request [/_stats/indices] contains unrecognized metric: [indices]"
これを使用してすべてのインデックスを取得します。
$ 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
。
クエリの末尾にa ?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
curl -s 'http://localhost:9200/_cat/indices?h=index'
インデックス名だけを出力します。カラムをフィルタリングするためにシェルトリックを使用する必要はありません。
tr -s ' '
前cut
にスペースの実行を圧縮するために使用します)。そうでない場合、ステータスがred
スペースで埋め込まれ、cut
個々のスペースを区切り文字として扱うため、インデックス名が取得されません。その「フィールド」が空になっても新しいフィールド
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
}}
ここの人々はカールと感覚でそれを行う方法に答えました、何人かの人々はJavaでこれをする必要があるかもしれません。
いきます
client.admin().indices().stats(new IndicesStatsRequest()).actionGet().getIndices().keySet()
この猫のAPIを試してください:健康やその他の詳細を含むすべてのインデックスのリストが表示されます。
CURL -XGET http:// localhost:9200 / _cat / indices
特定のインデックスを使用して取得することもできます
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
インデックスを一覧表示する+ステータスをlistと一緒に表示する最良の方法の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
...
...
...
_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。コマンドラインから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 + "]");
}
Future
Scalaで作業している場合、これを実行してを使用する方法は、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
インスタンスであるクライアントのニーズに合った方のノードまたはトランスポートクライアントとすることができます。また、暗黙的である必要がありますExecutionContext
、このリクエストにスコープです。このコードをそれなしでコンパイルしようとすると、まだインポートされていない場合、それを取得する方法についてscalaコンパイラーから警告が表示されます。
ドキュメント数が必要でしたが、インデックスの名前だけが本当に必要な場合は、からではなく、マップのキーからそれらを取得できますIndexStats
。
indicesStatsResponse.getIndices().keySet()
この質問は、プログラムでこれを実行しようとしている場合でも、これを実行する方法を探しているときに表示されるので、これがscala / javaでこれを実行しようとしている人を助けることを願っています。それ以外の場合、カールのユーザーは、トップの回答が言うようにして使用できます
curl http://localhost:9200/_aliases
あなたはこのコマンドを試すことができます
curl -X GET http:// localhost:9200 / _cat / indices?v
システムにcurlがインストールされている場合は、次の簡単なコマンドを試してください: curl -XGET xx.xx.xx.xx:9200 / _cat / indices?v
上記のコマンドは、次の形式で結果を提供します: すべてのインデックスをフェッチする結果
curl http://localhost:9200/_stats/indexes\?pretty\=1