Spring 数据 mongo 分析数据
Spring Data mongo profiling data
是否可以从 spring 数据 mongo 数据库层获取分析数据。
我知道如果我使用这样的东西:http://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/ 然后我可以从应用程序中获取一定程度的信息。
我还可以自定义编写一个方面来衡量查询和操作。
但是,我正在寻找一些内置功能。有没有通过 JMX 之类的东西?
提前致谢
我四处搜索了很多,并没有找到任何东西,所以我创建了我的机制来跟踪时间和指标 Mongo。
鉴于我们正在使用 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() {
...
}
是否可以从 spring 数据 mongo 数据库层获取分析数据。
我知道如果我使用这样的东西:http://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/ 然后我可以从应用程序中获取一定程度的信息。
我还可以自定义编写一个方面来衡量查询和操作。
但是,我正在寻找一些内置功能。有没有通过 JMX 之类的东西?
提前致谢
我四处搜索了很多,并没有找到任何东西,所以我创建了我的机制来跟踪时间和指标 Mongo。
鉴于我们正在使用 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() {
...
}