Почему файлы журналов journald такие огромные?

Почему файлы журналов journald такие огромные?

Когда я делаю это, journalctl --disk-usageэто говорит о чем-то300 МБразмер файлов журнала, но когда я смотрю на сам текст, journalctl | wc -cон составляет около28 МБ. Ну, в journald есть сжатие, и даже с учетом метаданных, таких как временная метка, uid, хэш сообщения и тому подобное, мне кажется, что это просто нелепая трата дискового пространства.

Может ли кто-нибудь объяснить мне, почему файлы журнала такие большие по сравнению с текстом внутри?

решение1

Причин две. Во-первых, как упомянула @Mella, есть разница между текущим журналом и всеми журналами.

Во-вторых, как описано в man journalctl, существует ряд форматов вывода. Вы измеряли размер наиболее компактного/наименее подробного. Чтобы увидеть максимальные данные в журнале systemd, используйте:

journactl --output=verbose

В моем случае компактный вывод журнала возвращает 32 мегабайта данных, тогда как возвращается 128 МБ --output=verbose, а обнаруживается 152 МБ с помощью journalctl --disk-usage, охватывая как активные, так и архивные журналы.

Если вас это беспокоит, узнайте man journald.conf, как ограничить объем используемого дискового пространства .journald

решение2

  1. Они огромные, потому что это своего рода ошибка:

Как указановверх по течениюи, следовательно, как известно разработчикам journald, используемый в двоичном формате журналов формат не очень велик (пока?).

  1. Они огромные, потому что, возможно, Компрессия не активирована.

/etc/systemd/journald.confВ named также есть опция Compress=yes, которая может быть неактивна в вашей системе, поэтому сжатие фактически отсутствует.

  1. Вопрос об архивных журналах здесь не имеет значения.

Хотя в принципе верно, что journald различаетактивныйиархивированожурналов, это вводящий в заблуждение ответ на другие ответы, так как в man journalctlнем недвусмысленно говорится:

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

Следовательно, другие ответы здесь вводят в заблуждение.

  1. Использование диска journalctl огромно (т.е. больше, чем у обычных текстовых файлов с сопоставимым уровнем информации, т.е. полей) из-за некоторых мер распределения файлов, фрагментации и борьбы с коррупцией.

"проблемы фрагментации/распределения файлов"

На моем компьютере journalctl --version == "systemd 239[...]"файлы журнала, содержащие данные, существуют в размерах, кратных 8 МБ. Как следствие, в моем системном файле журнала будет 8 МБ, даже если в нем фактически хранится лишь часть (как в одном случае 56 КБ) данных.

«проблема борьбы с коррупцией» По словам Поттеринга, одного из разработчиков, journaldв systemdслучае, если журнал будет признан испорченным journald, он не будет «исправлен», а вместо этого останется как есть, чтобы предотвратить дальнейшие проблемы. (см.https://bugs.freedesktop.org/show_bug.cgi?id=64116#c3)

Это, конечно, означает, что существует большая вероятность того, что несжатые, почти пустые двоичные файлы журнала журнала находятся в вашем var log, делая его фактически намного больше, чем разумная альтернатива в виде простого текста.

решение3

journalctlбез параметров (выходные данные которых вы измеряете wc -c) отображает только записи журнала в активном журнале (навскидку не знаю, что вызывает переворот). journalctl --disk-usageотображает пространство, используемое архивными журналами, а также активным журналом.

Связанный контент