munin 以及 zabbix 的聚合(aggregate)

这类需求应该是评估监控系统是否合适的一个重要因素了。
munin 虽然具备,不过实现起来并不是很智能,需要人肉书写。以 mongo 的为例,我们需要聚合分布在不同机器上的 instance 上的 shard 的状态。
在 munin.conf 里面 include 一个名叫 mongo 的目录专门用来做聚合。先定义涉及到的 host:
[dc_shard;jaseywang-db9]
    address 192.168.1.43
    use_node_name yes

[dc_shard;jaseywang-db10]
        address 192.168.1.83
        use_node_name yes

[dc_shard;DailyCounter]
        update no

接下来就是定义需要聚合的 item 了,这个需要每个 host 都有对应的 plugin,比如这里叫 mongo_ops_xxx,xxx 是起 REST 端口:
dc_shard.graph_title DailyCounter
dc_shard.graph_category DailyCounter
dc_shard.graph_total total
dc_shard.total.graph no
dc_shard.graph_order insert update delete getmore
dc_shard.insert.label insert
dc_shard.insert.sum \
  jaseywang-db9:mongo_ops_28701.insert \
  jaseywang-db10:mongo_ops_28711.insert \
  jaseywang-db10:mongo_ops_28716.insert
dc_shard.update.label update
dc_shard.update.sum \
  jaseywang-db9:mongo_ops_28701.update \
  jaseywang-db10:mongo_ops_28711.update \
  jaseywang-db10:mongo_ops_28716.update

有点需要注意的是,需要严格遵循其语法,该是句号的使用句号,使用冒号的用冒号。

zabbix 的相对比较简单,既然是需要聚合的,划分到同一个 hostgroup,接着就是用其原生支持的 "Zabbix aggragate" 这个 Type 就好了。建立好了 item,trigger、graph 之类的就都有了,还是很简单的。顺便说下 Cacti,只要熟悉 rrdtool,问题也很好解决。