如何实现

自定义指标通过将指标的[名称-值]键值对存入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个周期终值的记录,此记录不会抓取,留存于本地内存。

results matching ""

    No results matching ""