ウォッチャーアクションへの条件の追加

ウォッチがトリガーされると、その条件がウォッチアクションを実行するかどうかを決定します。各アクション内でも、アクションごとに条件を追加できます。これらの追加条件により、単一のアラートがそれぞれの条件に応じて異なるアクションを実行できるようになります。以下のウォッチは、入力検索からヒットが見つかった場合には常にメールを送信しますが、検索結果に5件以上のヒットがある場合にのみnotify_pagerアクションをトリガーします。

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. "size": 0,
  14. "query": {
  15. "match": {
  16. "status": "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. "email_administrator": {
  32. "email": {
  33. "to": "[email protected]",
  34. "subject": "Encountered {{ctx.payload.hits.total}} errors",
  35. "body": "Too many error in the system, see attached data",
  36. "attachments": {
  37. "attached_data": {
  38. "data": {
  39. "format": "json"
  40. }
  41. }
  42. },
  43. "priority": "high"
  44. }
  45. },
  46. "notify_pager": {
  47. "condition": {
  48. "compare": {
  49. "ctx.payload.hits.total": {
  50. "gt": 5
  51. }
  52. }
  53. },
  54. "webhook": {
  55. "method": "POST",
  56. "host": "pager.service.domain",
  57. "port": 1234,
  58. "path": "/{{watch_id}}",
  59. "body": "Encountered {{ctx.payload.hits.total}} errors"
  60. }
  61. }
  62. },
  63. )
  64. 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. size: 0,
  14. query: {
  15. match: {
  16. status: "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. email_administrator: {
  32. email: {
  33. to: "[email protected]",
  34. subject: "Encountered {{ctx.payload.hits.total}} errors",
  35. body: "Too many error in the system, see attached data",
  36. attachments: {
  37. attached_data: {
  38. data: {
  39. format: "json",
  40. },
  41. },
  42. },
  43. priority: "high",
  44. },
  45. },
  46. notify_pager: {
  47. condition: {
  48. compare: {
  49. "ctx.payload.hits.total": {
  50. gt: 5,
  51. },
  52. },
  53. },
  54. webhook: {
  55. method: "POST",
  56. host: "pager.service.domain",
  57. port: 1234,
  58. path: "/{{watch_id}}",
  59. body: "Encountered {{ctx.payload.hits.total}} errors",
  60. },
  61. },
  62. },
  63. });
  64. 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. "size" : 0,
  12. "query" : { "match" : { "status" : "error" } }
  13. }
  14. }
  15. }
  16. },
  17. "condition" : {
  18. "compare" : { "ctx.payload.hits.total" : { "gt" : 0 } }
  19. },
  20. "actions" : {
  21. "email_administrator" : {
  22. "email" : {
  23. "to" : "[email protected]",
  24. "subject" : "Encountered {{ctx.payload.hits.total}} errors",
  25. "body" : "Too many error in the system, see attached data",
  26. "attachments" : {
  27. "attached_data" : {
  28. "data" : {
  29. "format" : "json"
  30. }
  31. }
  32. },
  33. "priority" : "high"
  34. }
  35. },
  36. "notify_pager" : {
  37. "condition": {
  38. "compare" : { "ctx.payload.hits.total" : { "gt" : 5 } }
  39. },
  40. "webhook" : {
  41. "method" : "POST",
  42. "host" : "pager.service.domain",
  43. "port" : 1234,
  44. "path" : "/{{watch_id}}",
  45. "body" : "Encountered {{ctx.payload.hits.total}} errors"
  46. }
  47. }
  48. }
  49. }
conditionnotify_pagerアクションにのみ適用され、条件が成功したとき(この場合は少なくとも5件のヒット)に実行を制限します。