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

Serilog对接OpenTelemetry抛出Grpc.Core.RpcException问题求助

排查Serilog + OpenTelemetry 向Jaeger发送日志失败的问题

错误核心原因

  • 报错unknown service opentelemetry.proto.collector.logs.v1.LogsService:Jaeger默认的OTLP接收器未启用OpenTelemetry Logs服务协议支持,它默认仅接收Traces(追踪)数据,没有提供Logs(日志)的处理端点。
  • 后续的404错误是Serilog尝试向Jaeger发送日志请求,但目标端点不存在导致的。

可行解决方案

方案1:将Serilog日志作为OpenTelemetry Span事件发送(推荐)

Jaeger核心定位是追踪系统,更适配接收关联到Span的事件数据。修改Serilog配置,把日志绑定到Active Span或作为Span事件发送:

Log.Logger = new LoggerConfiguration()
    .Enrich.FromLogContext()
    .WriteTo.OpenTelemetry(options =>
    {
        options.Endpoint = "http://localhost:4317";
        options.ResourceAttributes = new Dictionary<string, object>
        {
            { "service.name", "your-service-name" }
        };
        // 指定发送Trace信号,将日志转为Span事件
        options.IncludedSignalTypes = new[] { OpenTelemetry.Trace.TraceSignal.Name };
    })
    .CreateLogger();

方案2:启用Jaeger的Logs接收功能

若需发送独立日志到Jaeger,需修改Docker启动命令,开启OTLP Logs接收器(Jaeger v1.35+支持该特性,属于实验性功能):

docker run -d --name jaeger \
  -e COLLECTOR_OTLP_ENABLED=true \
  -e COLLECTOR_OTLP_LOGS_ENABLED=true \
  -p 4317:4317 \
  -p 16686:16686 \
  jaegertracing/all-in-one:latest

方案3:通过OpenTelemetry Collector中转(更灵活)

若需统一处理日志、追踪、指标,建议部署OpenTelemetry Collector作为中转:

  1. 配置Collector接收OTLP Logs数据,再转发到Jaeger;
  2. 修改Serilog的Endpoint指向Collector的OTLP端口。

额外验证项

  • 确认Serilog.Sinks.OpenTelemetry NuGet包为最新版本,避免版本兼容问题;
  • 检查.NET应用网络权限,确保能访问localhost:4317;
  • 注意:Python代码能成功是因为它发送的是Traces数据,而Jaeger默认支持Traces接收。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:34:52