我有一个脚本,它在EC2 envery分钟内运行一个cron作业,它在cloudwatch中发送日志。我的问题是,它在短时间内发送大量日志,有时会创建一个错误(在调用InvalidSequenceTokenException操作时发生错误( PutLogEvents ))。
我读到,可以一秒发送5个日志。有时候我会寄更多。https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html
我正在使用python类:
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)或创建一个缓冲区,但我不确定它是否是一个好的解决方案。
有人犯了同样的错误?
谢谢你的帮助。
发布于 2020-01-29 13:21:51
试着利用批处理:
最大批处理大小为1,048,576字节,此大小计算为UTF-8中所有事件消息的总和,加上每个日志事件的26字节。
和:
批处理中日志事件的最大数量为10,000。
因此,您可以将进一步的事件添加到logEvents数组中,直到字节大小限制用完或超过10000项为止。发送一批计算为5 req/秒节流限制的单个请求。
https://stackoverflow.com/questions/59946149
复制相似问题