Вопрос или проблема
Я использую 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
.
Вот более детальное руководство:
-
Изменение конфигурации: Откройте файл
/etc/systemd/journald.conf
в текстовом редакторе с правами суперпользователя:sudo nano /etc/systemd/journald.conf
-
Настройка параметров хранения: Вам могут быть полезны следующие параметры:
-
Storage=volatile
: Это настройка позволяет хранить журналы только в памяти, что помогает избежать записи на диск и уменьшить его использование. После перезагрузки все журналы будут потеряны. -
SystemMaxUse=
иRuntimeMaxUse=
: Установите максимальный объем, который могут занимать журналы как на диске, так и в памяти. Например:SystemMaxUse=64M RuntimeMaxUse=64M
-
MaxLevelStore=
: Установите уровень логирования для хранимых данных. Если вам не нужны сообщения низкого уровня, вы можете игнорировать их:MaxLevelStore=warning
Однако, как вы уже упомянули, эта опция не решает вашу первую проблему, связанную с ограничением объема сохраняемых данных.
-
-
Отправка в syslog: Если вы решите использовать rsyslog для хранения журналов, вы можете активировать пересылку журналов в syslog, включив:
ForwardToSyslog=yes
Это позволит вам сохранить и старые сообщения, и новые, отправляя их в syslog для дальнейшей обработки.
-
Сохранение изменений: После внесения всех необходимых изменений не забудьте сохранить файл и перезапустить службу journald, чтобы применить новые параметры:
sudo systemctl restart systemd-journald
-
Проверка настроек: Вы можете использовать команду
journalctl --disk-usage
для проверки текущего использования диска вашими журналами. -
Анализ логов: Если вам нужно только простое представление журналов, вы можете использовать
journalctl -a -m
, чтобы увидеть только те сообщения, которые вы хотели бы хранить.
В результате, с помощью правильной настройки journald.conf
можно значительно уменьшить количество хранимой информации, однако стоит помнить, что journald и syslog имеют разные механизмы работы и могут вести себя по-разному в зависимости от настроек. Если ваши требования не могут быть выполнены исключительно с помощью journald, возможно, все же стоит рассмотреть сохранение rsyslog как решение, обеспечивающее надежное управление логами.