boto3 ошибка в наблюдении за облаком - PullRequest
0 голосов
/ 28 января 2020

У меня есть скрипт, который запускается в EC2 каждую минуту с заданием 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) или создать буфер, но Я не уверен, что это хорошее решение.

У кого-то была такая же ошибка?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 29 января 2020

Попробуйте использовать пакетирование:

Максимальный размер пакета составляет 1 048 576 байт, и этот размер рассчитывается как сумма всех сообщений о событиях в UTF-8, плюс 26 байт для каждого события журнала.

И:

Максимальное количество событий журнала в пакете составляет 10 000.

Таким образом, вы можете добавить другие события в logEvents массив, пока вы не исчерпаете лимит размера байта или не превысите 10000 записей. Отправка одной партии считается одним запросом к 5 req / se c предел регулирования.

...