タスク管理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

  1. resp = client.tasks.list()
  2. print(resp)
  3. resp1 = client.tasks.list(
  4. nodes="nodeId1,nodeId2",
  5. )
  6. print(resp1)
  7. resp2 = client.tasks.list(
  8. nodes="nodeId1,nodeId2",
  9. actions="cluster:*",
  10. )
  11. print(resp2)

Ruby

  1. response = client.tasks.list
  2. puts response
  3. response = client.tasks.list(
  4. nodes: 'nodeId1,nodeId2'
  5. )
  6. puts response
  7. response = client.tasks.list(
  8. nodes: 'nodeId1,nodeId2',
  9. actions: 'cluster:*'
  10. )
  11. puts response

Js

  1. const response = await client.tasks.list();
  2. console.log(response);
  3. const response1 = await client.tasks.list({
  4. nodes: "nodeId1,nodeId2",
  5. });
  6. console.log(response1);
  7. const response2 = await client.tasks.list({
  8. nodes: "nodeId1,nodeId2",
  9. actions: "cluster:*",
  10. });
  11. console.log(response2);

コンソール

  1. GET _tasks
  2. GET _tasks?nodes=nodeId1,nodeId2
  3. GET _tasks?nodes=nodeId1,nodeId2&actions=cluster:*
クラスター内のすべてのノードで現在実行中のすべてのタスクを取得します。
ノードnodeId1およびnodeId2で実行中のすべてのタスクを取得します。ノード仕様を参照して、個々のノードを選択する方法についての詳細を確認してください。
ノードnodeId1およびnodeId2で実行中のすべてのクラスター関連タスクを取得します。

APIは次の結果を返します:

コンソール-結果

  1. {
  2. "nodes" : {
  3. "oTUltX4IQMOUUVeiohTt8A" : {
  4. "name" : "H5dfFeA",
  5. "transport_address" : "127.0.0.1:9300",
  6. "host" : "127.0.0.1",
  7. "ip" : "127.0.0.1:9300",
  8. "tasks" : {
  9. "oTUltX4IQMOUUVeiohTt8A:124" : {
  10. "node" : "oTUltX4IQMOUUVeiohTt8A",
  11. "id" : 124,
  12. "type" : "direct",
  13. "action" : "cluster:monitor/tasks/lists[n]",
  14. "start_time_in_millis" : 1458585884904,
  15. "running_time_in_nanos" : 47402,
  16. "cancellable" : false,
  17. "parent_task_id" : "oTUltX4IQMOUUVeiohTt8A:123"
  18. },
  19. "oTUltX4IQMOUUVeiohTt8A:123" : {
  20. "node" : "oTUltX4IQMOUUVeiohTt8A",
  21. "id" : 123,
  22. "type" : "transport",
  23. "action" : "cluster:monitor/tasks/lists",
  24. "start_time_in_millis" : 1458585884904,
  25. "running_time_in_nanos" : 236042,
  26. "cancellable" : false
  27. }
  28. }
  29. }
  30. }
  31. }

特定のタスクから情報を取得する

特定のタスクから情報を取得することも可能です。次の例は、タスクoTUltX4IQMOUUVeiohTt8A:124に関する情報を取得します:

Python

  1. resp = client.tasks.get(
  2. task_id="oTUltX4IQMOUUVeiohTt8A:124",
  3. )
  4. print(resp)

Ruby

  1. response = client.tasks.get(
  2. task_id: 'oTUltX4IQMOUUVeiohTt8A:124'
  3. )
  4. puts response

Js

  1. const response = await client.tasks.get({
  2. task_id: "oTUltX4IQMOUUVeiohTt8A:124",
  3. });
  4. console.log(response);

コンソール

  1. GET _tasks/oTUltX4IQMOUUVeiohTt8A:124

タスクが見つからない場合、APIは404を返します。

特定のタスクのすべての子を取得するには:

Python

  1. resp = client.tasks.list(
  2. parent_task_id="oTUltX4IQMOUUVeiohTt8A:123",
  3. )
  4. print(resp)

Ruby

  1. response = client.tasks.list(
  2. parent_task_id: 'oTUltX4IQMOUUVeiohTt8A:123'
  3. )
  4. puts response

Js

  1. const response = await client.tasks.list({
  2. parent_task_id: "oTUltX4IQMOUUVeiohTt8A:123",
  3. });
  4. console.log(response);

コンソール

  1. GET _tasks?parent_task_id=oTUltX4IQMOUUVeiohTt8A:123

親が見つからない場合、APIは404を返しません。

タスクに関する詳細情報を取得する

  1. #### Python
  2. ``````python
  3. resp = client.tasks.list(
  4. actions="*search",
  5. detailed=True,
  6. )
  7. print(resp)
  8. `

Ruby

  1. response = client.tasks.list(
  2. actions: '*search',
  3. detailed: true
  4. )
  5. puts response

Js

  1. const response = await client.tasks.list({
  2. actions: "*search",
  3. detailed: "true",
  4. });
  5. console.log(response);

コンソール

  1. GET _tasks?actions=*search&detailed

APIは次の結果を返します:

コンソール-結果

  1. {
  2. "nodes" : {
  3. "oTUltX4IQMOUUVeiohTt8A" : {
  4. "name" : "H5dfFeA",
  5. "transport_address" : "127.0.0.1:9300",
  6. "host" : "127.0.0.1",
  7. "ip" : "127.0.0.1:9300",
  8. "tasks" : {
  9. "oTUltX4IQMOUUVeiohTt8A:464" : {
  10. "node" : "oTUltX4IQMOUUVeiohTt8A",
  11. "id" : 464,
  12. "type" : "transport",
  13. "action" : "indices:data/read/search",
  14. "description" : "indices[test], types[test], search_type[QUERY_THEN_FETCH], source[{\"query\":...}]",
  15. "start_time_in_millis" : 1483478610008,
  16. "running_time_in_nanos" : 13991383,
  17. "cancellable" : true,
  18. "cancelled" : false
  19. }
  20. }
  21. }
  22. }
  23. }

新しいdescriptionフィールドには、タスクが実行している特定のリクエストを識別するための人間が読み取れるテキストが含まれています。たとえば、上記の検索タスクによって実行されている検索リクエストを識別します。他の種類のタスクには、_reindexのようにソースと宛先が含まれている異なる説明があります。また、_bulkのようにリクエストの数と宛先インデックスのみが含まれているものもあります。多くのリクエストは、リクエストに関する詳細情報が簡単に入手できないか、特にリクエストを識別するのに役立たないため、空の説明のみを持つことがあります。

  1. ### 完了を待つ
  2. タスクAPIは、特定のタスクの完了を待つためにも使用できます。次の呼び出しは、10秒間ブロックするか、ID`````oTUltX4IQMOUUVeiohTt8A:12345`````のタスクが完了するまで待機します。
  3. #### Python
  4. ``````python
  5. resp = client.tasks.get(
  6. task_id="oTUltX4IQMOUUVeiohTt8A:12345",
  7. wait_for_completion=True,
  8. timeout="10s",
  9. )
  10. print(resp)
  11. `

Ruby

  1. response = client.tasks.get(
  2. task_id: 'oTUltX4IQMOUUVeiohTt8A:12345',
  3. wait_for_completion: true,
  4. timeout: '10s'
  5. )
  6. puts response

Js

  1. const response = await client.tasks.get({
  2. task_id: "oTUltX4IQMOUUVeiohTt8A:12345",
  3. wait_for_completion: "true",
  4. timeout: "10s",
  5. });
  6. console.log(response);

コンソール

  1. GET _tasks/oTUltX4IQMOUUVeiohTt8A:12345?wait_for_completion=true&timeout=10s

特定のアクションタイプのすべてのタスクが完了するまで待機することもできます。このコマンドは、すべてのreindexタスクが完了するまで待機します:

Python

  1. resp = client.tasks.list(
  2. actions="*reindex",
  3. wait_for_completion=True,
  4. timeout="10s",
  5. )
  6. print(resp)

Ruby

  1. response = client.tasks.list(
  2. actions: '*reindex',
  3. wait_for_completion: true,
  4. timeout: '10s'
  5. )
  6. puts response

Js

  1. const response = await client.tasks.list({
  2. actions: "*reindex",
  3. wait_for_completion: "true",
  4. timeout: "10s",
  5. });
  6. console.log(response);

コンソール

  1. GET _tasks?actions=*reindex&wait_for_completion=true&timeout=10s

タスクのキャンセル

長時間実行されるタスクがキャンセルをサポートしている場合、キャンセルタスクAPIを使用してキャンセルできます。次の例は、タスクoTUltX4IQMOUUVeiohTt8A:12345をキャンセルします:

Python

  1. resp = client.tasks.cancel(
  2. task_id="oTUltX4IQMOUUVeiohTt8A:12345",
  3. )
  4. print(resp)

Ruby

  1. response = client.tasks.cancel(
  2. task_id: 'oTUltX4IQMOUUVeiohTt8A:12345'
  3. )
  4. puts response

Js

  1. const response = await client.tasks.cancel({
  2. task_id: "oTUltX4IQMOUUVeiohTt8A:12345",
  3. });
  4. console.log(response);

コンソール

  1. POST _tasks/oTUltX4IQMOUUVeiohTt8A:12345/_cancel

タスクキャンセルコマンドは、リストタスクコマンドと同じタスク選択パラメータをサポートしているため、複数のタスクを同時にキャンセルできます。たとえば、次のコマンドは、ノードnodeId1およびnodeId2で実行中のすべての再インデックスタスクをキャンセルします。

Python

  1. resp = client.tasks.cancel(
  2. nodes="nodeId1,nodeId2",
  3. actions="*reindex",
  4. )
  5. print(resp)

Ruby

  1. response = client.tasks.cancel(
  2. nodes: 'nodeId1,nodeId2',
  3. actions: '*reindex'
  4. )
  5. puts response

Js

  1. const response = await client.tasks.cancel({
  2. nodes: "nodeId1,nodeId2",
  3. actions: "*reindex",
  4. });
  5. console.log(response);

コンソール

  1. POST _tasks/_cancel?nodes=nodeId1,nodeId2&actions=*reindex

タスクはキャンセルされた後もしばらく実行され続ける場合があります。これは、現在のアクティビティをすぐに安全に停止できない場合や、Elasticsearchがキャンセルを処理する前に他のタスクの作業を完了する必要があるためです。リストタスクAPIは、これらのキャンセルされたタスクを完了するまでリストし続けます。リストタスクAPIへの応答のcancelledフラグは、キャンセルコマンドが処理されたことを示し、タスクはできるだけ早く停止します。キャンセルされたタスクが迅速に完了しない理由をトラブルシューティングするには、?detailedパラメータを使用してリストタスクAPIを使用して、システムが実行している他のタスクを特定し、ノードのホットスレッドAPIを使用して、キャンセルされたタスクを完了する代わりにシステムが行っている作業に関する詳細情報を取得します。

タスクのグループ化

タスクAPIコマンドによって返されるタスクリストは、group_byパラメータを使用してノード(デフォルト)または親タスクによってグループ化できます。次のコマンドは、グループ化を親タスクに変更します:

Python

  1. resp = client.tasks.list(
  2. group_by="parents",
  3. )
  4. print(resp)

Ruby

  1. response = client.tasks.list(
  2. group_by: 'parents'
  3. )
  4. puts response

Js

  1. const response = await client.tasks.list({
  2. group_by: "parents",
  3. });
  4. console.log(response);

コンソール

  1. GET _tasks?group_by=parents

グループ化は、group_byパラメータとしてnoneを指定することで無効にできます:

Python

  1. resp = client.tasks.list(
  2. group_by="none",
  3. )
  4. print(resp)

Ruby

  1. response = client.tasks.list(
  2. group_by: 'none'
  3. )
  4. puts response

Js

  1. const response = await client.tasks.list({
  2. group_by: "none",
  3. });
  4. console.log(response);

コンソール

  1. GET _tasks?group_by=none

実行中のタスクの識別

  1. ``````sh
  2. curl -i -H "X-Opaque-Id: 123456" "http://localhost:9200/_tasks?group_by=parents"
  3. `

APIは次の結果を返します:

Js

  1. HTTP/1.1 200 OK
  2. X-Opaque-Id: 123456
  3. content-type: application/json; charset=UTF-8
  4. content-length: 831
  5. {
  6. "tasks" : {
  7. "u5lcZHqcQhu-rUoFaqDphA:45" : {
  8. "node" : "u5lcZHqcQhu-rUoFaqDphA",
  9. "id" : 45,
  10. "type" : "transport",
  11. "action" : "cluster:monitor/tasks/lists",
  12. "start_time_in_millis" : 1513823752749,
  13. "running_time_in_nanos" : 293139,
  14. "cancellable" : false,
  15. "headers" : {
  16. "X-Opaque-Id" : "123456"
  17. },
  18. "children" : [
  19. {
  20. "node" : "u5lcZHqcQhu-rUoFaqDphA",
  21. "id" : 46,
  22. "type" : "direct",
  23. "action" : "cluster:monitor/tasks/lists[n]",
  24. "start_time_in_millis" : 1513823752750,
  25. "running_time_in_nanos" : 92133,
  26. "cancellable" : false,
  27. "parent_task_id" : "u5lcZHqcQhu-rUoFaqDphA:45",
  28. "headers" : {
  29. "X-Opaque-Id" : "123456"
  30. }
  31. }
  32. ]
  33. }
  34. }
  35. }
応答ヘッダーの一部としてのID
RESTリクエストによって開始されたタスクのID
RESTリクエストによって開始されたタスクの子タスク