2015-04-22 66 views

回答

1

我搜索周围相当多,又没有找到任何东西,所以我创造了我的机制来跟踪时间和标准来蒙戈。

鉴于我们使用ELK来收集日志和一些指标数据,我添加了一个注释和一个方面来跟踪时间。我把它放在我想要的与我们的mongo方法连接的度量上。它收集数据并将它们放入日志中,通过Kibana,我可以在每种访问类型中看到负载下的访问Mongo。

这是注释

@Retention(RetentionPolicy.RUNTIME) 
@Target({ElementType.METHOD, ElementType.TYPE}) 
public @interface TimedMethod { 

} 

这是方面:

@Component() 
@Slf4j(topic="com.cisco.services.common.rpil.metrics") 
@Aspect 
public class TimedMethodAspect { 

    @Around("@annotation(com.cisco.services.common.rpil.metrics.TimedMethod) && execution(public * *(..))") 
    public Object time(ProceedingJoinPoint pjp) throws Throwable { 

     long start = System.nanoTime(); 
     String throwableName = null; 

     try { 

      return pjp.proceed(); 

     } catch(Throwable t) { 
      throwableName = t.getClass().getName(); 
      throw t; 
     } finally { 
      long duration = System.nanoTime() - start; 
      if (throwableName != null) { 
       log.info("Timed [{}]: {} nsecs, with exception [{}]", pjp.getSignature().toString(), duration, throwableName); 
      } else { 
       log.info("Timed [{}]: {} nsecs", pjp.getSignature().toString(), duration); 
      } 
     } 
    } 
} 

基本上它是这样工作的:

@TimedMethod 
public Object measureMe() { 
... 
}