如何实现
自定义指标通过将指标的[名称-值]键值对存入JVM的SystemProperties实现。监控代理程序会定时抓取mo@开头的SystemProperty。
1.用户自己实现
如定义所示,自定义指标的指标名称式样为:
mo@指标名称
这里以UAV中的用户访问指标为例:
final String METRIC_24HOURUSERLOGIN = "mo@M24hr_UsrLog";
指标数值初始化为零:
AtomicLong userCount=new AtomicLong(0);
当条件满足时(这里指用户登录),指标数值自增1:
userCount.getAndAdd(1);
然后将指标写入系统配置:
System.getProperties().put(METRIC_24HOURUSERLOGIN , userCount);
如果不再使用自定义指标,从系统配置中删除即可:
System.getProperties().remove(METRIC_24HOURUSERLOGIN );
2.使用UAV提供的工具类
简单监控器是UAV提供的自定义指标简单包装类,使用非常简单:
- 首先获得SimpleMonitor实例:
SimpleMonitor monitor = SimpleMonitor.getMonitor(monitorID);
getMonitor方法会产生一个标识为monitorID(字符串)的单例,可以在程序任何地方通过monitorID获取到相应的SimpleMonitor实例。
- 定义自定义指标常量(可选):
private static final String CUSTOM_MONITOR_Metric="My_Metric";
简单监控器会为自定义指标自动添加"mo@"前缀
- 指标值计数,以下三种方法可用于指标值计数:
monitor.sumValue(CUSTOM_MONITOR_Metric,10);//原子加法
monitor.setValue(CUSTOM_MONITOR_Metric,1); //直接修改值
monitor.increValue(CUSTOM_MONITOR_Metric); //原子加1
- 刷新到SystemProperties:自定义指标值需要刷新到SystemProperties才能被抓取
monitor.flushToSystemProperties(CUSTOM_MONITOR_Metric);
如果flushToSystemProperties指定了一组自定义指标,则只刷新这组指标到SystemProperties
如果flushToSystemProperties的参数为空,则刷新所有指标到SystemProperties
- 如果不再使用自定义指标,删除即可:
monitor.removeMetric(CUSTOM_MONITOR_Metric);
SimpleMonitor 其他方法(可选)
setValueSumBySeconds(String key, Long timeUnit, int lastRecordNumber) 表示为指标key设置一个时间周期为timeUnit,周期数为lastRecordNumber的记录表,在每个周期结束时记录这一周期指标key的周期终值并将指标值归0,并保留lastRecordNumber个周期终值的记录,此记录不会抓取,留存于本地内存。