Azure容器应用根路径持续收到GET请求返回404(App Insights可见)
我们有一个部署在Azure容器应用中的ASP.NET Core 8 API,接入Azure Application Insights后,发现根路径频繁收到GET请求,请求间隔固定为27秒和3秒。起初以为是探测请求,但已经禁用了所有探测配置;同时API前端的Nginx路由没捕获到这类流量,推测是内部请求。目前没有可见业务影响,但这类请求正在占用App Insights的存储资源。
补充信息
为排查问题,我们实现了根端点并添加请求头日志,代码如下:
app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }); app.MapGet("/", async context => { var request = context.Request; var headers = request.Headers.ToDictionary(h => h.Key, h => h.Value.ToString()); var logger = context.RequestServices.GetRequiredService<ILogger<Program>>(); logger.LogError("Request details: Remote IP: {RemoteIpAddress}, Path: {Path}, Headers: {Headers}", context.Connection.RemoteIpAddress, request.Path, headers); await context.Response.WriteAsync("Root endpoint active"); });
获取到的脱敏请求日志:
Request details: Remote IP: ::ffff:10.***.**.152, Path: /, Headers: [Host, ****-backend-api.whitefield-****.westeurope.azurecontainerapps.io], [x-forwarded-for, 10.***.*.7], [x-envoy-internal, true], [x-request-id, *******-a7e3-427a-*******-*******], [x-envoy-expected-rq-timeout-ms, 1800000], [x-k8se-app-name, *******-backend-api--n76jimp], [x-k8se-app-namespace, k8se-apps], [x-k8se-protocol, http1], [x-k8se-app-kind, web], [x-ms-containerapp-name, *******-backend-api], [x-ms-containerapp-revision-name, *******-backend-api--n76jimp], [x-arr-ssl, true], [x-forwarded-proto, https]
可能原因
Azure容器应用内部组件探测
日志里的x-envoy-internal: true和x-k8se-*系列请求头明确显示,请求来自Azure容器应用底层的Envoy代理或K8s相关内部组件。即便手动禁用了用户配置的探测,平台仍可能存在默认的内部健康检查或组件状态探测逻辑——比如Envoy自身的端点校验、KEDA自动扩缩容的指标采集,或是容器应用控制平面组件定期检查实例状态。自动扩缩容组件的探测请求
如果API配置了基于流量或指标的自动扩缩容,KEDA或Azure容器应用的扩缩容控制器可能会定期发送请求评估实例可用性或负载,这类请求由平台内部发起,不会经过前端Nginx。App Insights通路验证请求
虽不常见,但App Insights的SDK或后端可能发送少量测试请求验证数据通路,不过固定27/3秒的间隔更符合平台内部定时任务的特征。
排查方向
核查容器应用底层配置
- 登录Azure门户,查看容器应用的修订版本详情,确认是否存在平台默认启用的健康探测(部分场景下平台会自动添加,无需手动配置)。
- 检查扩缩容配置,若启用了基于HTTP的扩缩容触发器,确认探测路径是否为根路径
/,且探测间隔是否匹配27/3秒的规律。
过滤App Insights内部请求
既然确认是无业务影响的内部请求,可在App Insights采样规则中添加过滤条件:比如排除来自10.***.*.*段IP的根路径请求,或根据x-envoy-internal: true请求头过滤,减少存储资源占用。查看容器应用日志流
在Azure门户的容器应用页面打开日志流,查看底层Envoy或K8s组件的日志,寻找发起这些请求的相关记录,进一步确认请求来源。验证Nginx日志配置
虽然当前Nginx未捕获到流量,仍需检查Nginx的访问日志配置,排除因配置问题导致日志未记录的可能。排查ASP.NET Core中间件
确认是否存在自定义中间件或第三方组件(如健康检查中间件)内部发起请求,但从日志头来看,这类可能性较低,更偏向平台层请求。
内容的提问来源于stack exchange,提问作者cah1r

