ウォッチAPIの実行

保存されたウォッチの実行を強制します。

リクエスト

POST _watcher/watch/<watch_id>/_execute

POST _watcher/watch/_execute

前提条件

  • このAPIを使用するには、manage_watcherクラスター権限が必要です。詳細については、セキュリティ権限を参照してください。

説明

このAPIは、トリガーロジックの外部でウォッチの実行を強制したり、デバッグ目的でウォッチの実行をシミュレートしたりするために使用できます。

テストおよびデバッグの目的で、ウォッチの実行方法を詳細に制御できます。すべてのアクションを実行せずにウォッチを実行したり、代わりにそれらをシミュレートしたりできます。また、ウォッチ条件を無視して実行を強制し、実行後にウォッチ履歴にウォッチレコードが書き込まれるかどうかを制御できます。

インラインウォッチ実行

Execute APIを使用して、ウォッチ定義をインラインで指定することで、まだ登録されていないウォッチを実行できます。これは、ウォッチをWatcherに追加する前にテストおよびデバッグするための優れたツールです。

パスパラメータ

  • <watch_id>
  • (オプション、文字列)ウォッチの識別子。

クエリパラメータ

  • debug
  • (オプション、Boolean)ウォッチがデバッグモードで実行されるかどうかを定義します。デフォルト値はfalseです。

リクエストボディ

このAPIは以下のフィールドをサポートします:

名前 必須 デフォルト 説明
trigger_data no この構造は、ウォッチ実行中に使用されるトリガーイベントのデータとして解析されます。
ignore_condition no false trueに設定されている場合、ウォッチ実行は常に条件を使用します。
これはHTTPパラメータとしても指定できます。
alternative_input no null 存在する場合、ウォッチはこのオブジェクトをペイロードとして使用し、独自の入力を実行しません。
action_modes no null ウォッチ実行の一部としてウォッチアクションを処理する方法を決定します。詳細についてはアクション実行モードを参照してください。
record_execution no false trueに設定されている場合、ウォッチの実行結果を表すウォッチレコードが現在の時間の.watcher-historyインデックスに永続化されます。さらに、ウォッチの状態が更新され、後続の実行が制限される可能性があります。
これはHTTPパラメータとしても指定できます。
watch no null 存在する場合、このウォッチがリクエストで指定されたものの代わりに使用されます。このウォッチはインデックスに永続化されず、record_executionは設定できません。

アクション実行モード

アクションモードは、ウォッチ実行中にアクションがどのように処理されるかを定義します。アクションが関連付けられる可能性のある5つのモードがあります:

名前 説明
simulate アクション実行がシミュレートされます。各アクションタイプは独自のシミュレーション操作モードを定義します。たとえば、emailアクションは、送信されるはずのメールを作成しますが、実際には送信しません。このモードでは、ウォッチの現在の状態がそれを示す場合、アクションが制限される可能性があります。
force_simulate simulateモードに似ていますが、アクションは現在のウォッチの状態がそれを示す場合でも制限されません。
execute ウォッチが独自のトリガーによってトリガーされた場合に実行されるはずのアクションを実行します。ウォッチの現在の状態がそれを示す場合、実行が制限される可能性があります。
force_execute executeモードに似ていますが、アクションは現在のウォッチの状態がそれを示す場合でも制限されません。
skip アクションはスキップされ、実行またはシミュレートされません。実質的にアクションを制限します。

セキュリティ統合

Elasticsearchのセキュリティ機能がクラスターで有効になっている場合、ウォッチはウォッチを保存したユーザーの権限で実行されます。ユーザーがインデックスaを読み取ることが許可されているが、インデックスbを読み取ることが許可されていない場合、ウォッチの実行中に同じルールが適用されます。

execute watch APIを使用する場合、APIを呼び出したユーザーの認可データがベースとして使用され、ウォッチを保存したユーザーの情報は使用されません。

次の例は、my_watchウォッチを実行します:

Python

  1. resp = client.watcher.execute_watch(
  2. id="my_watch",
  3. )
  4. print(resp)

Js

  1. const response = await client.watcher.executeWatch({
  2. id: "my_watch",
  3. });
  4. console.log(response);

コンソール

  1. POST _watcher/watch/my_watch/_execute

次の例は、my-watchウォッチを実行する包括的な例を示しています:

Python

  1. resp = client.watcher.execute_watch(
  2. id="my_watch",
  3. trigger_data={
  4. "triggered_time": "now",
  5. "scheduled_time": "now"
  6. },
  7. alternative_input={
  8. "foo": "bar"
  9. },
  10. ignore_condition=True,
  11. action_modes={
  12. "my-action": "force_simulate"
  13. },
  14. record_execution=True,
  15. )
  16. print(resp)

Js

  1. const response = await client.watcher.executeWatch({
  2. id: "my_watch",
  3. trigger_data: {
  4. triggered_time: "now",
  5. scheduled_time: "now",
  6. },
  7. alternative_input: {
  8. foo: "bar",
  9. },
  10. ignore_condition: true,
  11. action_modes: {
  12. "my-action": "force_simulate",
  13. },
  14. record_execution: true,
  15. });
  16. console.log(response);

コンソール

  1. POST _watcher/watch/my_watch/_execute
  2. {
  3. "trigger_data" : {
  4. "triggered_time" : "now",
  5. "scheduled_time" : "now"
  6. },
  7. "alternative_input" : {
  8. "foo" : "bar"
  9. },
  10. "ignore_condition" : true,
  11. "action_modes" : {
  12. "my-action" : "force_simulate"
  13. },
  14. "record_execution" : true
  15. }
トリガーされた時間とスケジュールされた時間が提供されます。
ウォッチによって定義された入力は無視され、代わりに提供された入力が実行ペイロードとして使用されます。
ウォッチによって定義された条件は無視され、trueに評価されると仮定されます。
my-actionのシミュレーションを強制します。シミュレーションを強制することは、制限が無視され、ウォッチが通常実行されるのではなく、Watcherによってシミュレートされることを意味します。
ウォッチの実行は、ウォッチ履歴にウォッチレコードを作成し、ウォッチの制限状態がそれに応じて更新される可能性があります。

これは出力の例です:

コンソール-結果

  1. {
  2. "_id": "my_watch_0-2015-06-02T23:17:55.124Z",
  3. "watch_record": {
  4. "@timestamp": "2015-06-02T23:17:55.124Z",
  5. "watch_id": "my_watch",
  6. "node": "my_node",
  7. "messages": [],
  8. "trigger_event": {
  9. "type": "manual",
  10. "triggered_time": "2015-06-02T23:17:55.124Z",
  11. "manual": {
  12. "schedule": {
  13. "scheduled_time": "2015-06-02T23:17:55.124Z"
  14. }
  15. }
  16. },
  17. "state": "executed",
  18. "status": {
  19. "version": 1,
  20. "execution_state": "executed",
  21. "state": {
  22. "active": true,
  23. "timestamp": "2015-06-02T23:17:55.111Z"
  24. },
  25. "last_checked": "2015-06-02T23:17:55.124Z",
  26. "last_met_condition": "2015-06-02T23:17:55.124Z",
  27. "actions": {
  28. "test_index": {
  29. "ack": {
  30. "timestamp": "2015-06-02T23:17:55.124Z",
  31. "state": "ackable"
  32. },
  33. "last_execution": {
  34. "timestamp": "2015-06-02T23:17:55.124Z",
  35. "successful": true
  36. },
  37. "last_successful_execution": {
  38. "timestamp": "2015-06-02T23:17:55.124Z",
  39. "successful": true
  40. }
  41. }
  42. }
  43. },
  44. "input": {
  45. "simple": {
  46. "payload": {
  47. "send": "yes"
  48. }
  49. }
  50. },
  51. "condition": {
  52. "always": {}
  53. },
  54. "result": {
  55. "execution_time": "2015-06-02T23:17:55.124Z",
  56. "execution_duration": 12608,
  57. "input": {
  58. "type": "simple",
  59. "payload": {
  60. "foo": "bar"
  61. },
  62. "status": "success"
  63. },
  64. "condition": {
  65. "type": "always",
  66. "met": true,
  67. "status": "success"
  68. },
  69. "actions": [
  70. {
  71. "id": "test_index",
  72. "index": {
  73. "response": {
  74. "index": "test",
  75. "version": 1,
  76. "created": true,
  77. "result": "created",
  78. "id": "AVSHKzPa9zx62AzUzFXY"
  79. }
  80. },
  81. "status": "success",
  82. "type": "index"
  83. }
  84. ]
  85. },
  86. "user": "test_admin"
  87. }
  88. }
.watcher-historyインデックスに保存されるウォッチレコードのID。
.watcher-historyインデックスに保存されるウォッチレコードドキュメント。
ウォッチ実行結果。
ウォッチを実行するために使用されたユーザー。

アクションIDにモード名を関連付けることで、各アクションに異なる実行モードを設定できます:

Python

  1. resp = client.watcher.execute_watch(
  2. id="my_watch",
  3. action_modes={
  4. "action1": "force_simulate",
  5. "action2": "skip"
  6. },
  7. )
  8. print(resp)

Js

  1. const response = await client.watcher.executeWatch({
  2. id: "my_watch",
  3. action_modes: {
  4. action1: "force_simulate",
  5. action2: "skip",
  6. },
  7. });
  8. console.log(response);

コンソール

  1. POST _watcher/watch/my_watch/_execute
  2. {
  3. "action_modes" : {
  4. "action1" : "force_simulate",
  5. "action2" : "skip"
  6. }
  7. }

ウォッチ内のすべてのアクションに単一の実行モードを関連付けることもできます。アクションIDとして_allを使用します:

Python

  1. resp = client.watcher.execute_watch(
  2. id="my_watch",
  3. action_modes={
  4. "_all": "force_execute"
  5. },
  6. )
  7. print(resp)

Js

  1. const response = await client.watcher.executeWatch({
  2. id: "my_watch",
  3. action_modes: {
  4. _all: "force_execute",
  5. },
  6. });
  7. console.log(response);

コンソール

  1. POST _watcher/watch/my_watch/_execute
  2. {
  3. "action_modes" : {
  4. "_all" : "force_execute"
  5. }
  6. }

次の例は、インラインでウォッチを実行する方法を示しています:

Python

  1. resp = client.watcher.execute_watch(
  2. watch={
  3. "trigger": {
  4. "schedule": {
  5. "interval": "10s"
  6. }
  7. },
  8. "input": {
  9. "search": {
  10. "request": {
  11. "indices": [
  12. "logs"
  13. ],
  14. "body": {
  15. "query": {
  16. "match": {
  17. "message": "error"
  18. }
  19. }
  20. }
  21. }
  22. }
  23. },
  24. "condition": {
  25. "compare": {
  26. "ctx.payload.hits.total": {
  27. "gt": 0
  28. }
  29. }
  30. },
  31. "actions": {
  32. "log_error": {
  33. "logging": {
  34. "text": "Found {{ctx.payload.hits.total}} errors in the logs"
  35. }
  36. }
  37. }
  38. },
  39. )
  40. print(resp)

Js

  1. const response = await client.watcher.executeWatch({
  2. watch: {
  3. trigger: {
  4. schedule: {
  5. interval: "10s",
  6. },
  7. },
  8. input: {
  9. search: {
  10. request: {
  11. indices: ["logs"],
  12. body: {
  13. query: {
  14. match: {
  15. message: "error",
  16. },
  17. },
  18. },
  19. },
  20. },
  21. },
  22. condition: {
  23. compare: {
  24. "ctx.payload.hits.total": {
  25. gt: 0,
  26. },
  27. },
  28. },
  29. actions: {
  30. log_error: {
  31. logging: {
  32. text: "Found {{ctx.payload.hits.total}} errors in the logs",
  33. },
  34. },
  35. },
  36. },
  37. });
  38. console.log(response);

コンソール

  1. POST _watcher/watch/_execute
  2. {
  3. "watch" : {
  4. "trigger" : { "schedule" : { "interval" : "10s" } },
  5. "input" : {
  6. "search" : {
  7. "request" : {
  8. "indices" : [ "logs" ],
  9. "body" : {
  10. "query" : {
  11. "match" : { "message": "error" }
  12. }
  13. }
  14. }
  15. }
  16. },
  17. "condition" : {
  18. "compare" : { "ctx.payload.hits.total" : { "gt" : 0 }}
  19. },
  20. "actions" : {
  21. "log_error" : {
  22. "logging" : {
  23. "text" : "Found {{ctx.payload.hits.total}} errors in the logs"
  24. }
  25. }
  26. }
  27. }
  28. }

インラインウォッチを使用する場合でも、このAPIの他の設定は引き続き適用されます。次のスニペットでは、インラインウォッチがcompare条件を定義していますが、実行中にこの条件は無視されます:

Python

  1. resp = client.watcher.execute_watch(
  2. ignore_condition=True,
  3. watch={
  4. "trigger": {
  5. "schedule": {
  6. "interval": "10s"
  7. }
  8. },
  9. "input": {
  10. "search": {
  11. "request": {
  12. "indices": [
  13. "logs"
  14. ],
  15. "body": {
  16. "query": {
  17. "match": {
  18. "message": "error"
  19. }
  20. }
  21. }
  22. }
  23. }
  24. },
  25. "condition": {
  26. "compare": {
  27. "ctx.payload.hits.total": {
  28. "gt": 0
  29. }
  30. }
  31. },
  32. "actions": {
  33. "log_error": {
  34. "logging": {
  35. "text": "Found {{ctx.payload.hits.total}} errors in the logs"
  36. }
  37. }
  38. }
  39. },
  40. )
  41. print(resp)

Js

  1. const response = await client.watcher.executeWatch({
  2. ignore_condition: true,
  3. watch: {
  4. trigger: {
  5. schedule: {
  6. interval: "10s",
  7. },
  8. },
  9. input: {
  10. search: {
  11. request: {
  12. indices: ["logs"],
  13. body: {
  14. query: {
  15. match: {
  16. message: "error",
  17. },
  18. },
  19. },
  20. },
  21. },
  22. },
  23. condition: {
  24. compare: {
  25. "ctx.payload.hits.total": {
  26. gt: 0,
  27. },
  28. },
  29. },
  30. actions: {
  31. log_error: {
  32. logging: {
  33. text: "Found {{ctx.payload.hits.total}} errors in the logs",
  34. },
  35. },
  36. },
  37. },
  38. });
  39. console.log(response);

コンソール

  1. POST _watcher/watch/_execute
  2. {
  3. "ignore_condition" : true,
  4. "watch" : {
  5. "trigger" : { "schedule" : { "interval" : "10s" } },
  6. "input" : {
  7. "search" : {
  8. "request" : {
  9. "indices" : [ "logs" ],
  10. "body" : {
  11. "query" : {
  12. "match" : { "message": "error" }
  13. }
  14. }
  15. }
  16. }
  17. },
  18. "condition" : {
  19. "compare" : { "ctx.payload.hits.total" : { "gt" : 0 }}
  20. },
  21. "actions" : {
  22. "log_error" : {
  23. "logging" : {
  24. "text" : "Found {{ctx.payload.hits.total}} errors in the logs"
  25. }
  26. }
  27. }
  28. }
  29. }