使用Grafana Agent+OpenTelemetry Collector无法捕获日志的问题排查
问题分析与解决方案
你的日志采集流程出现问题的核心原因有两个:.NET应用直接绕过Grafana Agent发送日志到OTel Collector,以及Grafana Agent未配置OTLP日志接收能力,导致数据流完全不符合你预设的「.NET → Grafana Agent → OTel Collector」路径。
具体问题点拆解
- .NET应用的OTLP导出目标错误:代码里将日志直接发送到了
http://localhost:4318(OTel Collector的端口),完全跳过了Grafana Agent。 - Grafana Agent缺失OTLP日志接收器:当前配置仅开启了文件日志采集(读取
/var/log/*.log),没有监听OTLP协议的日志请求,无法接收.NET应用发送的日志。 - 端口映射缺失(若.NET应用在宿主机运行):Grafana Agent默认未将OTLP端口映射到宿主机,宿主机上的.NET应用无法访问Agent。
分步修复配置
1. 修改.NET应用的Program.cs,将日志发送到Grafana Agent
把OTLP导出端点改为Grafana Agent的地址:
builder.Logging.AddOpenTelemetry(options => { options.IncludeScopes = true; options.IncludeFormattedMessage = true; options.ParseStateValues = true; options.AddOtlpExporter(otlpOptions => { // 若.NET应用在宿主机运行,用localhost;若在Docker monitoring网络,用grafana-agent otlpOptions.Endpoint = new Uri("http://localhost:4318"); }); });
2. 修改grafana-agent.yml,添加OTLP日志接收与转发配置
开启OTLP HTTP接收器,并配置将接收到的日志转发到OTel Collector:
server: log_level: info # 新增OTLP日志接收器配置 logs: otlp: protocols: http: endpoint: 0.0.0.0:4318 # 监听所有网卡的4318端口,接收OTLP HTTP日志 configs: - name: otel-logs positions: filename: /tmp/positions.yaml scrape_configs: # 保留原有文件日志采集(可选) - job_name: file-logs static_configs: - targets: ['localhost'] labels: job: file-logs __path__: /var/log/*.log # 新增OTLP接收日志的处理任务 - job_name: otlp-received-logs otlp: endpoint: localhost:4318 # 与上方OTLP接收器端口一致 clients: - url: http://otel-collector:4318 # 转发到OTel Collector的OTLP HTTP端口
3. 修改docker-compose.yml,映射Grafana Agent的OTLP端口(宿主机应用需配置)
在grafana-agent服务的ports中添加端口映射:
grafana-agent: image: grafana/agent:latest ports: - "12345:12345" - "4318:4318" # 新增OTLP HTTP端口映射,让宿主机应用能访问 volumes: - ./grafana-agent.yaml:/etc/agent.yaml command: - "--config.file=/etc/agent.yaml" networks: - monitoring
4. 验证OTel Collector配置(当前配置无需修改)
你的otel-collector-config.yaml已经正确开启OTLP HTTP接收器,并将日志输出到标准输出,只要日志能到达Collector,就能在控制台看到。
验证流程
- 重启所有Docker服务:
docker-compose down && docker-compose up -d - 启动.NET应用,访问根路径触发日志
- 查看OTel Collector日志:
docker-compose logs -f otel-collector,此时应该能看到"Test Log"的输出 - (可选)查看Grafana Agent日志确认接收情况:
docker-compose logs -f grafana-agent
内容的提问来源于stack exchange,提问作者RonnyRox
相关产品推荐
相关产品推荐

