Рейтинг:1

Как ограничить размер журнала на Elastic beanstalk с платформой Corretto 8/Amazon Linux 2?

флаг in

Недавно мы перенесли одно из наших приложений на платформу «Corretto 8, работающую на 64-битной платформе Amazon Linux 2/3.2.12». Теперь мы видим проблему, заключающуюся в том, что файлы журналов заполняют объем нашего диска чуть больше недели. Раньше у нас не было этой проблемы.

Что раздражает, так это то, что мы передаем эти журналы в облачные часы, поэтому они нам действительно не нужны на самом экземпляре. Что еще более раздражает, так это то, что вся документация, сообщения в блогах и т. д., которые я могу найти по этому вопросу, явно не написаны для этой платформы. Глядя на файловую структуру, кажется, что используется другой подход, который я еще не полностью понял.

Прежде всего, нет папки /var/log/httpd ... или других папок для определенных журналов. До сих пор я выяснил, что то, что отправляется в лог-поток web.stdout.log (который на старой платформе назывался по-другому, но я не помню, как именно. В любом случае, это то место, где регистрируется приложение spring-boot to) хранится в файле /var/log/messages.

Я знаю это, потому что при анализе того, почему у нас заканчивается место на диске, этот файл всегда будет самым большим на всем диске. За исключением того, что сразу после запуска экземпляра он имел разумный размер. Через 3 дня он может достигать размера 2 ГБ и продолжает расти до тех пор, пока ничего не останется. Это, без сомнения, источник наших проблем.

Вопрос в том, что я могу делать об этом? Ротация журналов находится в конфигурации по умолчанию, и я вижу некоторые файлы в /var/log/rotated (это также папка, в которой раньше находились ротируемые журналы), но они крошечные (самый большой из них — восхитительные 1,3 МБ в size...), а размер /var/log/messages никогда не уменьшается, а только растет.

Я читал множество статей о том, как решить подобные проблемы, настроив logrotate с помощью ebextensions, от самих AWS и блоггеров, но во всех них я очень быстро вижу, что они построены поверх совершенно другой структуры, поэтому они не кажутся применимыми. Кроме того, уже во время миграции мы столкнулись с тем, что некоторые вещи, которые выполнялись с помощью ebextensions, теперь не выполняются с помощью ebextensions, но документации скорее не хватает.

Кто-нибудь знает платформу достаточно, чтобы дать мне понять, как я могу это настроить? мне даже не нужно вращать журналы, строго говоря, я просто хочу, чтобы они исчезли, как только они станут старше часа или около того. В конце концов, они у нас есть на облачных часах...

Дополнительная информация Чем глубже я в это вникаю, тем больше путаюсь. Существует файл /var/log/web.stdout.log, который получает те же сообщения, что и /var/log/messages. Глядя на содержимое logrotate.elasticbeanstalk.hourly, это файл, который на самом деле находится в ротации журнала, и, похоже, он работает нормально.

Выполняя lsof, процесс, использующий этот файл, называется rsyslogd. Согласно комментарию shearn89s ниже, по-видимому, это новый системный журнал, и все, что записывается в стандартный вывод, регистрируется там.

Понимая, что этот файл не подвергается какой-либо ротации, я пытаюсь это настроить. Пока только на экземпляре, позже я разберусь, как это сделать в реальной конфигурации среды.

Я создал новый файл конфигурации в /etc/logrotate/elasticbeanstalk.hourly со следующим содержимым:

/var/журнал/сообщения {
 су корень корень
 размер 10М
 повернуть 5
 отсутствует
 компресс
 непустой
 копироватьусечение
 дататекст
 формат даты %s
 старый_каталог /var/log/rotated
}

Бег sudo /usr/sbin/logrotate /etc/logrotate.elasticbeanstalk.hourly/logrotate.elasticbeanstalk.messages.conf --debug, я получаю следующий вывод:

шаблон вращения: /var/log/messages 10485760 байт (5 оборотов)
olddir находится в /var/log/rotated, пустые файлы журналов не ротируются, старые журналы удаляются
учитывая журнал /var/log/messages
  журнал нуждается в ротации
журнал ротации /var/log/messages, log->rotateCount равен 5
Преобразование '%s' -> '%s'
суффикс dateext '1646905905'
шаблон глобуса '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0 -9]'
glob не удалось найти старые повернутые журналы
копирование /var/log/messages в /var/log/rotated/messages1646905905
усечение /var/log/messages
сжатие журнала с помощью: /bin/gzip

Это выглядит многообещающе, но факт в том, что ничего не изменилось. Файл по-прежнему имеет тот же размер, и файл не был создан в папке ротации. Кажется, что это не имеет никакого эффекта. Я изменил конфигурацию, чтобы она перемещалась и создавалась вместо усечения на месте, я пробовал -f, все с тем же результатом. От logrotate ошибки нет, но и эффекта нет. Этот файл кажется чертовски непроницаемым.

флаг cn
`/var/log/messages` — это стандартный системный журнал — если приложение записывает в stdout, оно перейдет в `messages`. Лучше всего настроить ротацию практически для всего, что генерирует журналы.
UncleBob avatar
флаг in
Да, я уже понял, что этот конкретный файл вообще не ротируется. Теперь вопрос только в том, как мне это сделать...
Рейтинг:0
флаг bd

Я сохранил это в .ebextensions/liblogrotate.config:

файлы:
   /etc/remove_old_logs.sh:
     владелец: корень
     группа: корень
     режим: "000644"
     содержание: |
       #!/бин/ш
       найти /var/log -type f -mtime +7 -exec rm {} +

контейнер_команды:
  01_crontab:
    команда: "( crontab -l | grep -v -F \". /etc/remove_old_logs.sh\" ; echo \"0 0 * * * . /etc/remove_old_logs.sh\" ) | crontab -"

Он создает crontab, который удаляет файлы старше 7 дней в папке /var/log. Я знаю, что это не оптимально, но меня не особо интересуют эти журналы.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.