# systemd (Русский)/Journal (Русский)

From ArchWiki
< Systemd (Русский)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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

systemd использует журнал (journal), собственную систему ведения логов, в связи с чем больше не требуется запускать отдельный демон логирования. Для чтения логов используйте следующую команду:

    # journalctl

В 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 -f -l 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

Category:

- Logging (Русский)