タスク管理API
タスク管理APIは新しいものであり、まだベータ機能と見なされるべきです。このAPIは、後方互換性のない方法で変更される可能性があります。機能のステータスについては、#51628を参照してください。
クラスター内で現在実行中のタスクに関する情報を返します。
リクエスト
GET /_tasks/<task_id>
GET /_tasks
前提条件
- Elasticsearchのセキュリティ機能が有効になっている場合、このAPIを使用するには、
monitor
またはmanage
クラスター権限を持っている必要があります。
説明
タスク管理APIは、クラスター内の1つまたは複数のノードで現在実行中のタスクに関する情報を返します。
パスパラメータ
<task_id>
- (オプション、文字列) 返すタスクのID (
node_id:task_number
)。
クエリパラメータ
actions
- (オプション、文字列) リクエストを制限するために使用されるアクションのカンマ区切りリストまたはワイルドカード式。
このパラメータを省略すると、すべてのアクションが返されます。 detailed
- (オプション、Boolean)
true
の場合、応答にはシャードの回復に関する詳細情報が含まれます。デフォルトはfalse
です。 group_by
- (オプション、文字列) 応答内でタスクをグループ化するために使用されるキー。
可能な値は:nodes
- (デフォルト) ノードID
parents
- 親タスクID
none
- タスクをグループ化しない。
nodes
- (オプション、文字列) 返される情報を制限するために使用されるノードIDまたは名前のカンマ区切りリスト。
parent_task_id
- (オプション、文字列) 返される情報を制限するために使用される親タスクID。
すべてのタスクを返すには、このパラメータを省略するか、-1
の値を使用します。 timeout
- (オプション、時間単位) 各ノードが応答するまでの待機期間。ノードがタイムアウトが切れる前に応答しない場合、応答にはその情報が含まれません。ただし、タイムアウトしたノードは応答の
node_failures
プロパティに含まれます。デフォルトは30s
です。 wait_for_completion
- (オプション、Boolean)
true
の場合、リクエストは見つかったすべてのタスクが完了するまでブロックされます。デフォルトはfalse
です。
応答コード
404
(リソースが見つかりません)<task_id>
が指定されているが見つからない場合、このコードはリクエストに一致するリソースがないことを示します。
例
Python
resp = client.tasks.list()
print(resp)
resp1 = client.tasks.list(
nodes="nodeId1,nodeId2",
)
print(resp1)
resp2 = client.tasks.list(
nodes="nodeId1,nodeId2",
actions="cluster:*",
)
print(resp2)
Ruby
response = client.tasks.list
puts response
response = client.tasks.list(
nodes: 'nodeId1,nodeId2'
)
puts response
response = client.tasks.list(
nodes: 'nodeId1,nodeId2',
actions: 'cluster:*'
)
puts response
Js
const response = await client.tasks.list();
console.log(response);
const response1 = await client.tasks.list({
nodes: "nodeId1,nodeId2",
});
console.log(response1);
const response2 = await client.tasks.list({
nodes: "nodeId1,nodeId2",
actions: "cluster:*",
});
console.log(response2);
コンソール
GET _tasks
GET _tasks?nodes=nodeId1,nodeId2
GET _tasks?nodes=nodeId1,nodeId2&actions=cluster:*
クラスター内のすべてのノードで現在実行中のすべてのタスクを取得します。 | |
ノードnodeId1 およびnodeId2 で実行中のすべてのタスクを取得します。ノード仕様を参照して、個々のノードを選択する方法についての詳細を確認してください。 |
|
ノードnodeId1 およびnodeId2 で実行中のすべてのクラスター関連タスクを取得します。 |
コンソール-結果
{
"nodes" : {
"oTUltX4IQMOUUVeiohTt8A" : {
"name" : "H5dfFeA",
"transport_address" : "127.0.0.1:9300",
"host" : "127.0.0.1",
"ip" : "127.0.0.1:9300",
"tasks" : {
"oTUltX4IQMOUUVeiohTt8A:124" : {
"node" : "oTUltX4IQMOUUVeiohTt8A",
"id" : 124,
"type" : "direct",
"action" : "cluster:monitor/tasks/lists[n]",
"start_time_in_millis" : 1458585884904,
"running_time_in_nanos" : 47402,
"cancellable" : false,
"parent_task_id" : "oTUltX4IQMOUUVeiohTt8A:123"
},
"oTUltX4IQMOUUVeiohTt8A:123" : {
"node" : "oTUltX4IQMOUUVeiohTt8A",
"id" : 123,
"type" : "transport",
"action" : "cluster:monitor/tasks/lists",
"start_time_in_millis" : 1458585884904,
"running_time_in_nanos" : 236042,
"cancellable" : false
}
}
}
}
}
特定のタスクから情報を取得する
特定のタスクから情報を取得することも可能です。次の例は、タスクoTUltX4IQMOUUVeiohTt8A:124
に関する情報を取得します:
Python
resp = client.tasks.get(
task_id="oTUltX4IQMOUUVeiohTt8A:124",
)
print(resp)
Ruby
response = client.tasks.get(
task_id: 'oTUltX4IQMOUUVeiohTt8A:124'
)
puts response
Js
const response = await client.tasks.get({
task_id: "oTUltX4IQMOUUVeiohTt8A:124",
});
console.log(response);
コンソール
GET _tasks/oTUltX4IQMOUUVeiohTt8A:124
タスクが見つからない場合、APIは404を返します。
特定のタスクのすべての子を取得するには:
Python
resp = client.tasks.list(
parent_task_id="oTUltX4IQMOUUVeiohTt8A:123",
)
print(resp)
Ruby
response = client.tasks.list(
parent_task_id: 'oTUltX4IQMOUUVeiohTt8A:123'
)
puts response
Js
const response = await client.tasks.list({
parent_task_id: "oTUltX4IQMOUUVeiohTt8A:123",
});
console.log(response);
コンソール
GET _tasks?parent_task_id=oTUltX4IQMOUUVeiohTt8A:123
親が見つからない場合、APIは404を返しません。
タスクに関する詳細情報を取得する
#### Python
``````python
resp = client.tasks.list(
actions="*search",
detailed=True,
)
print(resp)
`
Ruby
response = client.tasks.list(
actions: '*search',
detailed: true
)
puts response
Js
const response = await client.tasks.list({
actions: "*search",
detailed: "true",
});
console.log(response);
コンソール
GET _tasks?actions=*search&detailed
コンソール-結果
{
"nodes" : {
"oTUltX4IQMOUUVeiohTt8A" : {
"name" : "H5dfFeA",
"transport_address" : "127.0.0.1:9300",
"host" : "127.0.0.1",
"ip" : "127.0.0.1:9300",
"tasks" : {
"oTUltX4IQMOUUVeiohTt8A:464" : {
"node" : "oTUltX4IQMOUUVeiohTt8A",
"id" : 464,
"type" : "transport",
"action" : "indices:data/read/search",
"description" : "indices[test], types[test], search_type[QUERY_THEN_FETCH], source[{\"query\":...}]",
"start_time_in_millis" : 1483478610008,
"running_time_in_nanos" : 13991383,
"cancellable" : true,
"cancelled" : false
}
}
}
}
}
新しいdescription
フィールドには、タスクが実行している特定のリクエストを識別するための人間が読み取れるテキストが含まれています。たとえば、上記の検索タスクによって実行されている検索リクエストを識別します。他の種類のタスクには、_reindex
のようにソースと宛先が含まれている異なる説明があります。また、_bulk
のようにリクエストの数と宛先インデックスのみが含まれているものもあります。多くのリクエストは、リクエストに関する詳細情報が簡単に入手できないか、特にリクエストを識別するのに役立たないため、空の説明のみを持つことがあります。
### 完了を待つ
タスクAPIは、特定のタスクの完了を待つためにも使用できます。次の呼び出しは、10秒間ブロックするか、IDが`````oTUltX4IQMOUUVeiohTt8A:12345`````のタスクが完了するまで待機します。
#### Python
``````python
resp = client.tasks.get(
task_id="oTUltX4IQMOUUVeiohTt8A:12345",
wait_for_completion=True,
timeout="10s",
)
print(resp)
`
Ruby
response = client.tasks.get(
task_id: 'oTUltX4IQMOUUVeiohTt8A:12345',
wait_for_completion: true,
timeout: '10s'
)
puts response
Js
const response = await client.tasks.get({
task_id: "oTUltX4IQMOUUVeiohTt8A:12345",
wait_for_completion: "true",
timeout: "10s",
});
console.log(response);
コンソール
GET _tasks/oTUltX4IQMOUUVeiohTt8A:12345?wait_for_completion=true&timeout=10s
特定のアクションタイプのすべてのタスクが完了するまで待機することもできます。このコマンドは、すべてのreindex
タスクが完了するまで待機します:
Python
resp = client.tasks.list(
actions="*reindex",
wait_for_completion=True,
timeout="10s",
)
print(resp)
Ruby
response = client.tasks.list(
actions: '*reindex',
wait_for_completion: true,
timeout: '10s'
)
puts response
Js
const response = await client.tasks.list({
actions: "*reindex",
wait_for_completion: "true",
timeout: "10s",
});
console.log(response);
コンソール
GET _tasks?actions=*reindex&wait_for_completion=true&timeout=10s
タスクのキャンセル
長時間実行されるタスクがキャンセルをサポートしている場合、キャンセルタスクAPIを使用してキャンセルできます。次の例は、タスクoTUltX4IQMOUUVeiohTt8A:12345
をキャンセルします:
Python
resp = client.tasks.cancel(
task_id="oTUltX4IQMOUUVeiohTt8A:12345",
)
print(resp)
Ruby
response = client.tasks.cancel(
task_id: 'oTUltX4IQMOUUVeiohTt8A:12345'
)
puts response
Js
const response = await client.tasks.cancel({
task_id: "oTUltX4IQMOUUVeiohTt8A:12345",
});
console.log(response);
コンソール
POST _tasks/oTUltX4IQMOUUVeiohTt8A:12345/_cancel
タスクキャンセルコマンドは、リストタスクコマンドと同じタスク選択パラメータをサポートしているため、複数のタスクを同時にキャンセルできます。たとえば、次のコマンドは、ノードnodeId1
およびnodeId2
で実行中のすべての再インデックスタスクをキャンセルします。
Python
resp = client.tasks.cancel(
nodes="nodeId1,nodeId2",
actions="*reindex",
)
print(resp)
Ruby
response = client.tasks.cancel(
nodes: 'nodeId1,nodeId2',
actions: '*reindex'
)
puts response
Js
const response = await client.tasks.cancel({
nodes: "nodeId1,nodeId2",
actions: "*reindex",
});
console.log(response);
コンソール
POST _tasks/_cancel?nodes=nodeId1,nodeId2&actions=*reindex
タスクはキャンセルされた後もしばらく実行され続ける場合があります。これは、現在のアクティビティをすぐに安全に停止できない場合や、Elasticsearchがキャンセルを処理する前に他のタスクの作業を完了する必要があるためです。リストタスクAPIは、これらのキャンセルされたタスクを完了するまでリストし続けます。リストタスクAPIへの応答のcancelled
フラグは、キャンセルコマンドが処理されたことを示し、タスクはできるだけ早く停止します。キャンセルされたタスクが迅速に完了しない理由をトラブルシューティングするには、?detailed
パラメータを使用してリストタスクAPIを使用して、システムが実行している他のタスクを特定し、ノードのホットスレッドAPIを使用して、キャンセルされたタスクを完了する代わりにシステムが行っている作業に関する詳細情報を取得します。
タスクのグループ化
タスクAPIコマンドによって返されるタスクリストは、group_by
パラメータを使用してノード(デフォルト)または親タスクによってグループ化できます。次のコマンドは、グループ化を親タスクに変更します:
Python
resp = client.tasks.list(
group_by="parents",
)
print(resp)
Ruby
response = client.tasks.list(
group_by: 'parents'
)
puts response
Js
const response = await client.tasks.list({
group_by: "parents",
});
console.log(response);
コンソール
GET _tasks?group_by=parents
グループ化は、group_by
パラメータとしてnone
を指定することで無効にできます:
Python
resp = client.tasks.list(
group_by="none",
)
print(resp)
Ruby
response = client.tasks.list(
group_by: 'none'
)
puts response
Js
const response = await client.tasks.list({
group_by: "none",
});
console.log(response);
コンソール
GET _tasks?group_by=none
実行中のタスクの識別
``````sh
curl -i -H "X-Opaque-Id: 123456" "http://localhost:9200/_tasks?group_by=parents"
`
APIは次の結果を返します:
Js
HTTP/1.1 200 OK
X-Opaque-Id: 123456
content-type: application/json; charset=UTF-8
content-length: 831
{
"tasks" : {
"u5lcZHqcQhu-rUoFaqDphA:45" : {
"node" : "u5lcZHqcQhu-rUoFaqDphA",
"id" : 45,
"type" : "transport",
"action" : "cluster:monitor/tasks/lists",
"start_time_in_millis" : 1513823752749,
"running_time_in_nanos" : 293139,
"cancellable" : false,
"headers" : {
"X-Opaque-Id" : "123456"
},
"children" : [
{
"node" : "u5lcZHqcQhu-rUoFaqDphA",
"id" : 46,
"type" : "direct",
"action" : "cluster:monitor/tasks/lists[n]",
"start_time_in_millis" : 1513823752750,
"running_time_in_nanos" : 92133,
"cancellable" : false,
"parent_task_id" : "u5lcZHqcQhu-rUoFaqDphA:45",
"headers" : {
"X-Opaque-Id" : "123456"
}
}
]
}
}
}
応答ヘッダーの一部としてのID | |
RESTリクエストによって開始されたタスクのID | |
RESTリクエストによって開始されたタスクの子タスク |