观察者触发器

edit

观察者触发器

edit

每个监视器都必须有一个触发器,用于定义监视器执行过程应何时启动。当您创建监视器时,其触发器会注册到相应的触发引擎中。触发引擎负责评估触发器并在需要时触发监视器。

Watcher 旨在支持不同类型的触发器,但目前仅支持基于时间的 schedule 触发器。

观察者计划触发器

edit

计划 触发器 定义了基于日期和时间开始监视执行的时间。所有时间均以UTC时间指定。

Watcher 使用系统时钟来确定当前时间。为了确保计划在预期时间触发,您应该使用诸如 NTP 的时间服务来同步集群中所有节点的时钟。

请记住,节流周期会影响观察器实际执行的时间。默认的节流周期是五秒(5000毫秒)。如果你配置的计划比节流周期更频繁,节流周期将覆盖计划。例如,如果你将节流周期设置为一分钟(60000毫秒),并将计划设置为每10秒一次,观察器将不会执行超过每分钟一次。有关节流的更多信息,请参阅确认和节流

Watcher 提供了几种不同类型的调度触发器:

观察者每小时计划

edit

一个在每天的每个小时特定分钟触发的schedule。要使用hourly schedule,您需要指定分钟(或分钟),以便调度器在minute属性中开始执行watch。

如果您没有为hourly计划指定minute属性,它将默认为0,并且计划将在每小时的整点触发——12:0013:0014:00,依此类推。

配置每小时一次的计划

edit

要配置一个每小时一次的计划,您可以使用minute属性指定一个单一的时间。

例如,以下 hourly 计划在每小时的第30分钟触发—— 12:30, 13:30, 14:30, …​:

{
  "trigger" : {
    "schedule" : {
      "hourly" : { "minute" : 30 }
    }
  }
}

配置每小时多次的计划

edit

要配置一个在每小时内触发多次的每小时计划,您可以指定一个分钟数组。例如,以下计划每小时每15分钟触发一次——12:0012:1512:3012:451:001:15,……:

{
  "trigger" : {
    "schedule" : {
      "hourly" : { "minute" : [ 0, 15, 30, 45 ] }
    }
  }
}

观察者每日计划

edit

一个每天在特定时间触发的schedule。要使用daily schedule,您需要指定时间(或多个时间),使用at属性来设置调度器开始执行watch的时间。

时间以24小时制表示,格式为HH:mm。您还可以使用保留值midnightnoon分别表示00:0012:00,并且可以使用对象指定时间

如果你没有为daily计划指定at属性,它默认会在每天午夜,即00:00,触发一次。

配置每日计划

edit

要配置一个每天一次的计划,您可以使用at属性指定一个时间。例如,以下daily计划每天在下午5:00触发一次:

{
  "trigger" : {
    "schedule" : {
      "daily" : { "at" : "17:00" }
    }
  }
}

配置每日多次计划

edit

要配置一个每天的计划,该计划在一天中的多个时间触发,您可以指定一个时间数组。例如,以下每天的计划在00:0012:0017:00每天触发。

{
  "trigger" : {
    "schedule" : {
      "daily" : { "at" : [ "midnight", "noon", "17:00" ] }
    }
  }
}

使用对象指定时间

edit

除了使用 HH:mm 字符串语法来指定时间外,您还可以将时间指定为一个具有 hourminute 属性的对象。

例如,以下 daily 计划每天下午5:00触发一次:

{
  "trigger" : {
    "schedule" : {
      "daily" : {
        "at" : {
          "hour" : 17,
          "minute" : 0
        }
      }
    }
  }
}

要使用对象表示法指定多次,您可以将多个小时或分钟指定为数组。例如,以下daily计划在每天的00:0000:3012:0012:3017:0017:30触发:

{
  "trigger" : {
    "schedule" : {
      "daily" : {
        "at" : {
          "hour" : [ 0, 12, 17 ],
          "minute" : [0, 30]
        }
      }
    }
  }
}

观察者周计划

edit

一个在每周特定日期和时间触发的schedule。要使用weekly计划,您需要指定日期和时间(或多个日期和时间),以便使用onat属性启动观察执行。

您可以通过名称、缩写或数字来指定星期几(星期日为一周的第一天):

  • sunday, monday, tuesday, wednesday, thursday, fridaysaturday
  • sun, mon, tue, wed, thu, frisat
  • 1, 2, 3, 4, 5, 67

时间以24小时制表示,格式为HH:mm。您还可以使用保留值midnightnoon分别表示00:0012:00

配置每周计划

edit

要配置一个每周一次的计划,您可以使用on属性指定日期,并使用at属性指定时间。例如,以下weekly计划在每周五下午5:00触发一次:

{
  "trigger" : {
    "schedule" : {
      "weekly" : { "on" : "friday", "at" : "17:00" }
    }
  }
}

您还可以使用daytime属性指定日期和时间, 它们可以与onat互换使用。

配置每周多次的计划

edit

要配置一个每周计划,使其在一周内触发多次,您可以指定一个包含日期和时间值的数组。例如,以下每周计划在每周二下午12:00和每周五下午5:00触发:

{
  "trigger" : {
    "schedule" : {
      "weekly" : [
        { "on" : "tuesday", "at" : "noon" },
        { "on" : "friday", "at" : "17:00" }
      ]
    }
  }
}

或者,您可以在一个对象中指定日期和时间,该对象具有包含值数组的onminute属性。例如,以下weekly计划在每周二和周五的12:00 PM和17:00 PM触发:

{
  "trigger" : {
    "schedule" : {
      "weekly" : {
        "on" : [ "tuesday", "friday" ],
        "at" : [ "noon", "17:00" ]
      }
    }
  }
}

观察者月度计划

edit

一个在每个月的特定日期和时间触发的schedule。要使用monthly计划,您需要指定每月的日期和时间(或多个日期和时间),以便使用onat属性启动观察执行。

您指定月份中的日期为一个介于131之间的数值(包括1和31)。 时间以HH:mm的形式在24小时制中指定。您还可以使用保留值midnightnoon分别表示00:0012:00

配置每月计划

edit

要配置一个每月的计划,您可以使用onat属性指定一个日期和时间。例如,以下monthly计划在每个月的10号中午触发:

{
  "trigger" : {
    "schedule" : {
      "monthly" : { "on" : 10, "at" : "noon" }
    }
  }
}

您还可以使用daytime属性指定日期和时间,它们可以与onat互换使用。

配置每月多次的计划

edit

要配置一个每月的计划,使其每月触发多次,您可以指定一个日期和时间值的数组。例如,以下每月计划在每个月的10号中午12:00和20号下午5:00触发:

{
  "trigger" : {
    "schedule" : {
      "monthly" : [
        { "on" : 10, "at" : "noon" },
        { "on" : 20, "at" : "17:00" }
      ]
    }
  }
}

或者,您可以在一个对象中指定日期和时间,该对象具有包含值数组的onat属性。例如,以下monthly计划在每个月的10号和20号的上午12:00和下午12:00触发。

{
  "trigger" : {
    "schedule" : {
      "monthly" : {
        "on" : [ 10, 20 ],
        "at" : [ "midnight", "noon" ]
      }
    }
  }
}

观察者年度计划

edit

一个在每年特定日期和时间触发的schedule。要使用yearly schedule,您需要指定月份、日期和时间(或月份、日期和时间),以便使用inonat属性启动观察执行。

您可以通过名称、缩写或数字来指定月份:

  • 一月, 二月, 三月, 四月, 五月, 六月, 七月, 八月, 九月, 十月, 十一月十二月
  • 一月, 二月, 三月, 四月, 五月, 六月, 七月, 八月, 九月, 十月, 十一月十二月
  • 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1112

您指定月份中的日期为一个介于131之间的数值(包括1和31)。 时间以HH:mm的形式在24小时制中指定。您还可以使用保留值midnightnoon分别表示00:0012:00

配置年度计划

edit

要配置一个每年一次的计划,您可以使用in属性指定月份,使用on属性指定日期,并使用at属性指定时间。例如,以下yearly计划在每年1月10日中午触发一次:

{
  "trigger" : {
    "schedule" : {
      "yearly" : { "in" : "january", "on" : 10, "at" : "noon" }
    }
  }
}

您还可以使用monthdaytime属性指定月份、日期和时间,它们可以与inonat互换使用。

配置每年多次的计划

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" }
      ]
    }
  }
}

或者,您可以在一个对象中指定月份、日期和时间,该对象具有包含值数组的inonminute属性。例如,以下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 表达式

edit

Elasticsearch 提供了一个 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调度,您需要指定一个表示时间间隔的字符串值。如果您省略了时间单位(smhdw),它将默认为秒。

例如,以下 interval 调度每五分钟触发一次:

{
  "trigger" : {
    "schedule" : {
      "interval" : "5m"
    }
  }
}