配列内の各要素に対してアクションを実行する
foreach
フィールドをアクションで使用して、その配列内のすべての要素に対して設定されたアクションをトリガーできます。
長時間実行される監視から保護するために、max_iterations
フィールドを使用して、各監視が実行する最大回数を制限できます。この制限に達した場合、実行は優雅に停止されます。設定されていない場合、このフィールドはデフォルトで100に設定されます。
Python
resp = client.watcher.put_watch(
id="log_event_watch",
trigger={
"schedule": {
"interval": "5m"
}
},
input={
"search": {
"request": {
"indices": "log-events",
"body": {
"query": {
"match": {
"status": "error"
}
}
}
}
}
},
condition={
"compare": {
"ctx.payload.hits.total": {
"gt": 0
}
}
},
actions={
"log_hits": {
"foreach": "ctx.payload.hits.hits",
"max_iterations": 500,
"logging": {
"text": "Found id {{ctx.payload._id}} with field {{ctx.payload._source.my_field}}"
}
}
},
)
print(resp)
Js
const response = await client.watcher.putWatch({
id: "log_event_watch",
trigger: {
schedule: {
interval: "5m",
},
},
input: {
search: {
request: {
indices: "log-events",
body: {
query: {
match: {
status: "error",
},
},
},
},
},
},
condition: {
compare: {
"ctx.payload.hits.total": {
gt: 0,
},
},
},
actions: {
log_hits: {
foreach: "ctx.payload.hits.hits",
max_iterations: 500,
logging: {
text: "Found id {{ctx.payload._id}} with field {{ctx.payload._source.my_field}}",
},
},
},
});
console.log(response);
コンソール
PUT _watcher/watch/log_event_watch
{
"trigger" : {
"schedule" : { "interval" : "5m" }
},
"input" : {
"search" : {
"request" : {
"indices" : "log-events",
"body" : {
"query" : { "match" : { "status" : "error" } }
}
}
}
},
"condition" : {
"compare" : { "ctx.payload.hits.total" : { "gt" : 0 } }
},
"actions" : {
"log_hits" : {
"foreach" : "ctx.payload.hits.hits",
"max_iterations" : 500,
"logging" : {
"text" : "Found id {{ctx.payload._id}} with field {{ctx.payload._source.my_field}}"
}
}
}
}
返された検索ヒットごとにログ出力文が実行されます。 |