Watcher 脚本条件
编辑Watcher 脚本条件编辑
一个 watch 条件,它会评估一个脚本。默认的脚本语言是 painless
。您可以使用 Elasticsearch 支持的任何脚本语言,只要该语言支持将表达式评估为布尔值。请注意,mustache
和 expression
语言过于有限,无法被此条件使用。有关更多信息,请参见 脚本。
使用脚本条件编辑
以下代码段配置了一个始终返回 true
的内联 script
条件
"condition" : { "script" : "return true" }
此示例将脚本定义为一个简单的字符串。此格式实际上是定义 内联 脚本的快捷方式。脚本的正式定义是一个对象,它指定脚本类型以及可选的语言和参数值。如果省略了 lang
属性,则语言默认为 painless
。Elasticsearch 支持两种类型的脚本,内联 和 存储的。
例如,以下代码段显示了显式指定语言并定义单个脚本参数 result
的 inline
脚本的正式定义
"condition" : { "script" : { "source" : "return params.result", "lang" : "painless", "params" : { "result" : true } } }
内联脚本编辑
内联脚本是在条件本身中定义的脚本。以下代码段显示了始终返回 true
的简单 painless 脚本的正式配置。
"condition" : { "script" : { "source" : "return true" } }
存储的脚本编辑
存储的脚本是指已 存储 在 Elasticsearch 中的脚本。以下代码段显示了如何通过其 id
来引用脚本
"condition" : { "script" : { "id" : "my_script" } }
与 内联 脚本一样,您也可以指定脚本语言和参数
"condition" : { "script" : { "id" : "my_script", "lang" : "javascript", "params" : { "color" : "red" } } }
访问 watch 负载编辑
脚本可以访问当前 watch 执行上下文,包括负载数据,以及通过条件定义传递的任何参数。
例如,以下代码段定义了一个使用 search
输入 的 watch,并使用 script
条件来检查命中次数是否超过指定阈值
{ "input" : { "search" : { "request": { "indices" : "log-events", "body" : { "size" : 0, "query" : { "match" : { "status" : "error" } } } } } }, "condition" : { "script" : { "source" : "return ctx.payload.hits.total > params.threshold", "params" : { "threshold" : 5 } } } }
当您使用脚本条件来评估 Elasticsearch 响应时,请记住响应中的字段不再是其原生数据类型。例如,响应中的 @timestamp
是一个字符串,而不是 DateTime
。要将响应 @timestamp
与 ctx.execution_time
进行比较,您需要将 @timestamp
字符串解析为 ZonedDateTime
。例如
java.time.ZonedDateTime.parse(@timestamp)
您可以在 watch 上下文中引用以下变量
名称 | 描述 |
---|---|
|
当前正在执行的 watch 的 ID。 |
|
此 watch 开始执行的时间。 |
|
此 watch 被触发的時間。 |
|
此 watch 预计被触发的時間。 |
|
与 watch 关联的任何元数据。 |
|
watch 的输入加载的负载数据。 |