判定和发送报警¶
发送报警(!)¶
(! 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"})
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* ,这里 rising
和 falling
是形如 (> 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
(! ...)))