У меня есть несколько приложений Heroku (аналогичные приложения, развернутые в нескольких экземплярах на разных серверах).Каждое приложение генерирует несколько журналов, и я хочу заархивировать сгенерированные журналы на S3.
Я пытался использовать дополнения Heroku, но после определенного момента цена этих услуг дополнения не оправдывает мой вариант использования.
Поэтому я попытался написать очень простой приемник журнала и начал преобразовывать записи журнала в файл и публиковать файлы на S3.
Вот пример кода -
now = datetime.datetime.now()
r = math.floor(random.random() * 10000)
bucket = 'my-example-bucket'
key = '/logdrain/raw/{y}/{mon}/{d}/{h}/{h}-{min}-{s}-{ms}-{r}.txt'.format(
y=now.year, mon=now.month, d=now.day, h=now.hour, min=now.minute, s=now.second, ms=now.microsecond//1000, r=r)
s3_file_path = 's3://{bucket}/{key}'.format(bucket=bucket, key=key)
# Append the new content and save the file back to S3
data = str(request.data)
if 'l10' in data.lower():
print('ERROR: ', data)
with smart_open.open(s3_file_path, 'w') as fout:
fout.write(data)
return 'Log write successful', 200
Но похоже, что яЯ не могу сопоставить скорость потребления logplex с моей скоростью потребления / обработки.Вот логлайн
ERROR: b'142 <172>1 2019-07-03T10:06:07+00:00 host heroku logplex - Error L10 (output buffer overflow): 6 messages dropped since 2019-07-03T09:43:52+00:00.595 <158>1 2019-07-03T10:06:07.509894+00:00 host heroku router - at=info ...
Вот документ , который подтверждает то же самое.Просто хотел узнать, есть ли у кого-то лучший подход к реализации «утечки журналов».
PS: я развернул это в приложении на колбу на Heroku с динамометрами 2enterprise и все еще получаю сообщение об ошибке.