AWS StateMachine调用PutLogEvents无报错但CloudWatch日志未显示
时间戳异常
你提供的Timestamp值1396035378988对应2014年4月左右的时间,CloudWatch控制台默认展示最近时段的日志(比如最近1小时)。如果日志时间不在当前查看的时间区间内,就会无法看到。
解决方法:调整控制台的时间范围到对应历史时段,或者将Timestamp设置为当前毫秒级时间戳(比如使用$$.Execution.StartTime或当前Unix时间戳乘以1000)。日志流匹配问题
你指定的LogStreamName是MyStream,但AWS Step Functions的托管日志组(/aws/vendedlogs/states/...)通常自动生成包含执行ID、状态机ID的日志流名称。如果这个MyStream是手动指定的新流,你可能在控制台找错了日志流;如果该流未被StateMachine的日志配置关联,也会导致你在StateMachine的默认日志视图里看不到,需要手动切换到对应日志流查看。序列令牌未正确处理
调用PutLogEvents时,第一次写入新日志流不需要SequenceToken,但后续写入必须携带上一次调用返回的NextSequenceToken。如果未正确传递这个令牌,即使调用无报错,日志也可能无法追加。
第一次调用示例(无需令牌):{ "LogEvents": [ { "Message": "My message", "Timestamp": 1720000000000 } ], "LogGroupName": "/aws/vendedlogs/states/MyStateMachine-wc8i8hnaf-Logs", "LogStreamName": "MyStream" }后续调用必须包含返回的
NextSequenceToken:{ "LogEvents": [ { "Message": "Another message", "Timestamp": 1720000010000 } ], "LogGroupName": "/aws/vendedlogs/states/MyStateMachine-wc8i8hnaf-Logs", "LogStreamName": "MyStream", "SequenceToken": "xxxxxx" }托管日志组的过滤规则
/aws/vendedlogs/states/...是Step Functions的托管日志组,可能默认带有日志过滤规则,只展示StateMachine自动生成的日志,自定义写入的日志被过滤。你可以检查该日志组的订阅过滤器或日志过滤设置,确认是否有规则拦截了自定义日志。
内容的提问来源于stack exchange,提问作者Marc06210

