ウォッチ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
resp = client.watcher.execute_watch(
id="my_watch",
)
print(resp)
Js
const response = await client.watcher.executeWatch({
id: "my_watch",
});
console.log(response);
コンソール
POST _watcher/watch/my_watch/_execute
次の例は、my-watch
ウォッチを実行する包括的な例を示しています:
Python
resp = client.watcher.execute_watch(
id="my_watch",
trigger_data={
"triggered_time": "now",
"scheduled_time": "now"
},
alternative_input={
"foo": "bar"
},
ignore_condition=True,
action_modes={
"my-action": "force_simulate"
},
record_execution=True,
)
print(resp)
Js
const response = await client.watcher.executeWatch({
id: "my_watch",
trigger_data: {
triggered_time: "now",
scheduled_time: "now",
},
alternative_input: {
foo: "bar",
},
ignore_condition: true,
action_modes: {
"my-action": "force_simulate",
},
record_execution: true,
});
console.log(response);
コンソール
POST _watcher/watch/my_watch/_execute
{
"trigger_data" : {
"triggered_time" : "now",
"scheduled_time" : "now"
},
"alternative_input" : {
"foo" : "bar"
},
"ignore_condition" : true,
"action_modes" : {
"my-action" : "force_simulate"
},
"record_execution" : true
}
トリガーされた時間とスケジュールされた時間が提供されます。 | |
ウォッチによって定義された入力は無視され、代わりに提供された入力が実行ペイロードとして使用されます。 | |
ウォッチによって定義された条件は無視され、true に評価されると仮定されます。 |
|
my-action のシミュレーションを強制します。シミュレーションを強制することは、制限が無視され、ウォッチが通常実行されるのではなく、Watcherによってシミュレートされることを意味します。 |
|
ウォッチの実行は、ウォッチ履歴にウォッチレコードを作成し、ウォッチの制限状態がそれに応じて更新される可能性があります。 |
コンソール-結果
{
"_id": "my_watch_0-2015-06-02T23:17:55.124Z",
"watch_record": {
"@timestamp": "2015-06-02T23:17:55.124Z",
"watch_id": "my_watch",
"node": "my_node",
"messages": [],
"trigger_event": {
"type": "manual",
"triggered_time": "2015-06-02T23:17:55.124Z",
"manual": {
"schedule": {
"scheduled_time": "2015-06-02T23:17:55.124Z"
}
}
},
"state": "executed",
"status": {
"version": 1,
"execution_state": "executed",
"state": {
"active": true,
"timestamp": "2015-06-02T23:17:55.111Z"
},
"last_checked": "2015-06-02T23:17:55.124Z",
"last_met_condition": "2015-06-02T23:17:55.124Z",
"actions": {
"test_index": {
"ack": {
"timestamp": "2015-06-02T23:17:55.124Z",
"state": "ackable"
},
"last_execution": {
"timestamp": "2015-06-02T23:17:55.124Z",
"successful": true
},
"last_successful_execution": {
"timestamp": "2015-06-02T23:17:55.124Z",
"successful": true
}
}
}
},
"input": {
"simple": {
"payload": {
"send": "yes"
}
}
},
"condition": {
"always": {}
},
"result": {
"execution_time": "2015-06-02T23:17:55.124Z",
"execution_duration": 12608,
"input": {
"type": "simple",
"payload": {
"foo": "bar"
},
"status": "success"
},
"condition": {
"type": "always",
"met": true,
"status": "success"
},
"actions": [
{
"id": "test_index",
"index": {
"response": {
"index": "test",
"version": 1,
"created": true,
"result": "created",
"id": "AVSHKzPa9zx62AzUzFXY"
}
},
"status": "success",
"type": "index"
}
]
},
"user": "test_admin"
}
}
.watcher-history インデックスに保存されるウォッチレコードのID。 |
|
.watcher-history インデックスに保存されるウォッチレコードドキュメント。 |
|
ウォッチ実行結果。 | |
ウォッチを実行するために使用されたユーザー。 |
アクションIDにモード名を関連付けることで、各アクションに異なる実行モードを設定できます:
Python
resp = client.watcher.execute_watch(
id="my_watch",
action_modes={
"action1": "force_simulate",
"action2": "skip"
},
)
print(resp)
Js
const response = await client.watcher.executeWatch({
id: "my_watch",
action_modes: {
action1: "force_simulate",
action2: "skip",
},
});
console.log(response);
コンソール
POST _watcher/watch/my_watch/_execute
{
"action_modes" : {
"action1" : "force_simulate",
"action2" : "skip"
}
}
ウォッチ内のすべてのアクションに単一の実行モードを関連付けることもできます。アクションIDとして_all
を使用します:
Python
resp = client.watcher.execute_watch(
id="my_watch",
action_modes={
"_all": "force_execute"
},
)
print(resp)
Js
const response = await client.watcher.executeWatch({
id: "my_watch",
action_modes: {
_all: "force_execute",
},
});
console.log(response);
コンソール
POST _watcher/watch/my_watch/_execute
{
"action_modes" : {
"_all" : "force_execute"
}
}
次の例は、インラインでウォッチを実行する方法を示しています:
Python
resp = client.watcher.execute_watch(
watch={
"trigger": {
"schedule": {
"interval": "10s"
}
},
"input": {
"search": {
"request": {
"indices": [
"logs"
],
"body": {
"query": {
"match": {
"message": "error"
}
}
}
}
}
},
"condition": {
"compare": {
"ctx.payload.hits.total": {
"gt": 0
}
}
},
"actions": {
"log_error": {
"logging": {
"text": "Found {{ctx.payload.hits.total}} errors in the logs"
}
}
}
},
)
print(resp)
Js
const response = await client.watcher.executeWatch({
watch: {
trigger: {
schedule: {
interval: "10s",
},
},
input: {
search: {
request: {
indices: ["logs"],
body: {
query: {
match: {
message: "error",
},
},
},
},
},
},
condition: {
compare: {
"ctx.payload.hits.total": {
gt: 0,
},
},
},
actions: {
log_error: {
logging: {
text: "Found {{ctx.payload.hits.total}} errors in the logs",
},
},
},
},
});
console.log(response);
コンソール
POST _watcher/watch/_execute
{
"watch" : {
"trigger" : { "schedule" : { "interval" : "10s" } },
"input" : {
"search" : {
"request" : {
"indices" : [ "logs" ],
"body" : {
"query" : {
"match" : { "message": "error" }
}
}
}
}
},
"condition" : {
"compare" : { "ctx.payload.hits.total" : { "gt" : 0 }}
},
"actions" : {
"log_error" : {
"logging" : {
"text" : "Found {{ctx.payload.hits.total}} errors in the logs"
}
}
}
}
}
インラインウォッチを使用する場合でも、このAPIの他の設定は引き続き適用されます。次のスニペットでは、インラインウォッチがcompare
条件を定義していますが、実行中にこの条件は無視されます:
Python
resp = client.watcher.execute_watch(
ignore_condition=True,
watch={
"trigger": {
"schedule": {
"interval": "10s"
}
},
"input": {
"search": {
"request": {
"indices": [
"logs"
],
"body": {
"query": {
"match": {
"message": "error"
}
}
}
}
}
},
"condition": {
"compare": {
"ctx.payload.hits.total": {
"gt": 0
}
}
},
"actions": {
"log_error": {
"logging": {
"text": "Found {{ctx.payload.hits.total}} errors in the logs"
}
}
}
},
)
print(resp)
Js
const response = await client.watcher.executeWatch({
ignore_condition: true,
watch: {
trigger: {
schedule: {
interval: "10s",
},
},
input: {
search: {
request: {
indices: ["logs"],
body: {
query: {
match: {
message: "error",
},
},
},
},
},
},
condition: {
compare: {
"ctx.payload.hits.total": {
gt: 0,
},
},
},
actions: {
log_error: {
logging: {
text: "Found {{ctx.payload.hits.total}} errors in the logs",
},
},
},
},
});
console.log(response);
コンソール
POST _watcher/watch/_execute
{
"ignore_condition" : true,
"watch" : {
"trigger" : { "schedule" : { "interval" : "10s" } },
"input" : {
"search" : {
"request" : {
"indices" : [ "logs" ],
"body" : {
"query" : {
"match" : { "message": "error" }
}
}
}
}
},
"condition" : {
"compare" : { "ctx.payload.hits.total" : { "gt" : 0 }}
},
"actions" : {
"log_error" : {
"logging" : {
"text" : "Found {{ctx.payload.hits.total}} errors in the logs"
}
}
}
}
}