Spring Boot 3用opentelemetry-javaagent 1.32.0,Grafana无数据显示
一、Collector连接错误原因分析
错误日志提示transport: http2Server.HandleStreams received bogus greeting from client: "POST /api/v2/spans HTTP/",核心原因是客户端通过HTTP/1.x协议向gRPC端口(4317)发送请求,而gRPC基于HTTP/2协议,无法兼容HTTP/1.x请求格式。
排查方向:
- 检查是否有其他服务或测试工具误将HTTP请求发送到4317端口
- 确认Spring Boot应用的OTEL配置:你已设置
OTEL_EXPORTER_OTLP_PROTOCOL=grpc,需确保没有细分协议变量(如OTEL_EXPORTER_OTLP_TRACES_PROTOCOL)被覆盖为http
二、Grafana无数据问题排查
1. 指标链路(Prometheus)问题
- Prometheus未采集Collector指标:当前Prometheus配置仅采集自身指标,需在
prometheus.yml的scrape_configs中添加Collector采集任务:
- job_name: 'otel-collector' static_configs: - targets: ['otel-collector:8889']
- 验证指标到达Collector:访问
http://localhost:8889/metrics,查看是否存在Spring Boot应用的指标(如http_server_requests_duration_seconds) - 验证Prometheus采集状态:在Prometheus UI(
http://localhost:9090)搜索指标名称,确认是否成功采集
2. 追踪链路(Tempo)问题
- 检查Collector到Tempo的连通性:在Collector容器内执行
curl tempo:4317,确认网络是否通畅 - 验证追踪数据到达Tempo:从应用的
OtlpJsonLoggingSpanExporter输出中获取trace ID,在Tempo UI(http://localhost:3200)搜索该ID - 查看Collector日志:检查debug日志中是否有发送追踪数据到Tempo的成功/失败记录
3. 日志链路(Loki)问题
- 检查Collector到Loki的连通性:在Collector容器内执行
curl http://loki:3100/loki/api/v1/push,确认返回正常 - 验证日志到达Loki:在Grafana Explore选择Loki数据源,执行查询
{service_name="ingest"}查看日志 - 完善日志管道配置:当前日志管道未添加
batch处理器,建议添加以减少请求频率:
logs: receivers: [otlp] processors: [batch] exporters: [loki, logging]
4. 应用端配置问题
- 修正OTEL_EXPORTER_OTLP_ENDPOINT:若应用在本地、Collector在Docker容器中,需将
localhost替换为Docker主机IP(如http://192.168.x.x:4317) - 确认OTLP payload格式:检查
OtlpJsonLogging*Exporter输出的JSON payload是否符合OTLP规范,包含正确的资源属性
三、额外优化建议
- 统一应用与Collector的OTLP协议,避免混合协议导致兼容性问题
- 启用Collector的zpages扩展:访问
http://localhost:55679/debug/tracez查看追踪管道状态,http://localhost:55679/debug/metricz查看指标管道状态,辅助定位数据流转问题 - 生产环境可将Collector日志级别从debug调整为info,减少日志量
内容的提问来源于stack exchange,提问作者B Randall
相关产品推荐
相关产品推荐

