使用OpenTelemetry Collector与.NET SDK采集日志失败排查
.NET OpenTelemetry日志无法被Collector接收的问题排查
核心问题:OTLP Exporter端点路径不完整
你的.NET代码中手动指定了OTLP Exporter的Endpoint为http://localhost:4318,但OTLP HTTP协议下,日志信号的标准接收路径是/v1/logs。当手动设置Endpoint时,OpenTelemetry .NET的Exporter不会自动追加信号专属路径,导致请求发送到错误地址,Collector无法识别处理。
修复方法
修改.NET代码中的OtlpExporter配置,将Endpoint改为包含日志信号路径的完整地址:
.AddOtlpExporter(config => { config.Endpoint = new Uri("http://localhost:4318/v1/logs"); // 追加日志信号专属路径 config.Protocol = OtlpExportProtocol.HttpProtobuf; });
额外排查点
1. Collector接收器配置显式化
虽然0.67.0版本的OTLP接收器默认会监听0.0.0.0:4318,但显式配置端点可避免歧义,确保Collector正确监听目标端口:
receivers: otlp: protocols: http: endpoint: 0.0.0.0:4318 # 明确指定监听地址和端口
2. 包版本兼容性检查
确认你的.NET项目中OpenTelemetry相关包版本与Collector版本(0.67.0)尽量匹配,避免因版本差异导致协议不兼容。需重点核对以下包版本:
OpenTelemetryOpenTelemetry.Exporter.OpenTelemetryProtocolOpenTelemetry.Extensions.Hosting
3. 网络连通性验证
在主机执行以下curl命令,测试Collector的OTLP日志端点是否可达:
curl -X POST http://localhost:4318/v1/logs -H "Content-Type: application/json" -d '{"resourceLogs":[]}'
若Collector正常运行,会返回200 OK,同时你能在Collector的stdout中看到请求日志。
内容的提问来源于stack exchange,提问作者M112358
相关产品推荐
相关产品推荐

