我们正在使用spring boot并且使用它我们只有一个休息服务,我们从单个客户端接收请求,但是有这么多的调用,因为每12个请求中有1个失败,如何查找如何我的春季启动接收的每秒许多请求,是他们在生产中监控这个指标的任何方式吗?
有人可以帮助我们吗?
答案 0 :(得分:4)
当您使用Spring Boot相关项目时,我建议使用Springs actuator
包。集成此功能就像向项目添加新依赖项一样简单:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
启用此功能后,您可以访问多个新端点,例如/trace
,/metrics
,/trace
,/health
等等。
有关详细信息,请查看官方 Spring 文档(https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html)或 Baeldung http://www.baeldung.com/spring-boot-actuators的以下博客文章。< / p>
答案 1 :(得分:2)
您可能想要使用的是DropWizard's metrics;你可以看到可以做什么here的例子,你甚至可以使用他们的servlet来监控这些指标,它会生成如下内容:
{
"version": "3.0.0",
"gauges": {},
"counters": {
"m01-counter": {
"count": 1
}
},
"histograms": {
"m02-histogram": {
"count": 3,
"max": 100,
"mean": 41.66666666666666,
"min": 5,
"p50": 20,
"p75": 100,
"p95": 100,
"p98": 100,
"p99": 100,
"p999": 100,
"stddev": 41.69998667732268
}
},
"meters": {},
"timers": {}
}
&#34;米&#34;节点甚至可以包含最后1-5-15分钟的平均通话费率。
答案 2 :(得分:1)
答案 3 :(得分:0)
你有不同的方法来跟踪这个,要么使用弹簧执行器,但很多地方存在安全问题,因此你可能无法在生产中使用它,但你可以使用弹簧过滤器或拦截器,如下所示,您可以拦截请求并在处理之后,您可以检查是否有任何异常并正确处理它。
@Configuration
public class MyConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors (InterceptorRegistry registry) {
registry.addInterceptor(new TestInterceptor());
}
}
您的拦截器如下所示,您可以计算用户数或检查任何异常并适当处理
public class TestInterceptor implements HandlerInterceptor {
AtomicInteger numOfUsers = new AtomicInteger();
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
HandlerMethod handlerMethod = (HandlerMethod) handler;
// do something
return super.preHandle(httpServletRequest, httpServletResponse, handler);
}
@Override
public void postHandle( HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("---method executed---");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) throws Exception {
System.out.println("---Request Completed---");
// if you have exception thrown then check it here and do something
System.out.println(numOfUsers.getAndIncrement());
}