我们正在我们的环境中实现分布式跟踪,从简单的自动检测开始,使用Open Telemetry。我们的环境主要基于云,在AWS上运行。
我们已经成功地对大多数云服务(ECS、EKS、Lambda等)进行了自动检测,并且看到上下文跟踪从一个服务传递到下一个服务。我们还使用Otel标准自动检测运行在EC2上的Apache和Nginx服务器,并成功地看到跟踪信息被收集,但从Apache到另一个前端或后端服务的调用没有被跟踪上下文绑定在一起。Apache生成自己的跟踪ID,它调用的系统也生成自己的跟踪ID,这样链接就丢失了。
有没有人能让这个工作,有没有样品,你可以分享?
非常感谢!
我们尝试使用Otel库以及AWS分布式跟踪库,并尝试了不同的导出器和收集器。跟踪功能可以单独工作,但是当需要将上下文从Apache和/或Nginx传递到其他服务时,跟踪链接就会断开
1条答案
按热度按时间hjzp0vay1#
对于Apache和Nginx,有一些现有的模块可以使用,可能你已经在使用它们了:https://github.com/open-telemetry/opentelemetry-cpp-contrib/tree/main/instrumentation/httpdhttps://github.com/open-telemetry/opentelemetry-cpp-contrib/tree/main/instrumentation/nginx
默认情况下,上下文是不传播的,可能这就是为什么您的跟踪没有绑定在一起。
对于Apache模块,您需要在配置文件中设置
OpenTelemetryPropagators
选项:对于Nginx,您还需要向路由添加显式的
opentelemetry_propagate
指令以启用上下文传播(这里有一个详细的示例):如果你想让Apache和Nginx根据传入的上下文继续跟踪,你需要为Apache额外设置
OpenTelemetryIgnoreInbound
,为Nginx额外设置opentelemetry_trust_incoming_spans
。