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

本地Flask应用无法向Docker部署的LGTM Stack发送遥测数据求助

本地未容器化Flask应用无法将遥测数据发送至Docker部署的LGTM Stack OTEL Collector

以下是针对问题的排查步骤与解决方案:

核心问题定位:网络连通性差异

Docker容器的localhost与本地主机的localhost属于不同网络命名空间,你的Flask应用直接用localhost:4418无法访问Docker容器内的OTEL Collector,这是最常见的根因。


排查与修复步骤

1. 验证Docker端口映射是否正确

确保启动grafana/otel-lgtm容器时,已将OTEL Collector的HTTP接收端口(默认4418)映射到本地主机:

# 完整启动命令示例(包含Grafana和Collector端口)
docker run -d -p 3000:3000 -p 4418:4418 -p 4417:4417 grafana/otel-lgtm
  • 4418:OTLP HTTP接收端口(你的代码中使用的协议)
  • 4417:OTLP gRPC接收端口(备用,若后续切换协议需映射)

执行curl http://localhost:4418/v1/traces测试本地是否能连通该端口,若返回405 Method Not Allowed说明端口映射正常,若超时则需检查容器是否正常运行、端口是否被占用。

2. 修改Flask代码中的Collector端点

将代码中所有localhost替换为以下值:

  • Mac/Windows:使用host.docker.internal(Docker官方提供的主机别名)
  • Linux:使用本地主机的局域网IP(如192.168.1.100),或启动容器时添加--network=host参数(让容器共享主机网络,此时可继续用localhost)

修改后的代码示例:

# TRACES
processor = BatchSpanProcessor(OTLPSpanExporter(endpoint="http://host.docker.internal:4418/v1/traces"))

# METRICS
reader = PeriodicExportingMetricReader(OTLPMetricExporter(endpoint="http://host.docker.internal:4418/v1/metrics"))

# LOGS
exporter = OTLPLogExporter(endpoint="http://host.docker.internal:4418/v1/logs")

3. 检查OTEL Collector是否启用HTTP接收

进入容器查看Collector配置,确认已开启OTLP HTTP接收:

# 进入容器
docker exec -it <你的otel-lgtm容器ID> /bin/sh

# 查看默认配置文件(路径可能随镜像版本变化)
cat /etc/otelcol/config.yaml

确保配置中包含类似片段:

receivers:
  otlp:
    protocols:
      http:
        endpoint: 0.0.0.0:4418

4. 排查日志确认数据流向

  • Flask应用日志:检查是否有连接超时、拒绝等报错,确认数据是否尝试发送
  • OTEL Collector日志:查看容器日志是否有接收请求的记录:
    docker logs <你的otel-lgtm容器ID> | grep "otlphttp"
    

5. 消除配置冲突

你同时通过代码和环境变量设置了service.name,建议统一配置方式:要么删除代码中的Resource定义,完全依赖环境变量;要么保持代码配置,移除环境变量中的OTEL_RESOURCE_ATTRIBUTES。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:16:13