如何排查AWS上ECS服务空闲时的频繁未知HTTP请求?
排查思路
扩展Metrics Insight查询维度,暴露请求细节
修改查询语句,加入uri和method标签,直接定位请求路径:SELECT SUM("http.server.requests.count") FROM test GROUP BY status, uri, method这样能直观看到哪些路径产生了请求,排除业务接口后,剩下的就是未知请求的来源(比如Actuator端点、静态资源等)。
查看容器原始请求日志
配置Spring Boot日志(如Logback)输出完整请求信息,包括请求路径、来源IP、请求头。比如在logback-spring.xml里添加:<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %n Request: %request{method}, %request{uri}, Remote IP: %request{remoteHost} </pattern> </encoder> </appender>或者开启Web层调试日志:
logging.level.org.springframework.web=DEBUG,直接查看所有请求的处理过程。核查AWS服务层面的额外探测
- 检查负载均衡(ALB/NLB)目标组的健康检查配置:是否存在多个健康检查路径,或者检查频率比预期更高?
- 确认ECS服务发现(如Cloud Map)是否有额外的服务探测请求;
- 排查CloudWatch Agent、Systems Manager等AWS组件是否在向容器端口发起请求。
排查Spring Boot内部及依赖的自动请求
- 检查是否开启了Spring Cloud组件的内部心跳(如Eureka客户端向注册中心的心跳、Config Server配置拉取),这些请求会被
http.server.requests统计; - 确认是否有静态资源请求(如
/favicon.ico),Spring Boot默认会处理这类请求,且会被纳入指标统计; - 检查是否误开启了Spring Boot DevTools(生产环境应禁用),其自动重启、LiveReload可能产生额外请求。
- 检查是否开启了Spring Cloud组件的内部心跳(如Eureka客户端向注册中心的心跳、Config Server配置拉取),这些请求会被
容器内抓包直接分析请求来源
登录到ECS容器内部,执行tcpdump命令抓包(假设应用端口为8080):tcpdump -i any port 8080 -A抓取一段时间的数据包,直接查看请求的原始内容(请求行、请求头、来源IP),精准定位请求发起方。
验证自定义Interceptor的覆盖范围
自定义Interceptor仅处理了带有@RequestMapping、@GetMapping等注解的业务方法,但Actuator端点、静态资源请求是通过独立的HandlerMapping处理的,不会被该Interceptor拦截。可以补充拦截所有请求的Interceptor,或者直接访问Actuator的/actuator/metrics/http.server.requests端点,获取所有请求标签的详细统计。
内容的提问来源于stack exchange,提问作者mal
相关产品推荐
相关产品推荐

