如何让Spring Boot 3+OpenTelemetry Collector示例正常运行?
问题解答与排查建议
1. 示例使用的数据库
官方该示例默认使用MySQL,你手动启动PostgreSQL的操作与示例配置不匹配,可能导致遥测链路数据不完整,甚至Collector无法正常接收数据。
2. 是否需要使用docker-compose.yml
必须使用示例提供的docker-compose-otel.yml(而非基础版docker-compose.yml)。该配置文件已整合OpenTelemetry Collector、Jaeger(遥测数据可视化工具)、MySQL等依赖服务,手动单独启动数据库会破坏服务间的网络连通性,这也是你执行docker-compose down时提示网络资源占用的原因之一——手动启动的PostgreSQL容器可能仍挂载在该网络上。
3. 能否在浏览器查看遥测数据
可以。示例的docker-compose-otel.yml包含Jaeger服务,默认端口为16686,直接访问http://localhost:16686即可在浏览器中查看链路追踪、指标等遥测数据。
4. 异常排查与修复步骤
针对Collector无法正常接收数据、docker-compose网络占用问题,按以下步骤修复:
- 停止并删除手动启动的PostgreSQL容器:
docker stop <你的PostgreSQL容器ID> docker rm <你的PostgreSQL容器ID> - 强制清理docker-compose关联的网络与残留资源:
docker-compose -f docker-compose-otel.yml down -v --remove-orphans - 重新启动完整的docker-compose服务栈:
docker-compose -f docker-compose-otel.yml up -d - 验证Collector的OTLP/HTTP端点状态:
用curl测试端点是否正常监听:
返回200或405状态码说明端点正常。curl -I http://localhost:4318/v1/traces - 检查Spring PetClinic应用配置:
确保应用配置文件(如application.properties)中,数据库配置指向docker-compose内的MySQL服务(而非手动启动的PostgreSQL),同时OpenTelemetry导出配置正确指向http://localhost:4318。
内容的提问来源于stack exchange,提问作者Kris Swat
相关产品推荐
相关产品推荐

