Monitor(累计量)监控与告警
[TOC]
程序上报
使用
//充值次数监控
Monitor::add('CHARGE_COUNT');
实现
Redis::incr('MONITOR_CHARGE_COUNT'.date('YmdHi'));
报表
分钟曲线、累计量、昨日曲线、按日叠加、按类型叠加
权限问题(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):
- 用共享内存 + 定时写Redis的方式,缓解Redis压力,需要每台机器部署Agent;
- 写简单的日志,利用日志同步机制收集;日志形式如下:
//时间戳 业务点 增量
1449900092 CHARGE_COUNT 1
1449900092 WITHDRAW_COUNT 1
1449900092 CHARGE_COUNT 1
容灾设计
- 异常捕获,Redis挂掉不影响程序执行;
- 代码级开关设置,可通过上线关闭;