systemd (Русский)/Journal (Русский) - ArchWiki

Jump to content
From ArchWiki
< Systemd (Русский)

Состояние перевода: На этой странице представлен перевод статьи systemd/Journal. Дата последней синхронизации: 10 декабря 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

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 | mail | Почтовая система | Архаический 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) или пост в блоге Леннарта Пёттеринга.

Совет: По умолчанию journalctl отсекает части строк, которые не вписываются в экран по ширине, хотя иногда перенос строк может оказаться более предпочтительным. Управление этой возможностью производится посредством переменной окружения `SYSTEMD_LESS`, в которой содержатся опции, передаваемые в less (программу постраничного просмотра, используемую по умолчанию). По умолчанию переменная имеет значение `FRSXMK` (для получения дополнительной информации смотрите less(1) и journalctl(1)).

Если убрать опцию `S`, будет достигнут требуемый результат. Например, запустите journalctl, как показано здесь:

    $ SYSTEMD_LESS=FRXMK journalctl

Для использования такого поведения по умолчанию, экспортируйте переменную из файла `~/.bashrc` или `~/.zshrc`.
Совет: Несмотря на то, что журнал хранится в двоичном формате, содержимое сообщений не изменяется. Это означает, что их можно просматривать при помощи strings, например, для восстановления системы в окружении без systemd. Пример команды:

    $ 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 и Пользователи и группы#Пользовательские группы.

Category:

- Logging (Русский)