- Вопрос или проблема
- systemd поставляется с отличным пылесосом
- Экономия дискового пространства
- Количество журналов загрузки уменьшено
- Производительность улучшилась
- Долгосрочные решения
- Ответ или решение
- Ответ на вопрос о больших и медленных журналах systemd (journalctl)
- Уменьшение размера логов
- Устранение проблем с производительностью
- Долгосрочные решения
- Заключение
Вопрос или проблема
Мой journalctl
хранит более 300 МБ журналов, как я узнал из journalctl --disk-usage
. Все выглядит в порядке, когда я запускаю journalctl --verify
:
$ journalctl --disk-usage
Архивированные и активные журналы занимают 328,0 М на диске.
$ journalctl --verify
PASS: /var/log/journal/d7b25a27fe064cadb75a2f2f6ca7764e/system.journal
PASS: /var/log/journal/d7b25a27fe064cadb75a2f2f6ca7764e/user-65534.journal
PASS: /var/log/journal/d7b25a27fe064cadb75a2f2f6ca7764e/system@02f1aae76e32467390ab88ba03ae559e-0000000000000001-00056515dbdcd67e.journal
PASS: /var/log/journal/d7b25a27fe064cadb75a2f2f6ca7764e/user-1000.journal
PASS: /var/log/journal/d7b25a27fe064cadb75a2f2f6ca7764e/user-65534@9838f64d6ee047bebec9d30d329064d4-00000000000005bb-00056515dbfe8d9d.journal
Я заметил, как медленно работает система, когда я перенаправляю команды grep
из journalctl
.
Как я могу разумно сократить размер хранимых данных в journalctl
?
systemd
поставляется с отличным пылесосом
Чтобы ограничить файлы журналов до определенного размера, systemd
предоставляет функцию vacuum
для “высасывания” старой информации из файлов журналов. Допускаемые параметры:
--vacuum-size=BYTES Уменьшить использование диска до указанного размера
--vacuum-files=INT Оставить только указанное количество файлов журналов
--vacuum-time=TIME Удалить файлы журналов старше указанного времени
Например, чтобы сократить потребление с 312 МБ до 200 МБ (или меньше), используйте:
$ sudo journalctl --vacuum-size=200M
Удален архивированный журнал /var/log/journal/d7b25a27fe064cadb75a2f2f6ca7764e/[email protected]~ (56.0M).
Удален архивированный журнал /var/log/journal/d7b25a27fe064cadb75a2f2f6ca7764e/[email protected]~ (8.0M).
Удален архивированный журнал /var/log/journal/d7b25a27fe064cadb75a2f2f6ca7764e/user-1000@1bbb77599cf14c65a18af51646751696-000000000000064f-00056444d58433e1.journal (112.0M).
Пылесос завершен, освобождено 176.0M архивированных журналов на диске.
Экономия дискового пространства
Размер journalctl
существенно уменьшен:
$ journalctl --disk-usage
Архивированные и активные журналы занимают 136.0 М на диске.
Размер сократился с 312 МБ до 136 МБ, сэкономив 176 МБ и 64 МБ больше, чем ожидалось. Это, вероятно, аномалия одноразового характера из-за чрезвычайно большого единственного файла журнала. Я пересмотрю этот ответ через месяц, если появится новая информация.
Количество журналов загрузки уменьшено
Количество журналов загрузки journalctl
было 32, но сейчас уменьшилось до 26:
$ journalctl --list-boots
-26 0f230cc546fd4aec8f5233e0074ab3e1 Tue 2018-02-13 03:57:20 MST—Wed 2018-02-14
-25 c0d2c0141dd840cbab75d3c2254f8781 Wed 2018-02-14 22:59:13 MST—Sat 2018-02-17
-24 aafb2573a6374e019a7165cb8eee74a0 Sun 2018-02-18 06:02:03 MST—Mon 2018-02-19
-23 8462f1969c6f4d61973e7e245014b846 Mon 2018-02-19 04:16:53 MST—Sat 2018-02-24
-22 7f71ac2fb9714c49aa05989b741655f2 Sat 2018-02-24 04:24:36 MST—Sat 2018-02-24
-21 b12a48c363474e5fb39311a166a98d54 Sat 2018-02-24 04:28:09 MST—Sun 2018-02-25
-20 fbef1e659de64a0cbdcb9994f5a39457 Sun 2018-02-25 17:48:20 MST—Mon 2018-02-26
-19 3d9b4c10f98d4ef7aab1cb2baa9b74e1 Mon 2018-02-26 08:37:01 MST—Mon 2018-02-26
-18 4412b117dcc648aa9eceabcd0f205207 Mon 2018-02-26 08:38:00 MST—Mon 2018-02-26
-17 f6794cbb7fb24213a6f2c3e368f666a1 Mon 2018-02-26 08:39:12 MST—Mon 2018-02-26
-16 472f968506ed446ab12cf7abc65fa81a Mon 2018-02-26 08:49:37 MST—Mon 2018-02-26
-15 d575c609d82e4ecd8dcebb70d40160d7 Mon 2018-02-26 17:07:36 MST—Mon 2018-02-26
-14 878cfd9239a84dae80c62e7413c72951 Mon 2018-02-26 17:24:54 MST—Mon 2018-02-26
-13 7f9913c7dbff46ab9bbd7c2cbefc4d7d Mon 2018-02-26 17:35:19 MST—Mon 2018-02-26
-12 bf90829ef13a4e9fa1794bf0a88f4033 Mon 2018-02-26 17:45:12 MST—Wed 2018-02-28
-11 fb879a836c7c459ab27f6332bee6013b Wed 2018-02-28 03:56:29 MST—Wed 2018-02-28
-10 b0fec230765046f5bf3d654db1dc13ee Wed 2018-02-28 20:03:15 MST—Thu 2018-03-01
-9 72a2d6789eab4396be16348d9ead0408 Thu 2018-03-01 03:58:25 MST—Fri 2018-03-02
-8 8bccdc9b16124d26af05c34c8a30a0f5 Fri 2018-03-02 16:54:36 MST—Sat 2018-03-03
-7 40c2875db30349f5a9b1dfc849a47c05 Sat 2018-03-03 10:03:48 MST—Sat 2018-03-03
-6 781c79d2ec7946afba0fa2300e8ebe56 Sat 2018-03-03 10:04:34 MST—Sat 2018-03-03
-5 bb66dc875e414021940b7233072516d2 Sat 2018-03-03 17:43:08 MST—Tue 2018-03-06
-4 ba3bcfdc71584757b8bef9df16e7b0f6 Tue 2018-03-06 16:56:36 MST—Tue 2018-03-06
-3 60faa0fda99a4ef4b14b73c412d69e50 Tue 2018-03-06 17:00:47 MST—Tue 2018-03-06
-2 9b317bb8403344ca84dd2f288bc90410 Tue 2018-03-06 17:02:15 MST—Tue 2018-03-06
-1 dcb126be665a4531aae4312af7e51a34 Tue 2018-03-06 17:09:00 MST—Tue 2018-03-06
0 6a105af650d5442a9b03004165e58adf Tue 2018-03-06 17:42:45 MST—Wed 2018-03-07
Производительность улучшилась
Время проверки целостности journalctl
заметно сократилось:
Время сократилось с 10 секунд до 4 секунд.
Благодарим за это источник.
Долгосрочные решения
Я создал задачу cron
, чтобы запускать пылесос раз в месяц.
Еще один вариант, упомянутый в комментариях, — установить SystemMaxUse=50M
в /etc/systemd/journald.conf
. На самом деле есть четыре разных места, где вы можете установить этот параметр:
/etc/systemd/journald.conf
/etc/systemd/journald.conf.d/*.conf
/run/systemd/journald.conf.d/*.conf
/usr/lib/systemd/journald.conf.d/*.conf
На самом деле существует много опций, которые вы можете использовать для достижения аналогичных целей:
SystemMaxUse=, SystemKeepFree=, SystemMaxFileSize=, SystemMaxFiles=, RuntimeMaxUse=, RuntimeKeepFree=, RuntimeMaxFileSize=, RuntimeMaxFiles=
Перезагрузите конфигурацию:
$ sudo systemctl restart systemd-journald
Вы можете указать journalctl отображать меньшее количество данных. Существует несколько способов сделать это, такие как:
-u [unit]
или--unit=[unit]
: это говорит journalctl отображать только журналы из единицы systemd. Например, вы можете ввестиjournalctl -u NetworkManager.service
, и вы получите журналы от NetworkManager.-S [time]
или--since=[time]
: это говорит journalctl игнорировать любые записи до определенного времени, указанного в форматегггг-мм-дд чч:мм:сс
. Если вы хотите опустить время, journalctl будет использовать 00:00:00; если вы опустите секунды, будет использовано :00. Также, если вы опустите дату, journalctl будет использовать текущую дату. Вот пример, взятый из документации:journalctl -S "2012-10-30 18:17:16"
.-U [time]
или--until=[time]
: это довольно похоже на предыдущий пункт, за исключением того, что он опускает записи после указанного времени. Аргументы и синтаксис такие же.-n [x]
или--lines [x]
: ограничивает количество строк вывода, где “x” — это целое число. Если вы введетеjournalctl -n 12
, будут отображены только двенадцать самых последних журналов.
Вы также можете уменьшить количество хранимых данных, но WinEunuuchs2Unix уже указал на это, так что я не буду тратить время на повторение этой информации.
Ответ или решение
Ответ на вопрос о больших и медленных журналах systemd (journalctl
)
Система ведения журналов systemd
, используемая для управления логами в современных дистрибутивах Linux, может накапливать значительные объемы данных, что может приводить к замедлению работы системы и затруднениям в поиске нужной информации. В вашем случае размер журналов достиг 328 МБ, что является достаточно большим объемом. В этой статье я объясню, как можно умело сократить этот объем и улучшить производительность работы с journalctl
.
Уменьшение размера логов
Для управления размером журналов systemd
существует функция "вакуумирования". Она позволяет удалить более старые данные, чтобы уменьшить объем хранимой информации. Вы можете использовать следующие параметры:
--vacuum-size=BYTES
— уменьшить использование диска до указанного размера;--vacuum-files=INT
— оставить только указанное количество файлов журнала;--vacuum-time=TIME
— удалить журналы, старше указанного времени.
Например, чтобы уменьшить использование памяти до 200 МБ, выполните следующую команду:
sudo journalctl --vacuum-size=200M
После выполнения этой команды размер журналов может значительно уменьшиться, как видно из следующих примеров:
$ journalctl --disk-usage
Архивированные и активные журналы занимают 136.0M на диске.
Устранение проблем с производительностью
Если вы заметили замедление работы системы при использовании journalctl
, попробуйте следующие рекомендации:
-
Уменьшите объём данных, отображаемых
journalctl
: Используйте флаги командной строки для фильтрации информации. Например, вы можете выводить только логи для определённой службы с помощью:journalctl -u <имя_службы>
-
Ограничьте вывод по времени: Используйте параметры
-S
и-U
для определения диапазона временных меток:journalctl -S "2023-10-01" -U "2023-10-10"
-
Ограничьте количество выводимых строк: Параметр
-n
позволяет указать количество последних строк:journalctl -n 50
Долгосрочные решения
Для автоматизации процесса управления размерами журналов вы можете создать cron
задачу, которая будет выполнять команду вакуумирования ежемесячно. Также стоит рассмотреть возможность установки параметров в конфигурационный файл /etc/systemd/journald.conf
. Примеры параметров:
SystemMaxUse=50M
— лимит на общий объем хранимых журналов.SystemKeepFree=100M
— оставлять указанное количество свободного места на диске.
После внесения изменений в конфигурацию перезапустите службу systemd-journald
:
sudo systemctl restart systemd-journald
Заключение
Следуя вышеописанным рекомендациям, вы сможете эффективно управлять размерами журналов в systemd
, что не только сократит объем занимаемого дискового пространства, но и улучшит производительность системы при работе с логами. Надеюсь, эта информация будет полезной для вас.