跳转到: 导航, 搜索

Ceilometer/blueprints/alarm-over-time

总结

想法是在 API 部分创建一个新型的告警规则,以及一个新的告警评估器,它会随着时间改变状态并触发告警操作。

将这种告警与其他告警结合使用,将能够覆盖以下用例。

用户故事

  • 我不想在一段时间内接收告警回调。
  • 如果另一个告警处于特定状态,我想每三小时触发一次告警操作。

API v2 扩展建议

{
    name: AlarmOverTime,
    type: time,
    description: Change at ,
    time_rule: { 
        time_spec: "Mon-Fri 00:08",
        duration: 43200
    },
    ...
}

time_spec 格式是指我们需要将状态更改为告警的时间,而 duration(秒)是我们保持告警状态的时间。

评估器行为

上面的告警将会在每个工作日晚上 8 点到第二天早上 8 点(持续 12 小时)将告警状态设置为“告警”。

告警操作会在每次状态改变时被调用。

其他示例

time_rule: { 
    time_spec: "1/3:00",
    duration: 0
}

上面的告警将每 3 小时将告警状态设置为“告警”,持续 0 秒。

实际上,尽可能短的时间,例如:告警的 evaluation_interval,因为告警需要重新评估才能变回“ok”状态。

这种行为允许将这种告警与其他告警结合使用,以便在另一个告警也处于“告警”状态时,每 3 小时触发一些操作。

时间规范格式

time_spec 格式与 systemd 日历格式 相同

一些从 systemd 文档中提取的示例

   Sat,Thu,Mon-Wed,Sat-Sun → Mon-Thu,Sat,Sun *-*-* 00:00:00
     Mon,Sun 12-*-* 2,1:23 → Mon,Sun 2012-*-* 01,02:23:00
                   Wed *-1 → Wed *-*-01 00:00:00
           Wed-Wed,Wed *-1 → Wed *-*-01 00:00:00
                Wed, 17:48 → Wed *-*-* 17:48:00
Wed-Sat,Tue 12-10-15 1:2:3 → Tue-Sat 2012-10-15 01:02:03
               *-*-7 0:0:0 → *-*-07 00:00:00
                     10-15 → *-10-15 00:00:00
       monday *-12-* 17:00 → Mon *-12-* 17:00:00
 Mon,Fri *-*-3,1,2 *:30:45 → Mon,Fri *-*-01,02,03 *:30:45
      12,14,13,12:20,10,30 → *-*-* 12,13,14:10,20,30:00
 mon,fri *-1/2-1,3 *:30:45 → Mon,Fri *-01/2-01,03 *:30:45
            03-05 08:05:40 → *-03-05 08:05:40
                  08:05:40 → *-*-* 08:05:40
                     05:40 → *-*-* 05:40:00
    Sat,Sun 12-05 08:05:40 → Sat,Sun *-12-05 08:05:40
          Sat,Sun 08:05:40 → Sat,Sun *-*-* 08:05:40
          2003-03-05 05:40 → 2003-03-05 05:40:00
                2003-03-05 → 2003-03-05 00:00:00
                     03-05 → *-03-05 00:00:00
                    hourly → *-*-* *:00:00
                     daily → *-*-* 00:00:00
                   monthly → *-*-01 00:00:00
                    weekly → Mon *-*-* 00:00:00
                     *:2/3 → *-*-* *:02/3:00


额外思考

在 ceilometer 中创建一个用于“duration”的 wsme 类型,将时间单位转换为秒会很酷。