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

Serilog OpenTelemetry Sink配置HttpProtobuf协议不生效问题

Serilog OpenTelemetry Sink HttpProtobuf协议配置问题排查

问题现象

配置Serilog OpenTelemetry Sink通过HttpProtobuf协议发送日志至Otel Collector,但日志无法送达。开启Serilog自日志后,控制台输出错误:

Grpc.Core.RpcException: Status(StatusCode="Unknown", Detail="Bad gRPC response. HTTP status code: 405") at Serilog.Core.Sinks.Batching.BatchingSink.LoopAsync()

该错误说明Sink未正确识别HttpProtobuf配置,仍尝试以gRPC协议发送请求。

用户配置代码:

builder.Host.UseSerilog((ctx, serviceProvider, lc) =>
{
    lc = lc.ReadFrom.Configuration(ctx.Configuration)
        .WriteTo.Console();

    var otlpEndpoint = builder.Configuration["OTEL_EXPORTER_OTLP_ENDPOINT"];
    if (!string.IsNullOrWhiteSpace(otlpEndpoint))
    {
        lc.WriteTo.OpenTelemetry(cfg =>
        {
            cfg.Endpoint = $"{otlpEndpoint}/v1/logs";
            cfg.Protocol = OtlpProtocol.HttpProtobuf;         
        });
    }
});

排查与解决方案

1. 检查Serilog.OpenTelemetry包版本

旧版本的Serilog.OpenTelemetry可能存在Protocol配置不生效的问题,确保安装最新稳定版(版本≥1.0.0)。

2. 确认Otel Collector接收器配置

Otel Collector默认仅开启gRPC协议的OTLP接收器(端口4317),需手动添加otlphttp接收器以支持HttpProtobuf协议。修改Collector配置文件(如config.yaml):

receivers:
  otlp:
    endpoint: 0.0.0.0:4317
  otlphttp:
    endpoint: 0.0.0.0:4318

service:
  pipelines:
    logs:
      receivers: [otlp, otlphttp]
      processors: []
      exporters: [your-exporter]

3. 修正配置顺序与优先级

若配置文件(如appsettings.json)中已定义OpenTelemetry Sink配置,会覆盖代码中的设置。调整代码顺序,确保自定义配置不被覆盖:

builder.Host.UseSerilog((ctx, serviceProvider, lc) =>
{
    // 先添加自定义Sink配置
    lc.WriteTo.Console();

    var otlpEndpoint = builder.Configuration["OTEL_EXPORTER_OTLP_ENDPOINT"];
    if (!string.IsNullOrWhiteSpace(otlpEndpoint))
    {
        lc.WriteTo.OpenTelemetry(cfg =>
        {
            cfg.Endpoint = $"{otlpEndpoint}/v1/logs";
            cfg.Protocol = OtlpProtocol.HttpProtobuf;         
        });
    }

    // 最后读取配置文件,补充其他配置
    lc.ReadFrom.Configuration(ctx.Configuration);
});

4. 验证端点地址正确性

确保OTEL_EXPORTER_OTLP_ENDPOINT的值指向Collector的otlphttp端口,格式为http://<collector-host>:4318(而非gRPC的4317端口)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:03:27