ウォッチャースクリプト条件

スクリプトを評価するウォッチ 条件。デフォルトのスクリプト言語は painless です。言語がブール値の評価をサポートしている限り、Elasticsearch がサポートする任意のスクリプト言語を使用できます。mustache および expression 言語はこの条件で使用するには制限が多すぎることに注意してください。詳細については、スクリプティングを参照してください。

スクリプト条件の使用

以下のスニペットは、常に true を返すインライン script 条件を構成します:

Js

  1. "condition" : {
  2. "script" : "return true"
  3. }

この例では、スクリプトを単純な文字列として定義します。この形式は、インラインスクリプトを定義するためのショートカットです。スクリプトの正式な定義は、スクリプトタイプとオプションの言語およびパラメータ値を指定するオブジェクトです。lang 属性が省略された場合、言語は painless にデフォルト設定されます。Elasticsearch は、インラインストアド の2種類のスクリプトをサポートしています。

たとえば、以下のスニペットは、言語を明示的に指定し、単一のスクリプトパラメータ result を定義する inline スクリプトの正式な定義を示しています:

Js

  1. "condition" : {
  2. "script" : {
  3. "source" : "return params.result",
  4. "lang" : "painless",
  5. "params" : {
  6. "result" : true
  7. }
  8. }
  9. }

インラインスクリプト

インラインスクリプトは、条件自体で定義されるスクリプトです。以下のスニペットは、常に true を返すシンプルなペインレススクリプトの正式な構成を示しています。

Js

  1. "condition" : {
  2. "script" : {
  3. "source" : "return true"
  4. }
  5. }

ストアドスクリプト

ストアドスクリプトは、Elasticsearch に 保存された スクリプトを指します。以下のスニペットは、id によってスクリプトを参照する方法を示しています:

Js

  1. "condition" : {
  2. "script" : {
  3. "id" : "my_script"
  4. }
  5. }

インライン スクリプトと同様に、スクリプト言語とパラメータを指定することもできます:

Js

  1. "condition" : {
  2. "script" : {
  3. "id" : "my_script",
  4. "lang" : "javascript",
  5. "params" : { "color" : "red" }
  6. }
  7. }

ウォッチペイロードへのアクセス

スクリプトは、ペイロードデータを含む現在のウォッチ実行コンテキストや、条件定義を通じて渡されたパラメータにアクセスできます。

たとえば、以下のスニペットは、search 入力 を使用し、ヒット数が指定された閾値を超えているかどうかを確認する script 条件を使用するウォッチを定義します:

Js

  1. {
  2. "input" : {
  3. "search" : {
  4. "request": {
  5. "indices" : "log-events",
  6. "body" : {
  7. "size" : 0,
  8. "query" : { "match" : { "status" : "error" } }
  9. }
  10. }
  11. }
  12. },
  13. "condition" : {
  14. "script" : {
  15. "source" : "return ctx.payload.hits.total > params.threshold",
  16. "params" : {
  17. "threshold" : 5
  18. }
  19. }
  20. }
  21. }

Elasticsearch の応答を評価するためにスクリプト条件を使用している場合、応答内のフィールドはもはやそのネイティブデータ型ではないことに注意してください。たとえば、応答内の @timestampDateTime ではなく文字列です。応答 @timestampctx.execution_time と比較するには、@timestamp 文字列を ZonedDateTime に解析する必要があります。たとえば:

Js

  1. java.time.ZonedDateTime.parse(@timestamp)

ウォッチコンテキスト内で以下の変数を参照できます:

名前 説明
ctx.watch_id 現在実行中のウォッチの ID。
ctx.execution_time このウォッチの実行が開始された時間。
ctx.trigger.triggered_time このウォッチがトリガーされた時間。
ctx.trigger.scheduled_time このウォッチがトリガーされる予定だった時間。
ctx.metadata.* ウォッチに関連するメタデータ。
ctx.payload.* ウォッチの入力によって読み込まれたペイロードデータ。