如何通过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. 验证配置效果
- 启动Grafana Alloy并加载上述配置。
- 运行.NET应用生成日志。
- 登录Grafana进入Explore页面,选择Loki数据源:
- 使用标签过滤器查询,例如
{service="order-processing-service", env="Production"} - 确认日志已携带映射后的标签,且日志内容完整。
- 使用标签过滤器查询,例如
内容的提问来源于stack exchange,提问作者David Silwal
相关产品推荐
相关产品推荐

