Недавно я переместил приложение на Elastic Beanstalk. В настоящее время я настраиваю файлы журнала для архивирования. Одно из бизнес-требований: Икс дней хранения журнала, что, конечно, довольно разумно. Поскольку файлы журналов хранятся в экземпляре, а данные экземпляра не сохраняются при завершении / повторном создании экземпляра, журналы необходимо хранить в другом месте.
Elastic Beanstalk предлагает вариант «хранилища журналов S3», который, похоже, загружает файлы журналов ротации в S3, что удовлетворяет большинство моих потребностей. Единственным исключением может быть случай, когда экземпляр завершается / создается повторно: как я могу легко гарантировать, что перед завершением еще не повернутые файлы журнала загружаются в S3?
Эластичный бобовый стебель резервное копирование журналов на S3 время от времени выполняется в качестве пакетная загрузка по logrotate
что означает, как вы правильно заметили, что последние журналы могут не находиться в S3, когда экземпляр завершается.
Вы можете создать сценарий выключения (например. Вот), который загрузит все файлы журнала в S3, когда экземпляр изящно выключить. Он может не выполняться, если экземпляр выйдет из строя или выйдет из строя каким-то внезапным образом, но это довольно редкое событие.
тем не мение Эластичный бобовый стебель поддерживает Потоковая передача журналов CloudWatch который передает журналы в CloudWatch Logs в режиме реального времени, как только они создаются. Это означает, что даже в случае завершения работы у вас все равно будут последние журналы в CloudWatch Logs до точки, в которой awslogs
агент уволен.
Посмотри Вот как это настроить.
Также легче искать журналы CloudWatch, чем журналы S3, вы можете отслеживать определенное ключевое слово (например, «Ошибка») и действия с ним (например, отправить электронное письмо или запустить функцию Lambda) и т. Д.
Вы, вероятно, можете иметь включены как S3, так и CloudWatch Logs в приложении Elastic Beanstalk одновременно.
Надеюсь, это поможет :)