首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boto3云监视错误与sequenceToken

boto3云监视错误与sequenceToken
EN

Stack Overflow用户
提问于 2020-01-28 09:57:25
回答 1查看 931关注 0票数 0

我有一个脚本,它在EC2 envery分钟内运行一个cron作业,它在cloudwatch中发送日志。我的问题是,它在短时间内发送大量日志,有时会创建一个错误(在调用InvalidSequenceTokenException操作时发生错误( PutLogEvents ))。

我读到,可以一秒发送5个日志。有时候我会寄更多。https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html

我正在使用python类:

代码语言:javascript
复制
def sequencetoken(self):
    logdescribe = self.client.describe_log_streams(logGroupName=self.group, logStreamNamePrefix=self.stream)
    logStreams = logdescribe['logStreams']
    logStream = logStreams[0]
    sequenceToken = logStream['uploadSequenceToken']
    return sequenceToken


def send_cloudwatch_log_message(self, message=None):
    response = self.client.put_log_events(
        logGroupName=self.group,
        logStreamName=self.stream,
        sequenceToken=self.sequencetoken(),  # IMPORTANT -> if it's your first log you don't need sequencetoken()
        logEvents=[
            {
                'timestamp': self.get_time(),
                'message': 'SID= {} JOB_ID= {} INFO= {} ST={}'.format(self.session, self.job_id, message, self.sequencetoken())
            }
        ]
    )

我认为可能会放置一个time.sleep(0.1)或创建一个缓冲区,但我不确定它是否是一个好的解决方案。

有人犯了同样的错误?

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-29 13:21:51

试着利用批处理:

最大批处理大小为1,048,576字节,此大小计算为UTF-8中所有事件消息的总和,加上每个日志事件的26字节。

和:

批处理中日志事件的最大数量为10,000。

因此,您可以将进一步的事件添加到logEvents数组中,直到字节大小限制用完或超过10000项为止。发送一批计算为5 req/秒节流限制的单个请求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59946149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档