You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker中OpenTelemetry Collector无法接收HTTP端口4318数据

问题原因分析

1. .NET SDK OTLP Exporter协议不匹配

OpenTelemetry .NET SDK的AddOtlpExporter默认使用gRPC协议发送数据,即便你指定了4318端口(OTLP HTTP的标准端口),SDK仍会尝试用gRPC协议连接Collector的HTTP接收器,导致协议不兼容,数据无法正常投递。

2. Collector接收器监听地址限制

你的Collector配置中,OTLP的gRPC和HTTP接收器均设置为监听localhost:端口:

grpc:
  endpoint: localhost:4317
http:
  endpoint: localhost:4318

在Docker容器环境中,localhost仅指向容器自身的回环接口,这会导致:

  • 同网络下的其他容器(如你的.NET服务容器)无法通过otel-collector:4318访问到Collector的HTTP服务
  • 即便配置了端口映射,主机也无法访问容器内仅绑定localhost的服务
修复方案

步骤1:修改.NET SDK配置,指定HTTP协议

在AddOtlpExporter中显式设置协议为HttpProtobuf,同时补充OTLP HTTP的对应路径:

.WithMetrics(provider =>
{
    provider.AddAspNetCoreInstrumentation()
            .AddHttpClientInstrumentation()
            .AddOtlpExporter(exporter =>
            {
                exporter.Endpoint = new Uri("http://otel-collector:4318/v1/metrics");
                exporter.Protocol = OtlpExportProtocol.HttpProtobuf;
            });
})
.WithTracing(provider =>
{
    provider.AddAspNetCoreInstrumentation()
            .AddHttpClientInstrumentation()
            .AddEntityFrameworkCoreInstrumentation()
            .AddOtlpExporter(exporter =>
            {
                exporter.Endpoint = new Uri("http://otel-collector:4318/v1/traces");
                exporter.Protocol = OtlpExportProtocol.HttpProtobuf;
            });
});

注:OTLP HTTP要求指定具体路径,追踪对应/v1/traces、指标对应/v1/metrics、日志对应/v1/logs,否则Collector会返回404错误。

步骤2:修改Collector配置,监听所有网卡

将OTLP接收器的endpoint改为0.0.0.0:端口,让服务绑定到容器的所有网络接口,允许外部访问:

receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318

步骤3:重启服务

修改配置后,重启Collector和.NET服务容器,验证数据是否能正常通过HTTP发送到Collector。

内容的提问来源于stack exchange,提问作者DZziMD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 07:20:55