Watcher 脚本条件
编辑Watcher 脚本条件
编辑一个 Watch 条件,用于评估脚本。默认的脚本语言是 painless
。您可以使用 Elasticsearch 支持的任何脚本语言,只要该语言支持将表达式评估为布尔值。请注意,mustache
和 expression
语言过于有限,无法被此条件使用。有关更多信息,请参阅 脚本。
使用脚本条件
编辑以下代码片段配置了一个内联的 script
条件,该条件始终返回 true
"condition" : { "script" : "return true" }
此示例将脚本定义为简单的字符串。此格式实际上是定义 内联 脚本的快捷方式。脚本的正式定义是一个对象,该对象指定脚本类型以及可选的语言和参数值。如果省略 lang
属性,则语言默认为 painless
。Elasticsearch 支持两种类型的脚本,内联 和 存储的。
例如,以下代码片段显示了 inline
脚本的正式定义,该脚本显式指定了语言并定义了单个脚本参数 result
"condition" : { "script" : { "source" : "return params.result", "lang" : "painless", "params" : { "result" : true } } }
内联脚本
编辑内联脚本是在条件本身中定义的脚本。以下代码片段显示了一个简单的 painless 脚本的正式配置,该脚本始终返回 true
。
"condition" : { "script" : { "source" : "return true" } }
存储的脚本
编辑存储的脚本是指 存储在 Elasticsearch 中的脚本。以下代码片段显示了如何通过其 id
引用脚本
"condition" : { "script" : { "id" : "my_script" } }
与 内联 脚本一样,您还可以指定脚本语言和参数
"condition" : { "script" : { "id" : "my_script", "lang" : "javascript", "params" : { "color" : "red" } } }
访问 watch 载荷
编辑脚本可以访问当前的 watch 执行上下文,包括载荷数据以及通过条件定义传入的任何参数。
例如,以下代码片段定义了一个 watch,该 watch 使用 search
输入 并使用 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 的输入加载的载荷数据。 |