如何将EventBridge触发的下游服务纳入X-ray服务地图?
要让X-Ray服务地图完整展示你期望的Step Function => EventBridge => Step Function => ... => IoT Core流程,需按以下步骤配置:
1. 为EventBridge规则启用X-Ray追踪
EventBridge本身支持X-Ray追踪,但默认未开启。创建或编辑触发下游Step Functions/IoT Core的EventBridge规则时,务必勾选启用X-Ray追踪选项。这样EventBridge会生成独立的追踪段,自动衔接上游Step Function和下游目标服务的追踪链路。
2. 确保Step Functions传递追踪上下文到EventBridge
在调用EventBridge的Step Function任务中,需将当前执行的X-Ray追踪ID传递到事件内容里,让下游服务能延续追踪链路。可以通过Step Functions的参数配置实现:
"Parameters": { "Entries": [ { "Source": "your-source", "DetailType": "your-detail-type", "Detail": { "TraceId": "$$.Execution.TraceId", // 其他自定义事件内容 }, "EventBusName": "your-event-bus" } ] }
这里$$.Execution.TraceId是Step Functions的内置变量,用于获取当前执行的X-Ray追踪ID。
3. 配置下游Step Functions接收并延续追踪
当下游Step Functions被EventBridge触发时,需要确保追踪链路能延续:
- 确认下游Step Functions已启用X-Ray追踪(在执行配置中开启“启用X-Ray追踪”选项)。
- 若通过EventBridge直接触发Step Functions执行,只要EventBridge规则已启用X-Ray,会自动传递追踪上下文;如果是自定义触发逻辑,需从EventBridge事件的
Detail字段取出TraceId,作为执行的追踪上下文传入。
4. 为IoT Core配置X-Ray集成
要让IoT Core出现在X-Ray服务地图中:
- 确保EventBridge触发IoT Core动作(如Publish)所用的角色,具备X-Ray相关权限:
xray:PutTraceSegments、xray:PutTelemetryRecords等。 - 在IoT控制台的全局设置中开启“X-Ray追踪”选项,或通过API完成配置。
5. 验证所有服务的X-Ray权限
所有涉及的服务角色(Step Functions执行角色、EventBridge规则执行角色、IoT Core角色)都需要添加以下权限策略:
{ "Effect": "Allow", "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords", "xray:GetSamplingRules", "xray:GetSamplingTargets", "xray:GetSamplingStatisticSummaries" ], "Resource": "*" }
6. 检查X-Ray采样规则
默认采样规则可能过滤部分请求,导致链路不完整。测试阶段可创建自定义采样规则,针对Step Functions和EventBridge设置100%采样率:
- 采样规则的“服务名称”分别设置为
states.amazonaws.com(Step Functions)和events.amazonaws.com(EventBridge)。 - 将采样率设为1.0(即100%),确保所有链路都被追踪记录。
关于HTTP API的补充
你提到的情况属实:API Gateway HTTP API(v2)目前不支持X-Ray集成。如果要将API纳入追踪链路,可替换为REST API(v1),或在HTTP API后添加Lambda函数——Lambda默认支持X-Ray,会自动将追踪ID传递给后续的Step Functions。
内容的提问来源于stack exchange,提问作者YulePale

