Monitor(累計量)監(jiān)控與告警
[TOC]
程序上報
使用
//充值次數(shù)監(jiān)控
Monitor::add('CHARGE_COUNT');
實現(xiàn)
Redis::incr('MONITOR_CHARGE_COUNT'.date('YmdHi'));
報表
分鐘曲線、累計量、昨日曲線、按日疊加、按類型疊加
權限問題(TODO):每個人只能查看自己添加的監(jiān)控。
實現(xiàn)
//今日報表(可考慮做一級文件緩存)
for ($i = 0; $i < $min; $i++) {
Redis::get('MONITOR_CHARGE_COUNT');
}
//0點導數(shù)據至Db
foreach ($monitors as $item)
{
for ($i = 0; $i < 1440; $i++) {
$ret = Redis::get(...);
Db::insert($ret);
}
}
//昨日報表
Db::select('create_time=...');
告警
當時計數(shù):上一分鐘Redis::get('...')一次;
同比波動:上上分鐘Redis::get('...'),對比增減幅度;
環(huán)比波動:昨日同分鐘Db::select()一次,對比增減幅度;
峰值告警:對比config配置值;
性能影響
該方案對線上影響是每個點多一次redis交互;
優(yōu)化方案(TODO):
- 用共享內存 + 定時寫Redis的方式,緩解Redis壓力,需要每臺機器部署Agent;
- 寫簡單的日志,利用日志同步機制收集;日志形式如下:
//時間戳 業(yè)務點 增量
1449900092 CHARGE_COUNT 1
1449900092 WITHDRAW_COUNT 1
1449900092 CHARGE_COUNT 1
容災設計
- 異常捕獲,Redis掛掉不影響程序執(zhí)行;
- 代碼級開關設置,可通過上線關閉;