判定和发送报警

发送报警(!)

(! m)

创建一个发送报警的流,流经这个流的事件都会被发到 alarm 产生报警。 接受一个 map 做参数,map 中需要可以指定如下的参数:

Key 类型 意义
:note string 报警标题 [1]
:level int 报警级别 [2]
:event? bool 事件类型?[3]
:expected float 期望的正常值 [4]
:outstanding-tags vector 区分报警的 tags [5]
:groups vector 将报警发送到报警组 [6]
:meta assoc 元信息[#]_
[1]标题对于一个特定的报警是不能变的,不要把报警的数据编码在这里面!
[2]约定 0 级别最高,最小是15,不过一般来说用不到那么多级别。 报警级别影响报警方式。
[3]期望的正常值。 这个值暂时没有用到,但是也最能填上。
[4]可选 ,默认是 false 。事件类型只会发送报警,不会记录和维护状态,无法在 alarm 中看到。
[5]可选 ,默认为事件中所有的 tag。在这里指定的 tag 值的组合如果不一样, 就会被 alarm 当做不同的报警分别追踪
[6]报警组的配置请参考 报警人员和组配置
[7]这里的信息会不加修改直接发送给 alarm,在 alarm 的 API 中可以看到这个信息

样例:

(! {:note "服务器炸了!"
    :level 1
    :event? false
    :expected 0
    :outstanding-tags [:region]
    :groups [:operation :boss]}
    :meta {:graph "http://path.to.graph/graph1"})

注解

! 接受的事件需要将 :state 设置成 :problem 或者 :ok 来表示是有问题还是恢复。

参见下文的 judgejudge-gapped

judge*

(judge* c & children)

设置事件的状态。 c 是接受事件作为参数的函数。 c 返回值为 true 则会将事件的 :state 设置成 :problem ,否则会设置成 :ok

(judge* #(> (:metric %) 1)
  (! ...))

judge

(judge c & children)

参见 judge* ,这里 c 是形如 (> 1.0) 的 form。

(judge (> 1)
  (! ...))

注解

judge (> 1.0) ...) 会被重写成 (judge* #(> (:metric %) 1.0) ...)

judge-gapped*

(judge-gapped* rising falling & children)

设置事件的状态。 rising 是 OK -> PROBLEM 的条件, falling 是 PROBLEM -> OK 的条件

参见 judge*

(judge-gapped* #(> (:metric %) 10) #(< (:metric %) 1)
  (! ...))

judge-gapped

(judge-gapped rising falling & children)

参见 judge-gapped* ,这里 risingfalling 是形如 (> 1.0) 的 form。

(judge-gapped (> 10) (< 1)
  (! ...))

alarm-every

(alarm-every dt unit & children)

用于对报警事件限流,通常接在 发送报警(!) 流前面。 当事件的 :state:problem 时,每 dt 时间向下传递一次。时间的单位由 unit 决定。 当事件的 :state:problem 变成 :ok 时,向下传递一次。 其他时间不放行。

unit 可以是 :sec :secs :second :seconds :min :mins :minute :minutes :hour :hours

(judge (> 1)
  (alarm-every 1 :min
    (! ...)))