最新消息:

使用 Arthas 监控 HttpServletRequest

Arthas niuge678 1422浏览 0评论

最近同事有这样一个需求:

一个微服务即将被下线,但是还有两三个访问量非常少的接口在使用此服务,同事想知道这些访问来自哪里。
可以写一段代码来把来源 IP 打印出来,但是需要发布服务到测试环境,生产环境,十分繁琐。

Arthas能很好的解决这个问题。

分析了一下,这实际上是一个比较通用的功能,写出来供大家参考。
例如:

  1. 根据 URI 过滤请求;
  2. 监听指定 IP 过来的请求;
  3. 打印请求的 Header 信息等。

使用Arthas进行监听,不需要涉及业务代码,只涉及 Spring 框架中的方法,十分便利。

watch org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter invokeHandlerMethod '{params[0].getHeader("x-forwarded-for"),params[0].getHeader("Proxy-Client-IP"),params[0].getHeader("WL-Proxy-Client-IP"),params[0].getRemoteAddr()}'  'params[0].getRequestURI().contains("/cricketuser/inside/get/user/by/client")' -n 5  -x 2

解释一下上面的命令:
params[0].getHeader("x-forwarded-for"), 打印Header中各种信息;
params[0].getHeader("Proxy-Client-IP"),
params[0].getHeader("WL-Proxy-Client-IP"),
params[0].getRemoteAddr() 打印IP地址

'params[0].getRequestURI().contains("/cricketuser/inside/get/user/by/client")' 根据URI过滤;

此方法的原理是:SpringMVC 的请求会通过 RequestMappingHandlerAdapter 执行 invokeHandlerMethod 到达目标接口上进行处理,所以每一个 Http 请求,都会调用此方法。

转载请注明:牛哥678 » 使用 Arthas 监控 HttpServletRequest

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址