systemd (Русский)/Journal (Русский)
systemd использует журнал (journal), собственную систему ведения логов, в связи с чем больше не требуется запускать отдельный демон логирования. Для чтения логов используйте команду journalctl(1).
В Arch Linux каталог /var/log/journal/
— это часть пакета systemd и по умолчанию (когда в конфигурационном файле /etc/systemd/journald.conf
параметру Storage=
задано значение auto
) журнал записывается именно в /var/log/journal/
. Если каталог будет удалён, systemd не пересоздаст его автоматически и вместо этого будет вести журнал в /run/systemd/journal
без сохранения между перезагрузками. Однако каталог будет пересоздан, если добавить Storage=persistent
в journald.conf
и перезапустить systemd-journald.service
(или перезагрузиться).
Сообщения в журнале классифицируются по уровню приоритета и категории (Facility). Классификация записей соответствует классическому протоколу Syslog (RFC 5424).
Уровни приоритета
Коды важности syslog (в systemd называются приоритетами) используются для пометки важности сообщений RFC 5424.
Значение | Важность | Ключевое слово | Описание | Примеры |
---|---|---|---|---|
0 | Emergency | emerg | Cистема не работоспособна | Серьёзный баг в ядре, дамп памяти systemd. Данный уровень не должен использоваться приложениями. |
1 | Alert | alert | Cистема требует немедленного вмешательства | Отказ важной подсистемы. Потеря данных. kernel: BUG: unable to handle kernel paging request at ffffc90403238ffc .
|
2 | Critical | crit | Cостояние системы критическое | Аварийные отказы, дампы памяти. Например, знакомое сообщение:systemd-coredump[25319]: Process 25310 (plugin-containe) of user 1000 dumped core Отказ основных приложений системы, например, X11. |
3 | Error | err | Cообщения об ошибках | Сообщение о некритической ошибке:kernel: usb 1-3: 3:1: cannot get freq at ep 0x84 ,systemd[1]: Failed unmounting /var. ,libvirtd[1720]: internal error: Failed to initialize a valid firewall backend
|
4 | Warning | warning | Предупреждения о возможных проблемах | В некорневой файловой системе остался всего 1 ГБ свободного места.org.freedesktop. Notifications[1860]: (process:5999): Gtk-WARNING **: Locale not supported by C library. Using the fallback 'C' locale .
|
5 | Notice | notice | Cообщения о нормальных, но важных событиях | systemd[1]: var.mount: Directory /var to mount over is not empty, mounting anyway ,gcr-prompter[4997]: Gtk: GtkDialog mapped without a transient parent. This is discouraged
|
6 | Informational | info | Информационные сообщения | lvm[585]: 7 logical volume(s) in volume group "archvg" now active
|
7 | Debug | debug | Отладочные сообщения | kdeinit5[1900]: powerdevil: Scheduling inhibition from ":1.14" "firefox" with cookie 13 and reason "screen"
|
Вышеуказанные правила являются рекомендацией и окончательное решение остаётся за разработчиком приложения. Всегда возможно, что сообщение будет выше или ниже ожидаемого уровня.
Категории
Коды категорий (facility) syslog используются для указания типа программы, добавляющего сообщение в лог RFC 5424.
Код категории | Ключевое слово | Описание | Информация |
---|---|---|---|
0 | kern | Сообщения ядра | |
1 | user | Сообщения программного обеспечения пользователя | |
2 | Почтовая система | Архаический POSIX всё ещё поддерживается и иногда используется (см. mail(1) для получения более подробной информации) | |
3 | daemon | Системные службы | Все демоны, включая systemd и его подсистемы |
4 | auth | Сообщения безопасности (авторизации) | См. также код 10 |
5 | syslog | Собственные сообщения syslogd | Для реализаций syslogd (не используется в systemd, см. код 3) |
6 | lpr | Подсистема печати (архаическая подсистема) | |
7 | news | Подсистема новостных групп (архаическая подсистема) | |
8 | uucp | Подсистема UUCP (архаическая подсистема) | |
9 | clock daemon | systemd-timesyncd | |
10 | authpriv | Сообщения безопасности (авторизации) | См. также код 4 |
11 | ftp | Служба FTP | |
12 | - | Подсистема NTP | |
13 | - | Журнал аудита | |
14 | - | Аварийный журнал | |
15 | cron | Служба планирования | |
16 | local0 | Локальное использование 0 (local0) | |
17 | local1 | Локальное использование 1 (local1) | |
18 | local2 | Локальное использование 2 (local2) | |
19 | local3 | Локальное использование 3 (local3) | |
20 | local4 | Локальное использование 4 (local4) | |
21 | local5 | Локальное использование 5 (local5) | |
22 | local6 | Локальное использование 6 (local6) | |
23 | local7 | Локальное использование 7 (local7) |
Полезные категории для наблюдения: 0, 1, 3, 4, 9, 10, 15.
Фильтрация вывода
journalctl позволяет фильтровать вывод по определённым полям. Если должно быть отображено большое количество сообщений или необходима фильтрация большого промежутка времени, то вывод команды может занять значительное время.
Примеры:
- Показать сообщения с момента текущей загрузки системы:
# journalctl -b
Также пользователи часто интересуются сообщениями предыдущей загрузки (например, если произошёл невосстановимый сбой системы). Это возможно, если задать параметр флагу-b
:journalctl -b -0
покажет сообщения с момента текущей загрузки,journalctl -b -1
— предыдущей загрузки,journalctl -b -2
— следующей за предыдущей и т.д. Для просмотра полного описания смотрите страницу справочного руководства journalctl(1), поддерживается и более мощная семантика. - Добавить пояснения к сообщениям логов из каталога сообщений, где это возможно:
# journalctl -x
Обратите внимание, что эту возможность лучше не использовать, когда излишние комментарии нежелательны — например, при добавлении копии логов в сообщение о баге или письмо в поддержку. Вывести существующие пункты каталога можно командойjournalctl --list-catalog
. - Показать сообщения, начиная с определённой даты (и, опционально, времени):
# journalctl --since="2012-10-30 18:17:16"
- Показать сообщения за последние 20 минут:
# journalctl --since "20 min ago"
- Следить за появлением новых сообщений:
# journalctl -f
- Показать сообщения конкретного исполняемого файла:
# journalctl /usr/lib/systemd/systemd
- Показать сообщения конкретного процесса:
# journalctl _PID=1
- Показать сообщения конкретного юнита:
# journalctl -u man-db.service
- Показать сообщения от пользовательской службы конкретного юнита:
$ journalctl --user -u dbus
- Показать кольцевой буфер ядра:
# journalctl -k
- Показать сообщения только с приоритетами error, critical и alert:
# journalctl -p err..alert
Также можно использовать числа, например,journalctl -p 3..1
. Если указать одно число/уровень приоритета, например,journalctl -p 3
, то также будут показаны сообщения и с более высоким приоритетом (от 0 до 3, в данном случае). - Показать эквивалент auth.log используя фильтрацию категорий syslog:
# journalctl SYSLOG_FACILITY=10
- Если в каталоге с журналами (по умолчанию
/var/log/journal
) очень много данных, то фильтрация выводаjournalctl
может занять несколько минут. Процесс можно значительно ускорить с помощью опции--file
, указавjournalctl
только самый свежий журнал:# journalctl --file /var/log/journal/*/system.journal -f
Для получения дополнительной информации смотрите страницы справочного руководства journalctl(1), systemd.journal-fields(7) или пост в блоге Леннарта Пёттеринга.
SYSTEMD_LESS
, в которой содержатся опции, передаваемые в less (программу постраничного просмотра, используемую по умолчанию). По умолчанию переменная имеет значение FRSXMK
(для получения дополнительной информации смотрите less(1) и journalctl(1)).
Если убрать опцию S
, будет достигнут требуемый результат. Например, запустите journalctl, как показано здесь:
$ SYSTEMD_LESS=FRXMK journalctlДля использования такого поведения по умолчанию, экспортируйте переменную из файла
~/.bashrc
или ~/.zshrc
.$ strings /mnt/arch/var/log/journal/af4967d77fba44c6b093d0e9862f6ddd/system.journal | grep -i message
Ограничение размера журнала
Если журнал сохраняется при перезагрузке, его размер по умолчанию ограничен значением в 10% от объема соответствующей файловой системы (и максимально может достигать 4 ГиБ). Например, для каталога /var/log/journal
, расположенном на корневом разделе в 20 ГиБ, максимальный размер журналируемых данных составит 2 ГиБ. На разделе же 50 ГиБ журнал сможет занять до 4 ГиБ. Текущие пределы для вашей системы можно узнать из логов systemd-journald
:
# journalctl -b -u systemd-journald
Максимальный объем постоянного журнала можно задать вручную, раскомментировав и отредактировав следующий параметр:
/etc/systemd/journald.conf
SystemMaxUse=50M
Также возможно использование конфигурационных сниппетов вместо редактирования глобального файла конфигурации. В таком случае поместите переопределения в разделе [Journal]
:
/etc/systemd/journald.conf.d/00-journal-size.conf
[Journal] SystemMaxUse=50M
Перезапустите systemd-journald.service
для применения изменений.
Для получения дополнительной информации обратитесь к странице справочного руководства journald.conf(5).
Ограничение размера для юнита
Отредактируйте файл юнита службы, которую вы хотите настроить (например, sshd), добавив параметр LogNamespace=ssh
в раздел [Service]
.
Затем создайте файл journald@ssh.conf
, скопировав содержимое файла /etc/systemd/journald.conf
. Отредактируйте его, задав необходимое значение SystemMaxUse
.
Перезапустите юнит, чтобы включилась новая служба журнала systemd-journald@ssh.service
. Логи службы из определённого "пространства имён" можно увидеть командой journalctl --namespace ssh
.
Подробнее о пространствах имён журнала см. systemd-journald.service(8) § JOURNAL NAMESPACES.
Очистка файлов журнала вручную
Файлы журнала можно удалить из директории /var/log/journal/
, к примеру, с помощью rm
или journalctl
для удаления части журналов по определённым критериям. Например:
- Удалять заархивированные файлы журнала, пока занимаемое ими место не составит менее 100 МиБ:
# journalctl --vacuum-size=100M
- Ограничить все файлы журнала хранением данных только за последние две недели:
# journalctl --vacuum-time=2weeks
Для получения дополнительной информации, обратитесь к journalctl(1).
Journald вместе с syslog
Совместимость с классической реализацией syslog можно обеспечить, перенаправляя все сообщения systemd через сокет /run/systemd/journal/syslog
. Для работы демона syslog с журналом, следует привязать его к данному сокету вместо /dev/log
(официальное сообщение).
Для перенаправления данных в сокет, в journald.conf
по умолчанию задан параметр ForwardToSyslog=no
, чтобы избежать перегрузки на систему, так как rsyslog или syslog-ng самостоятельно получают сообщения из журнала.
Смотрите Syslog-ng#Overview и Syslog-ng#syslog-ng and systemd journal или rsyslog для получения подробной информации о конфигурировании.
Перенаправление журнала в /dev/tty12
Создайте drop-in каталог /etc/systemd/journald.conf.d
и файл fw-tty12.conf
в нём со следующим содержимым:
/etc/systemd/journald.conf.d/fw-tty12.conf
[Journal] ForwardToConsole=yes TTYPath=/dev/tty12 MaxLevelConsole=info
Затем перезапустите службу systemd-journald
.
Выбор журнала для просмотра
Иногда необходимо проверить логи другой системы, например, загружаясь с работоспособной системы для восстановления неисправной. В таком случае примонтируйте диск, к примеру, в /mnt
и укажите путь журнала с помощью флага -D
/--directory
следующим образом:
# journalctl -D /mnt/var/log/journal -e
Доступ к журналу как пользователь
По умолчанию обычные пользователи могут читать только свой собственный пользовательский журнал. Чтобы дать доступ на чтение системного журнала обычному пользователю, добавьте его в группу systemd-journal
. Для групп adm
и wheel
также предоставляется доступ на чтение.
Подробнее смотрите journalctl(1) § DESCRIPTION и Пользователи и группы#Пользовательские группы.