如何对 Cloudwatch 日志中的 InvalidSequenceToken 错误进行问题排查?

上次更新日期:2022 年 3 月 24 日

当我使用 CloudWatch 代理向 Amazon CloudWatch 发送日志时,我在日志文件中收到 InvalidSequenceToken 错误。如何排查并解决此错误?

简短描述

CloudWatch 代理使用 PutLogEvents API 向 CloudWatch 发布消息。此 API 为每个连续的 PutLogEvents 调用使用序列令牌,并且每个日志流都有一个与之关联的序列令牌。当 CloudWatch 代理发出 PutLogEvents 调用时,将提供序列令牌(除非写入新创建的日志流)。作为响应,CloudWatch 将下一个预期的序列令牌返回给该源。返回的序列令牌需要用于下一个推送的日志事件。

如果 CloudWatch 收到的事件带有日志系统不期望的序列令牌,它会返回 InvalidSequenceToken 错误及其预期的序列令牌。如果需要,您可以使用 DescribeLogStreams API 调用来获取更新的令牌。

在以下情况下会出现 InvalidSequenceToken 错误:

  • 您最近安装或重新启动了 CloudWatch 代理服务
  • 多个源正在向同一个流发送日志

解决方法

CloudWatch 代理重新启动后出现 InvalidSequenceToken 错误

CloudWatch 代理重新启动后,您可能会看到此错误。当 CloudWatch 代理服务刚刚启动或重新启动时,首次尝试推送日志将失败。这是因为 CloudWatch 日志中已存在日志流而发生的预期行为。因此,CloudWatch 代理不知道要使用哪个序列令牌。由于 CloudWatch 代理具有内置的重试机制,因此它会选取正确的序列令牌,然后使用它再次推送日志。

当多个源将日志发送到同一个日志流时出现 InvalidSequenceToken 错误

如果您有多个实例将日志发送到同一个日志流,则会收到 InvalidSequenceToken 错误。同样,如果您在同一个实例中有多个日志文件将日志发送到同一个日志流,则会收到错误。发生这种情况是因为在 PutLogEvents 调用中发送的序列令牌与流预期的令牌不匹配。

解决 InvalidSequenceToken 错误的问题

查看代理配置文件,并确保不会将来自多个源的日志发送到同一个日志流。不支持配置为多个日志源将数据发送到单个日志流。更新代理配置文件,为每个源使用唯一的日志流名称。然后,使用 fetch-config 命令重新启动代理服务


这篇文章对您有帮助吗?


您是否需要账单或技术支持?