0
是否可以从弹簧数据mongo db层获取剖析数据?弹簧数据mongo剖析数据
我知道如果我使用这样的东西:http://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/那么我可以从应用程序中获得一定程度的信息。
我也可以自定义编写一个方面来衡量查询和操作。
但是,我正在寻找一些内置的功能。有没有通过JMX或类似的东西?
在此先感谢
是否可以从弹簧数据mongo db层获取剖析数据?弹簧数据mongo剖析数据
我知道如果我使用这样的东西:http://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/那么我可以从应用程序中获得一定程度的信息。
我也可以自定义编写一个方面来衡量查询和操作。
但是,我正在寻找一些内置的功能。有没有通过JMX或类似的东西?
在此先感谢
我搜索周围相当多,又没有找到任何东西,所以我创造了我的机制来跟踪时间和标准来蒙戈。
鉴于我们使用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() {
...
}