Watcher 시작하기edit

Elasticsearch 및 Kibana에 X-Pack을 설치할 때 Watcher가 자동으로 활성화됩니다.

워치에서 알림을 보내도록 설정하려면 다음을 수행합니다.

워치 예약 및 입력 정의edit

워치 schedule은 워치가 실행되는 빈도를 제어합니다. 워치 input은 평가하려는 데이터를 받습니다.

정기적으로 로그 데이터를 검색하고 그 결과를 워치에 로드하기 위해 interval 일정과 search 입력을 사용할 수 있습니다. 예를 들어 다음 워치는 10초마다 logs 색인에 오류가 있는지 검색합니다.

PUT _xpack/watcher/watch/log_error_watch
{
  "trigger" : {
    "schedule" : { "interval" : "10s" } 
  },
  "input" : {
    "search" : {
      "request" : {
        "indices" : [ "logs" ],
        "body" : {
          "query" : {
            "match" : { "message": "error" }
          }
        }
      }
    }
  }
}

일반적으로 실행 빈도를 낮춰 일정을 구성합니다. 이 예에서는 간격을 10초로 설정하므로 워치가 실행되는 것을 쉽게 확인할 수 있습니다. 이 워치는 실행 빈도가 높으므로 테스트를 마치면 워치를 삭제 해야 합니다.

이 워치가 10초마다 실행되고 있음을 워치 기록에서 확인할 수 있습니다. 그러나 검색에서 어떤 결과도 반환하지 않으므로 워치 페이로드에 아무것도 로드되지 않은 것입니다.

예를 들어 다음 요청은 워치 기록에서 마지막 10회의 워치 실행(워치 레코드)을 가져옵니다.

GET .watcher-history*/_search?pretty
{
  "sort" : [
    { "result.execution_time" : "desc" }
  ]
}

조건 추가edit

condition은 워치에 로드한 데이터를 평가하고 작업이 필요한지 여부를 결정합니다. 워치에 로그 오류를 로드했으므로 오류 유무를 확인하는 조건을 정의할 수 있습니다.

예를 들어 다음 비교 조건은 검색 입력에서 적중 항목을 반환했는지 여부만 확인합니다.

PUT _xpack/watcher/watch/log_error_watch
{
  "trigger" : { "schedule" : { "interval" : "10s" }},
  "input" : {
    "search" : {
      "request" : {
        "indices" : [ "logs" ],
        "body" : {
          "query" : {
            "match" : { "message": "error" }
          }
        }
      }
    }
  },
  "condition" : {
    "compare" : { "ctx.payload.hits.total" : { "gt" : 0 }} 
  }
}

compare 조건을 사용하면 실행 컨텍스트에서 손쉽게 값을 비교할 수 있습니다.

이 비교 조건을 평가한 결과가 true`가 되려면 `logs 색인에 오류를 포함하는 이벤트를 추가해야 합니다. 예를 들어 다음 요청은 logs 색인에 404 오류를 추가합니다.

POST logs/event
{
    "timestamp" : "2015-05-17T18:12:07.613Z",
    "request" : "GET index.html",
    "status_code" : 404,
    "message" : "Error: File not found"
}

이벤트를 추가한 다음 워치를 실행하면 그 조건의 평가 결과는 `true`가 됩니다. 워치가 실행될 때마다 조건 결과가 `watch_record`의 일부로 기록되므로 워치 기록을 검색하여 조건 충족 여부를 확인할 수 있습니다.

GET .watcher-history*/_search?pretty
{
  "query" : {
    "bool" : {
      "must" : [
        { "match" : { "result.condition.met" : true }},
        { "range" : { "result.execution_time" : { "from" : "now-10s" }}}
      ]
    }
  }
}

작업 구성edit

워치 기록에 워치 레코드를 저장하면 유용하지만, Watcher의 진가는 워치 조건 충족 시 뭔가를 수행할 수 있다는 데 있습니다. 워치의 actions은 워치 조건의 평가 결과가 `true`일 때 해야 할 일을 정의합니다. 이메일을 보내고 서드파티 웹후크를 호출하고 Elasticsearch 색인에 문서를 저장하거나 표준 Elasticsearch 로그 파일에 메시지를 로깅할 수 있습니다.

예를 들어 다음 작업은 오류 탐지 시 Elasticsearch 로그에 메시지를 기록합니다.

PUT _xpack/watcher/watch/log_error_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"
      }
    }
  }
}

워치 삭제edit

`log_error_watch`는 10초마다 실행하도록 구성되었으므로 테스트를 완료하면 삭제해야 합니다. 그렇지 않으면 이 샘플 워치로 인한 노이즈 때문에 워치 기록 및 로그 파일에서 벌어지는 다른 상황을 확인하기 어렵습니다.

워치를 제거하려면 DELETE watch API를 사용합니다.

DELETE _xpack/watcher/watch/log_error_watch

필요한 보안 권한edit

Watcher를 사용하려면 사용자에게 다음 보안 권한이 있어야 합니다.

  • 클러스터 관리 권한. 사용자가 Watcher API에 액세스할 수 있게 합니다.
  • .watch* 색인에 대한 색인 읽기 권한. 사용자가 .watches 및 .watcher-history-* 색인을 읽을 수 있게 합니다.

다음 단계edit

  • 워치의 구성 및 워치 라이프사이클에 대한 자세한 내용은 How Watcher Works의 내용을 참조하십시오.
  • 워치 설정의 예는 Example Watches를 참조하십시오.
  • 맞춤형 워치 작성의 출발점으로 활용할 수 있는 또 다른 샘플 워치는 Elatic Examples 리포지토리의 Example Watches를 참조하십시오.