配列内の各要素に対してアクションを実行する

foreach フィールドをアクションで使用して、その配列内のすべての要素に対して設定されたアクションをトリガーできます。

長時間実行される監視から保護するために、max_iterations フィールドを使用して、各監視が実行する最大回数を制限できます。この制限に達した場合、実行は優雅に停止されます。設定されていない場合、このフィールドはデフォルトで100に設定されます。

Python

  1. resp = client.watcher.put_watch(
  2. id="log_event_watch",
  3. trigger={
  4. "schedule": {
  5. "interval": "5m"
  6. }
  7. },
  8. input={
  9. "search": {
  10. "request": {
  11. "indices": "log-events",
  12. "body": {
  13. "query": {
  14. "match": {
  15. "status": "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_hits": {
  31. "foreach": "ctx.payload.hits.hits",
  32. "max_iterations": 500,
  33. "logging": {
  34. "text": "Found id {{ctx.payload._id}} with field {{ctx.payload._source.my_field}}"
  35. }
  36. }
  37. },
  38. )
  39. print(resp)

Js

  1. const response = await client.watcher.putWatch({
  2. id: "log_event_watch",
  3. trigger: {
  4. schedule: {
  5. interval: "5m",
  6. },
  7. },
  8. input: {
  9. search: {
  10. request: {
  11. indices: "log-events",
  12. body: {
  13. query: {
  14. match: {
  15. status: "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_hits: {
  31. foreach: "ctx.payload.hits.hits",
  32. max_iterations: 500,
  33. logging: {
  34. text: "Found id {{ctx.payload._id}} with field {{ctx.payload._source.my_field}}",
  35. },
  36. },
  37. },
  38. });
  39. console.log(response);

コンソール

  1. PUT _watcher/watch/log_event_watch
  2. {
  3. "trigger" : {
  4. "schedule" : { "interval" : "5m" }
  5. },
  6. "input" : {
  7. "search" : {
  8. "request" : {
  9. "indices" : "log-events",
  10. "body" : {
  11. "query" : { "match" : { "status" : "error" } }
  12. }
  13. }
  14. }
  15. },
  16. "condition" : {
  17. "compare" : { "ctx.payload.hits.total" : { "gt" : 0 } }
  18. },
  19. "actions" : {
  20. "log_hits" : {
  21. "foreach" : "ctx.payload.hits.hits",
  22. "max_iterations" : 500,
  23. "logging" : {
  24. "text" : "Found id {{ctx.payload._id}} with field {{ctx.payload._source.my_field}}"
  25. }
  26. }
  27. }
  28. }
返された検索ヒットごとにログ出力文が実行されます。