Azure容器应用中OTel Collector Contrib无法接收数据求助
Azure容器应用中OTel Collector Contrib无法接收.NET Core 7 API遥测数据的排查与解决
问题背景
已在Azure容器应用部署OTel Collector Contrib,通过添加args配置解决启动问题后,Collector正常运行并监听4318端口的OTLP HTTP流量,入口已开放外部访问。但.NET Core 7 API的遥测数据无法被该Collector接收,本地Docker运行的Collector则可正常接收。
排查关键点
1. Collector监听地址验证
检查Collector配置文件中的OTLP HTTP接收器配置,确保监听地址是0.0.0.0:4318,而非仅localhost:4318——如果是后者,Collector只会监听容器内部回环地址,外部请求无法到达。
示例正确配置:
receivers: otlp: protocols: http: endpoint: 0.0.0.0:4318
2. Azure容器应用入口规则检查
确认容器应用的入口规则是否正确映射端口:
- 若使用Azure容器应用的默认HTTPS入口,外部访问端口是443,需将内部4318端口与外部443端口绑定,而非直接暴露4318端口。
- 验证入口规则的协议是否为HTTP(匹配OTLP HTTP协议)。
3. .NET Core API导出器配置修正
查看API中的OTLP导出器代码,重点检查Endpoint配置:
- 错误示例(直接用4318端口):
options.Endpoint = new Uri("http://your-container-app-url:4318/v1/traces");
- 正确示例(使用Azure容器应用的HTTPS默认端口,无需指定4318):
options.Endpoint = new Uri("https://your-container-app-url.azurecontainerapps.io/v1/traces");
同时确认OtlpExportProtocol设置为HttpProtobuf,与Collector的接收器协议匹配。
4. 网络连通性验证
在API所在环境测试与Azure容器应用公网地址的连通性,可使用curl命令测试:
curl -X POST https://your-container-app-url.azurecontainerapps.io/v1/traces -H "Content-Type: application/x-protobuf"
若返回405或其他非连接错误,说明网络连通;若超时则需排查网络策略或防火墙规则。
最终解决方案
修正.NET Core API的OTLP导出器Endpoint地址,将直接指定4318端口的HTTP地址改为Azure容器应用的HTTPS公网地址(默认443端口),同时确保Collector的接收器监听0.0.0.0:4318,最终遥测数据成功被Azure容器应用中的Collector接收。
内容的提问来源于stack exchange,提问作者dickiebow
相关产品推荐
相关产品推荐

