文章来源于上海零米信息技术有限公司(OpsMind),作者:OpsMind CEO 韩拓。业务咨询可添加微信:pr836733262
背景
随着云原生和高动态服务端的发展,在运维领域,以 Prometheus 为代表的现代时间序列存储正在加速替代以 Zabbix 为代表的传统监控系统。运维领域在享受时间序列技术发展红利的同时,也面临时间序列管理思路上的转变和监控系统实际应用的上一些难点 —— nodata 告警便是其中之一。nodata 告警是传统监控系统的必备功能,但却缺席了几乎所有现代时间序列存储实践,这给运维监控带了诸多缺陷。本文尝试分析其中原因,并给出一些可能的解决方法。
nodata 告警触发器的特殊性与必要性
nodata 告警触发器(Trigger
)与普通告警触发器相比具有原生的特殊性。普通告警触发器的作用是对一组监控指标(Metric
)的过滤,通常是基于数值大小的过滤。
如果存在如下表示的监控数值集合 M {M} M
M = { m 1 , m 2 , . . . , m n } {M={ \left\{ {m\mathop{
{}}\nolimits_{
{1}},m\mathop{
{}}\nolimits_{
{2}},...,m\mathop{
{}}\nolimits_{
{n}}} \right\} }} M={
m1,m2,...,mn}
告警触发器 T g t 100 {T\mathop{
{}}\nolimits_{
{gt100}}} Tgt100 可对集合 M {M} M 中的元素做『大于 100』的过滤
T g t 100 ( M ) = { x ∣ x ∈ M , x > 100 } {T_{
{gt100}}{ \left( {M} \right) }={ \left\{ {x \left| x \in M,x > 100\right. } \right\} }} Tgt100(M)={
x∣x∈M,x>100}
普通告警触发器触发的告警集合 A {A} A 为
A = T g t 100 ( M ) A=T_{gt100} (M) A=Tgt100(M)
某个普通告警触发器作用于某组监控数值后,产生普通告警集合的过程如上文所述。nodata 告警触发器的工作需要引入额外的全集 U {U} U
U = { m 1 , m 2 , . . . , m n ′ } U=\{m_{1},m_{2},...,m_{n^ \prime }\} U={
m1,m2,...,mn′}
nodata 告警触发器 T n o d a t a T_{nodata} Tnodata 对集合 M {M} M 求绝对补集
T n o d a t a ( M ) = { x ∣ x ∈ U , x ∉ M } T_{nodata}(M)=\left\{ x|x\in U,x\notin M \right\} Tnodata(M)={
x∣x∈U,x∈/M}
nodata 告警触发器触发的告警集合 A n o d a t a A_{nodata} Anodata 为
A n o d a t a = T n o d a t a ( M ) = M ˉ A_{nodata}=T_{nodata}(M)=\bar{M} Anodat