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

使用Grafana Agent+OpenTelemetry Collector无法捕获日志的问题排查

问题分析与解决方案

你的日志采集流程出现问题的核心原因有两个:.NET应用直接绕过Grafana Agent发送日志到OTel Collector,以及Grafana Agent未配置OTLP日志接收能力,导致数据流完全不符合你预设的「.NET → Grafana Agent → OTel Collector」路径。

具体问题点拆解

  1. .NET应用的OTLP导出目标错误:代码里将日志直接发送到了http://localhost:4318(OTel Collector的端口),完全跳过了Grafana Agent。
  2. Grafana Agent缺失OTLP日志接收器:当前配置仅开启了文件日志采集(读取/var/log/*.log),没有监听OTLP协议的日志请求,无法接收.NET应用发送的日志。
  3. 端口映射缺失(若.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,就能在控制台看到。


验证流程

  1. 重启所有Docker服务:docker-compose down && docker-compose up -d
  2. 启动.NET应用,访问根路径触发日志
  3. 查看OTel Collector日志:docker-compose logs -f otel-collector,此时应该能看到"Test Log"的输出
  4. (可选)查看Grafana Agent日志确认接收情况:docker-compose logs -f grafana-agent

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:25:03