轻量级的监控统计系统AcOss设计与实现

一直以来我们都比较缺乏一个易用的业务粒度的监控统计,故借鉴wechat的idkey系统来做了一个轻量级的AcOss系统。

具备的功能

  • 开发人员可以很方便的添加各种监控项,监控项可分为累加值、设置值、最大值与平局值四种类型
  • 提供后台界面来申请idkey,id与key是两个概念,具体会在下文中给出。
  • 提供后台界面来查看idkey的监控情况,一页展示所有的监控项目,最多128个。
  • 每个监控项可以配置最大与最小阈值,超过阈值可以发送告警信息到负责人,告警可以在配置页面取消
  • 因为是轻量级方案,并没有使用客户端部署agent的方式,而且采取集中往UDP Server发包,为了防止包量过大添加了采样率参数,对于分钟调用量万级别以上的接口强制设置采样率。在监控视图展示的时候会将数据反向放大回去。(项目初期可以使用默认值1,即100%采样)

idkey描述

id可以理解为一级业务,key可以理解为二级业务(细分的监控指标)。如果拿购买服务举例的话,如下图所示:

上报数据

1
2
3
4
5
6
7
8
9
10
11
//1. 用于设置叠加值,如果过一分钟有多个值上报,将叠加这些值
$ret = AcOssHelper::OssAttrInc($id, $key, $value, $sample = 1);

//2. 用于设置设置值,如果一分钟有多个值上报,以最后一次为准
$ret = AcOssHelper::OssAttrSet($id, $key, $value, $sample = 1);

//3. 用于设置最大值,以每分钟的最大值为准
$ret = AcOssHelper::OssAttrSetMax($id, $key, $value, $sample = 1);

//4. 用于设置平均值
$ret = AcOssHelper::OssAttrSetAvg($id, $key, $value, $sample = 1);

调用上述4个接口进行上报,一般用的多的是接口1,其中$id是业务ID申请中获取的id,key为业务Id中监控项的配置ID。