如何在X-Ray服务图中关联同一WebSocket连接ID的两次请求?
在X-Ray服务图中关联WebSocket的/auth和/otp请求流程
要把这两个请求在X-Ray服务图中关联为同一个流程,核心是通过X-Ray追踪上下文传递,让后续的/otp请求继承/auth请求的追踪链路,具体实现步骤如下:
提取并传递/auth请求的追踪ID
当Api Gateway处理/auth请求时,X-Ray会自动生成追踪ID。你可以在处理/auth的Lambda(或启动Step Function的组件)中,通过环境变量AWS_XRAY_TRACE_ID获取当前追踪ID,或者从X-Ray上下文对象中提取。随后将这个追踪ID通过WebSocket回调消息返回给客户端,比如在响应消息里添加traceId字段。客户端携带追踪ID发起/otp请求
客户端收到WebSocket的回调后,把拿到的traceId放到/otp请求的请求头中。推荐使用X-Ray标准头X-Amzn-Trace-Id,这样后续服务端组件能自动识别;如果用自定义头,后续需要在服务端手动处理关联逻辑。在/otp请求流程中关联追踪上下文
- 若使用标准头
X-Amzn-Trace-Id:Api Gateway和Lambda会自动识别该头,将/otp请求的追踪链路直接关联到/auth请求的原有追踪流程中,X-Ray服务图会自动把这两个请求归为同一个追踪会话。 - 若使用自定义头:在处理/otp的Lambda中,需要手动初始化子追踪并关联父追踪ID。以Python为例,借助
aws-xray-sdk实现的代码示例如下:from aws_xray_sdk.core import xray_recorder def lambda_handler(event, context): # 从自定义请求头中获取/auth请求的追踪ID parent_trace_id = event['headers']['X-Custom-Trace-Id'] # 启动关联父追踪的子段 xray_recorder.begin_segment( name='OTP-Handler', trace_id=parent_trace_id ) # 执行业务逻辑:发送SendTaskSuccessRequest恢复Step Function # ... xray_recorder.end_segment()
- 若使用标准头
验证Step Function链路关联
当/otp请求触发Lambda调用SendTaskSuccessRequest时,X-Ray会自动将这个操作关联到Step Function的原有追踪上下文(该上下文来自初始的/auth请求),最终在X-Ray服务图中就能看到/auth请求、暂停的Step Function、/otp请求、恢复Step Function的完整关联链路。
内容的提问来源于stack exchange,提问作者JobaDiniz
相关产品推荐
相关产品推荐

