Monitor(累计量)监控与告警

Monitor(累计量)监控与告警

[TOC]

程序上报

使用

//充值次数监控
Monitor::add('CHARGE_COUNT');

实现

Redis::incr('MONITOR_CHARGE_COUNT'.date('YmdHi'));

报表

分钟曲线、累计量、昨日曲线、按日叠加、按类型叠加

http://monitor.corp.ucfgroup.com/?key=CHARGE_COUNT

权限问题(TODO):每个人只能查看自己添加的监控。

实现

//今日报表(可考虑做一级文件缓存)
for ($i = 0; $i < $min; $i++) {
    Redis::get('MONITOR_CHARGE_COUNT');
}

//0点导数据至Db
foreach ($monitors as $item)
{
    for ($i = 0; $i < 1440; $i++) {
        $ret = Redis::get(...);
        Db::insert($ret);
    }
}

//昨日报表
Db::select('create_time=...');

告警

当时计数:上一分钟Redis::get('...')一次;
同比波动:上上分钟Redis::get('...'),对比增减幅度;
环比波动:昨日同分钟Db::select()一次,对比增减幅度;
峰值告警:对比config配置值;

性能影响

该方案对线上影响是每个点多一次redis交互;

优化方案(TODO):

  1. 用共享内存 + 定时写Redis的方式,缓解Redis压力,需要每台机器部署Agent;
  2. 写简单的日志,利用日志同步机制收集;日志形式如下:
//时间戳 业务点 增量
1449900092  CHARGE_COUNT 1
1449900092  WITHDRAW_COUNT 1
1449900092  CHARGE_COUNT 1

容灾设计

  1. 异常捕获,Redis挂掉不影响程序执行;
  2. 代码级开关设置,可通过上线关闭;

你可能感兴趣的:(Monitor(累计量)监控与告警)