OpenFalcon集群监控实现
一、概述
集群监控的本质是一个聚合功能,把整个集群的机器(体现为某个HostGroup下的机器)综合起来看某项监控指标,把这个指标重新push回指定的监控server端,以便查看该指标的历史趋势图,为该指标配置报警策略,以此来达到从单个维度来监控整个集群的效果。Openfalcon集群监控是用aggregator组件配合告警模板实现,aggregator提供整个集群机器的某项指标聚合功能,告警模板配置该项指标的告警策略。
二、实现原理
用户要在某个HostGroup下去添加集群聚合规则,这个规则涵盖的机器是当前这个HostGroup下的机器。整个集群的监控指标计算是一个除法,有分子和分母。监控指标是每个机器应该都应该有的counter,每个counter在书写的时候要求用$()包裹起来,多个counter之间支持加减计算,不支持乘法、除法、括号。分子和分母不但支持配置counter,也支持配置纯数字,支持配置“$#”,“$#”表示的是正常查到数据的机器数量,具体详细信息见https://book.open-falcon.org/zh/usage/aggregator.html。
三、实现规则(参见官网说明举例)
在使用aggregator集群聚合监控时,需要进行两个配置: cluster配置和策略配置。下面举两个例子来说明cluster配置实现规则。
举例1:监控整个集群的管理网(eth0)出流量。
单台机器管理网(eth0)出流量监控指标是net.if.out.bytes/iface=eth0
Cluster配置:
分子:
$(net.if.out.bytes/iface=eth0) //拿着HostGroup下的所有机器去query这个counter的最新值,不同机器计算出来counter值要相加
分母:
1
endpoint:
Compute-172-16-30-117 //当前集群下任一个endpoint,即用来查看集群监控数据的server端
metric:
Net.all.outbytes //可以自定义,配置报警的时候用到
tags:
name=allnet.outbytes //可以自定义,配置报警的时候用到
汇报周期略。
举例2:监控整个集群的管理网(eth0)平均丢包量。
单台机器管理网(eth0)丢包量监控指标是net.if.total.dropped/iface=eth0
Cluster配置:
分子:
$(net.if.total.dropped/iface=eth0)
分母:
$#
endpoint:
Compute-172-16-30-117 //当前集群下任一个endpoint,即用来查看集群监控数据的server端
metric:
Net.all.totaldropped //可以自定义,配置报警的时候用到
tags:
name=allnet.totaldropped //可以自定义,配置报警的时候用到
汇报周期略。
举例3:监控整个集群的管理网(eth0)平均丢包率。
单台机器管理网(eth0)丢包量监控指标是net.if.total.dropped/iface=eth0
单台机器管理网(eth0)总包量监控指标是net.if.total.packets/iface=eth0
Cluster配置:
分子:
$(net.if.total.dropped/iface=eth0)
分母:
$(net.if.total.packets/iface=eth0)
endpoint:
Compute-172-16-30-117 //当前集群下任一个endpoint,即用来查看集群监控数据的server端
metric:
Net.dropped.percent //可以自定义,配置报警的时候用到
tags:
name=dropped.percent //可以自定义,配置报警的时候用到
汇报周期略。
上述例中对于分子而言,我们就会拿着HostGroup下的所有机器去query这个counter的最新值,然后把所有值相加(不同机器计算出来的分子要相加),但是有的机器可能查不到数据,$#表示的是正常查到数据的机器数量。整个表达式假设涉及到3个counter,对某个机器而言,必须3个counter都查到数据才被使用,只要有一个counter没有查到数据,那就忽略这个机器。
注意:
分子、分母中至少配置一个counter,不能都配置成纯数字或$#,因为这种配置是没啥意义的。除了配置分子、分母之外,还有很多其他配置,比如endpoint、metric、tags、step等等,这些是为了把数据重新push回监控server的时候用的。监控的数据有好几个字段,缺一不可,我们可以计算出集群监控指标的value和时间戳,但是无法自动填充endpoint、metric、tags、step等字段,所以,仍然要用户手工填写。