Можно ли уменьшить размер хранимого формата systemd-journald (и, следовательно, размер хранения)?

Вопрос или проблема

Я использую systemd на машине raspberrypi с системой на базе yocto. Недавно у меня возникли проблемы с перенаправлением сообщений в rsyslog.socket, поэтому я решил избавиться от rsyslog полностью в пользу journald.

После этого я заметил, что размер файлов journald гораздо больше, чем я предполагал ранее.

root@rpiDev: ~ $ journalctl -o cat > /tmp/journals-cat.txt
root@rpiDev: ~ $ journalctl -o export > /tmp/journals-exp.txt
root@rpiDev: ~ $ journalctl -o verbose > /tmp/journals-verb.txt
root@rpiDev: ~ $ journalctl -a -m > /tmp/journals.txt    ### Это то, что мне нужно!
root@rpiDev: ~ $ journalctl -a -m -o verbose > /tmp/journals-everything.txt
root@rpiDev: ~ $ du -sh /tmp/journals* /var/log/journal/ ; journalctl --disk-usage
468.0K  /tmp/journals-cat.txt
15.7M   /tmp/journals-everything.txt
4.7M    /tmp/journals-exp.txt
4.9M    /tmp/journals-verb.txt
2.3M    /tmp/journals.txt
41.0M   /var/log/journal/
Архивированные и активные журналы занимают 12.5M на диске.

Сравнивая размеры, кажется, что бинарные файлы, создаваемые journald, гораздо больше, чем объединенные (-m) логи.

Мне на самом деле нужно то, что внутри /tmp/journals.txt.

Вопрос: Возможно ли уменьшить количество данных, хранящихся в бинарных файлах journald, до того, что я заметил при запуске journalctl -a -m?

Другими словами: могу ли я отключить хранение всей информации, которая мне не важна, и использовать journald так же, как я бы использовал syslog?

Моя проблема может быть решена отключением постоянного хранения логов journald и их перенаправлением в syslog, но, возможно, это можно сделать без возвращения rsyslog?

ИСПРАВЛЕНИЕ:

Параметры, упомянутые некоторыми пользователями, здесь мне не помогают.

  • Использование SystemMaxUse= и RuntimeMaxUse= только устанавливает максимальный размер хранимых файлов – я могу иметь меньшие файлы с тем же количеством ненужной информации и, следовательно, еще меньше фактических логов.
  • Использование MaxLevel...= устанавливает максимальный уровень логирования, хранящегося в журнале. Это тоже не то, что мне нужно.

ИСПРАВЛЕНИЕ2:

Мое решение:

Я решил хранить логи в syslog (я использую rsyslog).
В моем journald.conf я установил Storage=volatile и использовал SystemMaxUse=64M и RuntimeMaxUse=64M, чтобы ограничить использование диска journald.
Я также включил ForwardToSyslog=yes, так что теперь у меня работает мое старое решение syslog, и я также могу просматривать логи journald во время выполнения.

Измените /etc/systemd/journald.conf, чтобы указать, сколько места журнал может использовать как в памяти, так и на диске.

Смотрите man journald.conf для получения подробного объяснения настроек, содержащихся в нем.

Ответ или решение

Да, можно настроить systemd-journald для уменьшения объема хранимых данных, но это может не совсем соответствовать вашим ожиданиям по сравнению с использованием rsyslog. Чтобы сосредоточиться на хранении только важной информации и минимизировать размер журналов, вам необходимо внести изменения в файл конфигурации journald.conf.

Вот более детальное руководство:

  1. Изменение конфигурации: Откройте файл /etc/systemd/journald.conf в текстовом редакторе с правами суперпользователя:

    sudo nano /etc/systemd/journald.conf
  2. Настройка параметров хранения: Вам могут быть полезны следующие параметры:

    • Storage=volatile: Это настройка позволяет хранить журналы только в памяти, что помогает избежать записи на диск и уменьшить его использование. После перезагрузки все журналы будут потеряны.

    • SystemMaxUse= и RuntimeMaxUse=: Установите максимальный объем, который могут занимать журналы как на диске, так и в памяти. Например:

      SystemMaxUse=64M
      RuntimeMaxUse=64M
    • MaxLevelStore=: Установите уровень логирования для хранимых данных. Если вам не нужны сообщения низкого уровня, вы можете игнорировать их:

      MaxLevelStore=warning

    Однако, как вы уже упомянули, эта опция не решает вашу первую проблему, связанную с ограничением объема сохраняемых данных.

  3. Отправка в syslog: Если вы решите использовать rsyslog для хранения журналов, вы можете активировать пересылку журналов в syslog, включив:

    ForwardToSyslog=yes

    Это позволит вам сохранить и старые сообщения, и новые, отправляя их в syslog для дальнейшей обработки.

  4. Сохранение изменений: После внесения всех необходимых изменений не забудьте сохранить файл и перезапустить службу journald, чтобы применить новые параметры:

    sudo systemctl restart systemd-journald
  5. Проверка настроек: Вы можете использовать команду journalctl --disk-usage для проверки текущего использования диска вашими журналами.

  6. Анализ логов: Если вам нужно только простое представление журналов, вы можете использовать journalctl -a -m, чтобы увидеть только те сообщения, которые вы хотели бы хранить.

В результате, с помощью правильной настройки journald.conf можно значительно уменьшить количество хранимой информации, однако стоит помнить, что journald и syslog имеют разные механизмы работы и могут вести себя по-разному в зависимости от настроек. Если ваши требования не могут быть выполнены исключительно с помощью journald, возможно, все же стоит рассмотреть сохранение rsyslog как решение, обеспечивающее надежное управление логами.

Оцените материал
Добавить комментарий

Капча загружается...