观察者触发器
edit观察者触发器
edit每个监视器都必须有一个触发器,用于定义监视器执行过程应何时启动。当您创建监视器时,其触发器会注册到相应的触发引擎中。触发引擎负责评估触发器并在需要时触发监视器。
Watcher 旨在支持不同类型的触发器,但目前仅支持基于时间的
schedule 触发器。
观察者计划触发器
edit计划 触发器 定义了基于日期和时间开始监视执行的时间。所有时间均以UTC时间指定。
Watcher 使用系统时钟来确定当前时间。为了确保计划在预期时间触发,您应该使用诸如 NTP 的时间服务来同步集群中所有节点的时钟。
请记住,节流周期会影响观察器实际执行的时间。默认的节流周期是五秒(5000毫秒)。如果你配置的计划比节流周期更频繁,节流周期将覆盖计划。例如,如果你将节流周期设置为一分钟(60000毫秒),并将计划设置为每10秒一次,观察器将不会执行超过每分钟一次。有关节流的更多信息,请参阅确认和节流。
Watcher 提供了几种不同类型的调度触发器:
观察者每小时计划
edit一个在每天的每个小时特定分钟触发的schedule。要使用hourly schedule,您需要指定分钟(或分钟),以便调度器在minute属性中开始执行watch。
如果您没有为hourly计划指定minute属性,它将默认为0,并且计划将在每小时的整点触发——12:00、13:00、14:00,依此类推。
配置每小时一次的计划
edit要配置一个每小时一次的计划,您可以使用minute属性指定一个单一的时间。
例如,以下 hourly 计划在每小时的第30分钟触发——
12:30, 13:30, 14:30, …:
{
"trigger" : {
"schedule" : {
"hourly" : { "minute" : 30 }
}
}
}
配置每小时多次的计划
edit要配置一个在每小时内触发多次的每小时计划,您可以指定一个分钟数组。例如,以下计划每小时每15分钟触发一次——12:00、12:15、12:30、12:45、1:00、1:15,……:
{
"trigger" : {
"schedule" : {
"hourly" : { "minute" : [ 0, 15, 30, 45 ] }
}
}
}
观察者每日计划
edit一个每天在特定时间触发的schedule。要使用daily schedule,您需要指定时间(或多个时间),使用at属性来设置调度器开始执行watch的时间。
时间以24小时制表示,格式为HH:mm。您还可以使用保留值midnight和noon分别表示00:00和12:00,并且可以使用对象指定时间。
如果你没有为daily计划指定at属性,它默认会在每天午夜,即00:00,触发一次。
配置每日计划
edit要配置一个每天一次的计划,您可以使用at属性指定一个时间。例如,以下daily计划每天在下午5:00触发一次:
{
"trigger" : {
"schedule" : {
"daily" : { "at" : "17:00" }
}
}
}
配置每日多次计划
edit要配置一个每天的计划,该计划在一天中的多个时间触发,您可以指定一个时间数组。例如,以下每天的计划在00:00、12:00和17:00每天触发。
{
"trigger" : {
"schedule" : {
"daily" : { "at" : [ "midnight", "noon", "17:00" ] }
}
}
}
使用对象指定时间
edit除了使用 HH:mm 字符串语法来指定时间外,您还可以将时间指定为一个具有 hour 和 minute 属性的对象。
例如,以下 daily 计划每天下午5:00触发一次:
{
"trigger" : {
"schedule" : {
"daily" : {
"at" : {
"hour" : 17,
"minute" : 0
}
}
}
}
}
要使用对象表示法指定多次,您可以将多个小时或分钟指定为数组。例如,以下daily计划在每天的00:00、00:30、12:00、12:30、17:00和17:30触发:
{
"trigger" : {
"schedule" : {
"daily" : {
"at" : {
"hour" : [ 0, 12, 17 ],
"minute" : [0, 30]
}
}
}
}
}
观察者周计划
edit一个在每周特定日期和时间触发的schedule。要使用weekly计划,您需要指定日期和时间(或多个日期和时间),以便使用on和at属性启动观察执行。
您可以通过名称、缩写或数字来指定星期几(星期日为一周的第一天):
-
sunday,monday,tuesday,wednesday,thursday,friday和saturday -
sun,mon,tue,wed,thu,fri和sat -
1,2,3,4,5,6和7
时间以24小时制表示,格式为HH:mm。您还可以使用保留值midnight和noon分别表示00:00和12:00。
配置每周计划
edit要配置一个每周一次的计划,您可以使用on属性指定日期,并使用at属性指定时间。例如,以下weekly计划在每周五下午5:00触发一次:
{
"trigger" : {
"schedule" : {
"weekly" : { "on" : "friday", "at" : "17:00" }
}
}
}
您还可以使用day和time属性指定日期和时间,
它们可以与on和at互换使用。
配置每周多次的计划
edit要配置一个每周计划,使其在一周内触发多次,您可以指定一个包含日期和时间值的数组。例如,以下每周计划在每周二下午12:00和每周五下午5:00触发:
{
"trigger" : {
"schedule" : {
"weekly" : [
{ "on" : "tuesday", "at" : "noon" },
{ "on" : "friday", "at" : "17:00" }
]
}
}
}
或者,您可以在一个对象中指定日期和时间,该对象具有包含值数组的on和minute属性。例如,以下weekly计划在每周二和周五的12:00 PM和17:00 PM触发:
{
"trigger" : {
"schedule" : {
"weekly" : {
"on" : [ "tuesday", "friday" ],
"at" : [ "noon", "17:00" ]
}
}
}
}
观察者月度计划
edit一个在每个月的特定日期和时间触发的schedule。要使用monthly计划,您需要指定每月的日期和时间(或多个日期和时间),以便使用on和at属性启动观察执行。
您指定月份中的日期为一个介于1和31之间的数值(包括1和31)。
时间以HH:mm的形式在24小时制中指定。您还可以使用保留值midnight和noon分别表示00:00和12:00。
配置每月计划
edit要配置一个每月的计划,您可以使用on和at属性指定一个日期和时间。例如,以下monthly计划在每个月的10号中午触发:
{
"trigger" : {
"schedule" : {
"monthly" : { "on" : 10, "at" : "noon" }
}
}
}
您还可以使用day和time属性指定日期和时间,它们可以与on和at互换使用。
配置每月多次的计划
edit要配置一个每月的计划,使其每月触发多次,您可以指定一个日期和时间值的数组。例如,以下每月计划在每个月的10号中午12:00和20号下午5:00触发:
{
"trigger" : {
"schedule" : {
"monthly" : [
{ "on" : 10, "at" : "noon" },
{ "on" : 20, "at" : "17:00" }
]
}
}
}
或者,您可以在一个对象中指定日期和时间,该对象具有包含值数组的on和at属性。例如,以下monthly计划在每个月的10号和20号的上午12:00和下午12:00触发。
{
"trigger" : {
"schedule" : {
"monthly" : {
"on" : [ 10, 20 ],
"at" : [ "midnight", "noon" ]
}
}
}
}
观察者年度计划
edit一个在每年特定日期和时间触发的schedule。要使用yearly schedule,您需要指定月份、日期和时间(或月份、日期和时间),以便使用in、on和at属性启动观察执行。
您可以通过名称、缩写或数字来指定月份:
-
一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月和十二月 -
一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月和十二月 -
1,2,3,4,5,6,7,8,9,10,11和12
您指定月份中的日期为一个介于1和31之间的数值(包括1和31)。
时间以HH:mm的形式在24小时制中指定。您还可以使用保留值midnight和noon分别表示00:00和12:00。
配置年度计划
edit要配置一个每年一次的计划,您可以使用in属性指定月份,使用on属性指定日期,并使用at属性指定时间。例如,以下yearly计划在每年1月10日中午触发一次:
{
"trigger" : {
"schedule" : {
"yearly" : { "in" : "january", "on" : 10, "at" : "noon" }
}
}
}
您还可以使用month、day和time属性指定月份、日期和时间,它们可以与in、on和at互换使用。
配置每年多次的计划
edit要配置一个每年触发多次的yearly计划,您可以指定月份、日期和时间值的数组。例如,以下yearly计划每年触发两次:1月10日中午和7月20日下午5:00。
{
"trigger" : {
"schedule" : {
"yearly" : [
{ "in" : "january", "on" : 10, "at" : "noon" },
{ "in" : "july", "on" : 20, "at" : "17:00" }
]
}
}
}
或者,您可以在一个对象中指定月份、日期和时间,该对象具有包含值数组的in、on和minute属性。例如,以下yearly计划在1月10日、1月20日、12月10日和12月20日的上午12:00和下午12:00触发。
{
"trigger" : {
"schedule" : {
"yearly" : {
"in" : [ "jan", "dec" ],
"on" : [ 10, 20 ],
"at" : [ "midnight", "noon" ]
}
}
}
}
观察者 cron 计划
edit使用cron表达式定义一个schedule,指定何时执行观察。
虽然cron表达式功能强大,但使用其他调度类型配置定期发生的计划更容易。
如果您必须使用cron调度,请确保使用elasticsearch-croneval进行验证。
配置一次性cron计划
edit要配置一个cron调度,只需将cron表达式指定为字符串值。例如,以下代码片段配置了一个cron调度,每天中午触发:
{
...
"trigger" : {
"schedule" : {
"cron" : "0 0 12 * * ?"
}
}
...
}
配置一个包含多个时间的cron计划
edit要配置一个cron计划,使其多次触发,您可以指定一个cron表达式数组。例如,以下cron计划在工作日每分钟的偶数分钟触发,在周末每分钟的奇数分钟触发:
{
...
"trigger" : {
"schedule" : {
"cron" : [
"0 0/2 * ? * MON-FRI",
"0 1-59/2 * ? * SAT-SUN"
]
}
}
...
}
使用 croneval 验证 cron 表达式
editElasticsearch 提供了一个 elasticsearch-croneval 命令行工具
在 $ES_HOME/bin 目录中,您可以使用它来检查您的 cron 表达式
是否有效并产生预期的结果。
要验证一个cron表达式,将其作为参数传递给elasticsearch-croneval:
bin/elasticsearch-croneval "0 0/1 * * * ?"
观察者间隔调度
edit一个在固定时间间隔触发的schedule。间隔可以设置为秒、分钟、小时、天或周:
-
"Xs"- 每X秒触发一次。例如,"30s"表示每30秒触发一次。 -
"Xm"- 每X分钟触发一次。例如,"5m"表示每5分钟触发一次。 -
"Xh"- 每X小时触发一次。例如,"12h"表示每12小时触发一次。 -
"Xd"- 每X天触发一次。例如,"3d"表示每3天触发一次。 -
"Xw"- 每X周触发一次。例如,"2w"表示每2周触发一次。
如果不指定时间单位,它默认以秒为单位。
间隔值与Elasticsearch中使用的标准时间值不同。您不能以毫秒或纳秒为单位配置间隔。
配置间隔调度
edit要配置一个interval调度,您需要指定一个表示时间间隔的字符串值。如果您省略了时间单位(s、m、h、d或w),它将默认为秒。
例如,以下 interval 调度每五分钟触发一次:
{
"trigger" : {
"schedule" : {
"interval" : "5m"
}
}
}