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

如何通过Grafana Alloy将日志属性映射为Loki标签过滤器?

将OpenTelemetry日志属性映射为Grafana Loki标签的Grafana Alloy配置

1. 前置确认:.NET应用的OpenTelemetry配置

确保你的.NET应用已正确配置OpenTelemetry日志导出到Grafana Alloy,以下是关键代码示例(Program.cs):

var builder = WebApplication.CreateBuilder(args);

// 配置OpenTelemetry日志
builder.Logging.AddOpenTelemetry(options =>
{
    // 设置资源属性,包含服务名、环境及自定义属性
    options.SetResourceBuilder(
        ResourceBuilder.CreateDefault()
            .AddService(serviceName: "order-processing-service")
            .AddAttributes(new Dictionary<string, object>
            {
                ["environment"] = builder.Environment.EnvironmentName,
                ["team"] = "payment-team" // 自定义属性示例
            })
    );
    
    // 导出到Grafana Alloy的OTLP gRPC端点
    options.AddOtlpExporter(otlpOptions =>
    {
        otlpOptions.Endpoint = new Uri("http://alloy-server:4317");
        otlpOptions.Protocol = OpenTelemetry.Exporter.OtlpExportProtocol.Grpc;
    });
});

var app = builder.Build();
// ... 其他应用逻辑代码

这段配置确保service.name、environment等属性被附加到日志中,并通过OTLP协议发送到Grafana Alloy。

2. Grafana Alloy核心配置

Alloy需要完成三个核心动作:接收OTLP日志、将OTel属性映射为Loki标签、转发到Loki。以下是完整配置示例:

// 1. 接收OTLP格式的日志(同时监听gRPC和HTTP端口)
otelcol.receiver.otlp "otlp_logs" {
    grpc {
        endpoint = "0.0.0.0:4317"
    }

    http {
        endpoint = "0.0.0.0:4318"
    }
}

// 2. 处理日志:将OTel属性映射为Loki标签
loki.process "map_otel_attrs" {
    forward_to = [loki.write "send_to_loki".receiver]

    // 核心步骤:从OTel日志的attributes字段提取属性作为Loki标签
    stage "attributes" {
        labels = {
            service = "service.name"   // 将OTel的service.name映射为Loki的service标签
            env     = "environment"    // 将OTel的environment映射为Loki的env标签
            team    = "team"           // 自定义属性映射
        }
    }

    // 提取OTel日志的body作为Loki的日志内容
    stage "extract" {
        source = "body"
        regex  = "(?P<message>.*)"
    }

    // 输出处理后的日志内容
    stage "output" {
        source = "message"
    }
}

// 3. 将处理后的日志推送到Grafana Loki
loki.write "send_to_loki" {
    endpoint {
        url = "http://loki-server:3100/loki/api/v1/push"
    }
}

// 构建OTel日志处理管道
otelcol.exporter.loki "otel_to_loki" {
    forward_to = [loki.process "map_otel_attrs".receiver]
}

otelcol.service "default" {
    pipelines {
        logs {
            receivers = [otelcol.receiver.otlp "otlp_logs"]
            exporters = [otelcol.exporter.loki "otel_to_loki"]
        }
    }
}

配置关键说明

  • otelcol.receiver.otlp:监听标准OTLP端口,与.NET应用的导出端点匹配,确保能接收日志数据。
  • loki.process的stage "attributes":这是属性映射的核心,通过labels字典定义「Loki目标标签名」与「OTel源属性名」的对应关系,直接引用OTel日志中attributes字段下的属性即可。
  • loki.write:指定Loki的推送API地址,需保证Alloy网络可达Loki实例。
  • otelcol.service:将接收器、处理器、导出器串联成完整的日志处理流水线。

3. 验证配置效果

  1. 启动Grafana Alloy并加载上述配置。
  2. 运行.NET应用生成日志。
  3. 登录Grafana进入Explore页面,选择Loki数据源:
    • 使用标签过滤器查询,例如{service="order-processing-service", env="Production"}
    • 确认日志已携带映射后的标签,且日志内容完整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:32:13