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

如何通过OpenTelemetry使用Serilog直接向Grafana Loki写入日志

问题分析与解决方案

你遇到的核心问题是混淆了Loki原生推送端点和OTLP端点,加上Loki默认未启用OTLP日志接收器,导致Serilog的OpenTelemetry Sink无法正常推送日志。以下是具体修正步骤:

1. 修正Loki的OTLP端点配置

Serilog的OpenTelemetry Sink需要推送至Loki的OTLP日志端点,而非Loki原生的/loki/api/v1/push。正确的HTTP端点应为:

http://localhost:3100/otlp/v1/logs

2. 补充Loki的OTLP接收器配置

默认情况下Loki未启用OTLP接收器,需要在loki-config.yaml中添加以下配置,确保Loki能接收OTLP格式的日志:

receivers:
  otlp:
    protocols:
      http:
        endpoint: 0.0.0.0:3100/otlp/v1/logs

extensions:
  health_check:

service:
  pipelines:
    logs:
      receivers: [otlp]
      processors: []
      exporters: [loki]

同时保留你已有的limits_config:

limits_config:
  allow_structured_metadata: true

3. 修正Serilog OpenTelemetry Sink配置

除了端点修正,还需要确保日志属性正确映射到Loki的标签。修正后的代码示例:

.WriteTo.OpenTelemetry(c =>
{
    c.Endpoint = "http://localhost:3100/otlp/v1/logs";
    c.Protocol = OtlpProtocol.HttpProtobuf;
    // 配置资源属性,会作为Loki的标签
    c.ResourceAttributes = new Dictionary<string, object>()
    {
        { "service.name", "tests" }
    };
    // 可选:将日志事件的级别也映射为Loki标签
    c.AddLabel("level", e => e.Level.ToString());
})

4. 验证依赖包版本

确保你引用了最新版本的Serilog.Sinks.OpenTelemetry和OpenTelemetry.Exporter.OpenTelemetryProtocol,避免版本兼容问题。

完成以上配置后,重启Loki和你的应用,即可通过OpenTelemetry实现Serilog直接向Loki写入日志。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:52:41