- systemd/Journal
- Contents
- Priority level
- Facility
- Filtering output
- Journal size limit
- Per unit size limit
- Clean journal files manually
- Journald in conjunction with syslog
- Forward journald to /dev/tty12
- Specify a different journal to view
- Journal access as user
- Использование journalctl для просмотра и анализа логов: подробный гайд
- Systemd
- Journald
- Файл конфигурации journald
- Использование journalctl для просмотра и анализа логов
- Фильтрация событий по важности
- Настройка хранения журналов
- Просмотр журналов загрузки
- Просмотр журнала за определенный период времени
- Просмотр сообщений ядра
- Просмотр журнала логов для определенного сервиса systemd или приложения
- Дополнительные опции просмотра
- Ограничение размера журнала
- Удаление журналов
- Заключение
systemd/Journal
systemd has its own logging system called the journal; running a separate logging daemon is not required. To read the log, use:
In Arch Linux, the directory /var/log/journal/ is a part of the systemd package, and the journal (when Storage= is set to auto in /etc/systemd/journald.conf ) will write to /var/log/journal/ . If that directory is deleted, systemd will not recreate it automatically and instead will write its logs to /run/systemd/journal in a nonpersistent way. However, the folder will be recreated if Storage=persistent is added to journald.conf and systemd-journald.service is restarted (or the system is rebooted).
Systemd journal classifies messages by Priority level and Facility. Logging classification corresponds to classic Syslog protocol (RFC 5424).
Contents
Priority level
A syslog severity code (in systemd called priority) is used to mark the importance of a message RFC 5424 6.2.1.
Value | Severity | Keyword | Description | Examples |
---|---|---|---|---|
0 | Emergency | emerg | System is unusable | Severe Kernel BUG, systemd dumped core. This level should not be used by applications. |
1 | Alert | alert | Should be corrected immediately | Vital subsystem goes out of work. Data loss. kernel: BUG: unable to handle kernel paging request at ffffc90403238ffc . |
2 | Critical | crit | Critical conditions | Crashes, coredumps. Like familiar flash: systemd-coredump[25319]: Process 25310 (plugin-containe) of user 1000 dumped core Failure in the system primary application, like X11. |
3 | Error | err | Error conditions | Not severe error reported: 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 | May indicate that an error will occur if action is not taken. | A non-root file system has only 1GB free. org.freedesktop. Notifications[1860]: (process:5999): Gtk-WARNING **: Locale not supported by C library. Using the fallback ‘C’ locale . |
5 | Notice | notice | Events that are unusual, but not error conditions. | 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 | Normal operational messages that require no action. | lvm[585]: 7 logical volume(s) in volume group «archvg» now active |
7 | Debug | debug | Information useful to developers for debugging the application. | kdeinit5[1900]: powerdevil: Scheduling inhibition from «:1.14» «firefox» with cookie 13 and reason «screen» |
These rules are recommendations, and the priority level of a given error is at the application developer’s discretion. It is always possible that the error will be at a higher or lower level than expected.
Facility
A syslog facility code is used to specify the type of program that is logging the message RFC 5424 6.2.1.
Facility code | Keyword | Description | Info |
---|---|---|---|
0 | kern | Kernel messages | |
1 | user | User-level messages | |
2 | Mail system | Archaic POSIX still supported and sometimes used (for more mail(1) ) | |
3 | daemon | System daemons | All daemons, including systemd and its subsystems |
4 | auth | Security/authorization messages | Also watch for different facility 10 |
5 | syslog | Messages generated internally by syslogd | For syslogd implementations (not used by systemd, see facility 3) |
6 | lpr | Line printer subsystem (archaic subsystem) | |
7 | news | Network news subsystem (archaic subsystem) | |
8 | uucp | UUCP subsystem (archaic subsystem) | |
9 | Clock daemon | systemd-timesyncd | |
10 | authpriv | Security/authorization messages | Also watch for different facility 4 |
11 | ftp | FTP daemon | |
12 | — | NTP subsystem | |
13 | — | Log audit | |
14 | — | Log alert | |
15 | cron | Scheduling daemon | |
16 | local0 | Local use 0 (local0) | |
17 | local1 | Local use 1 (local1) | |
18 | local2 | Local use 2 (local2) | |
19 | local3 | Local use 3 (local3) | |
20 | local4 | Local use 4 (local4) | |
21 | local5 | Local use 5 (local5) | |
22 | local6 | Local use 6 (local6) | |
23 | local7 | Local use 7 (local7) |
Useful facilities to watch: 0, 1, 3, 4, 9, 10, 15.
Filtering output
journalctl allows for the filtering of the output by specific fields. If there are many messages to display or filtering of large time span has to be done, the output of this command can be extensively delayed.
- Show all messages from this boot: However, often one is interested in messages not from the current, but from the previous boot (e.g. if an unrecoverable system crash happened). This is possible through optional offset parameter of the -b flag: journalctl -b -0 shows messages from the current boot, journalctl -b -1 from the previous boot, journalctl -b -2 from the second previous and so on – you can see the list of boots with their numbers by using journalctl —list-boots . See journalctl(1) for a full description; the semantics are more powerful than indicated here.
- Include explanations of log messages from the message catalog where available: Note that this feature should not be used when attaching logs to bug reports and support threads, as to limit extraneous output. You can list all known catalog entries by running journalctl —list-catalog .
- Show all messages from date (and optional time):
- Show all messages since 20 minutes ago:
- Follow new messages:
- Show all messages by a specific executable:
- Show all messages by a specific process:
- Show all messages by a specific unit:
- Show all messages from user services by a specific unit:
- Show kernel ring buffer:
- Show only error, critical and alert priority messages: You can use numeric log level too, like journalctl -p 3..1 . If single number/log level is used, journalctl -p 3 , then all higher priority log levels are also included (i.e. 0 to 3 in this case).
- Show auth.log equivalent by filtering on syslog facility:
- If the journal directory (by default located under /var/log/journal ) contains a large amount of log data then journalctl can take several minutes to filter output. It can be sped up significantly by using —file option to force journalctl to look only into most recent journal:
By omitting the S option, the output will be wrapped instead of truncated. For example, start journalctl as follows:
To set this behaviour as default, export the variable from
Journal size limit
If the journal is persistent (non-volatile), its size limit is set to a default value of 10% of the size of the underlying file system but capped at 4 GiB. For example, with /var/log/journal/ located on a 20 GiB partition, journal data may take up to 2 GiB. On a 50 GiB partition, it would max at 4 GiB. To confirm current limits on your system review systemd-journald unit logs:
The maximum size of the persistent journal can be controlled by uncommenting and changing the following:
It is also possible to use the drop-in snippets configuration override mechanism rather than editing the global configuration file. In this case, place the overrides under the [Journal] header:
Restart the systemd-journald.service after changing this setting to apply the new limit.
Per unit size limit
Edit the unit file for the service you wish to configure (for example sshd) and add LogNamespace=ssh in the [Service] section.
Then create /etc/systemd/journald@ssh.conf by copying /etc/systemd/journald.conf . After that, edit journald@ssh.conf and adjust SystemMaxUse to your liking.
Restarting the service should automatically start the new journal service systemd-journald@ssh.service . The logs from the namespaced service can be viewed with journalctl —namespace ssh .
Clean journal files manually
Journal files can be globally removed from /var/log/journal/ using e.g. rm , or can be trimmed according to various criteria using journalctl . For example:
- Remove archived journal files until the disk space they use falls below 100M:
- Make all journal files contain no data older than 2 weeks.
See journalctl(1) for more info.
Journald in conjunction with syslog
Compatibility with a classic, non-journald aware syslog implementation can be provided by letting systemd forward all messages via the socket /run/systemd/journal/syslog . To make the syslog daemon work with the journal, it has to bind to this socket instead of /dev/log (official announcement).
The default journald.conf for forwarding to the socket is ForwardToSyslog=no to avoid system overhead, because rsyslog or syslog-ng pull the messages from the journal by itself.
Forward journald to /dev/tty12
Create a drop-in directory /etc/systemd/journald.conf.d and create a fw-tty12.conf file in it:
Specify a different journal to view
There may be a need to check the logs of another system that is dead in the water, like booting from a live system to recover a production system. In such case, one can mount the disk in e.g. /mnt , and specify the journal path via -D / —directory , like so:
Journal access as user
By default, a regular user only has access to their own per-user journal. To grant read access for the system journal as a regular user, you can add that user to the systemd-journal user group. Members of the adm and wheel groups are also given read access.
Источник
Использование journalctl для просмотра и анализа логов: подробный гайд
Journalctl — отличный инструмент для анализа логов, обычно один из первых с которым знакомятся начинающие администраторы linux систем. Встроенные возможности ротации, богатые возможности фильтрации и возможность просматривать логи всех systemd unit-сервисов одним инструментом очень удобны и заметно облегчают работу системным администраторам.
Эта статья рассматривает основные возможности утилиты journalctl и различные варианты ее применения. С помощью journalctl можно просматривать логи системы, чтобы решить возникшие проблемы на рабочей станции или сервере использующие дистрибутив linux с демоном инициализации systemd, де-факто уже ставшим стандартом в современных Linux-системах, например: RHEL, CentOS, Fedora, Debian и многих других.
Существует мнение, что systemd не так уж и хорош — он нагружает систему и это все еще предмет для споров на сегодняшний день, но нельзя отрицать, что он предоставляет прекрасный набор инструментов для управления системой и поиска проблем. Представьте, что вам приходится иметь дело с проблемным сервером, который даже не загружается — в таком случае можно загрузиться с live-дистрибутива, смонтировать системный раздел и просмотреть логи systemd, чтобы понять, в чем проблема.
Systemd
Systemd состоит из трех основных компонентов:
- systemd — менеджер системы и сервисов
- systemctl — утилита для просмотра и управление статусом сервисов
- systemd-analyze — предоставляет статистику по процессу загрузки системы, проверяет корректность unit-файлов и так же имеет возможности отладки systemd
Journald
Journald — системный демон журналов systemd. Systemd спроектирован так, чтобы централизованно управлять системными логами от процессов, приложений и т.д. Все такие события обрабатываются демоном journald, он собирает логи со всей системы и сохраняет их в бинарных файлах.
Преимуществ централизованного логирования событий в бинарном формате достаточно много, например системные логи можно транслировать в различные форматы, такие как простой текст, или в JSON, при необходимости. Так же довольно просто можно отследить лог вплоть до одиночного события используя фильтры даты и времени.
Файлы логов journald могут собирать тысячи событий и они обновляются с каждым новым событием, поэтому если ваша Linux-система работает достаточно долго — размер файлов с логами может достигать несколько гигабайт и более. Поэтому анализ таких логов может происходить с задержками, в таком случае, при анализе логов можно фильтровать вывод, чтобы ускорить работу.
Файл конфигурации journald
Файл конфигурации можно найти по следующему пути: /etc/systemd/journald.conf, он содержит различные настройки journald, я бы не рекомендовал изменять этот файл, если вы точно не уверены в том, что делаете.
Каталог с журналом journald располагается /run/log/journal (в том случае, если не настроено постоянное хранение журналов, но об этом позже).
Файлы хранятся в бинарном формате, поэтому нормально их просмотреть с помощью cat или nano, как привыкли многие администраторы — не получится.
Использование journalctl для просмотра и анализа логов
Основная команда для просмотра:
Она выведет все записи из всех журналов, включая ошибки и предупреждения, начиная с того момента, когда система начала загружаться. Старые записи событий будут наверху, более новые — внизу, вы можете использовать PageUp и PageDown чтобы перемещаться по списку, Enter — чтобы пролистывать журнал построчно и Q — чтобы выйти.
По умолчанию journalctl выводит время событий согласно настроенного в вашей системе часового пояса, также journalctl позволяет просмотреть логи с временем UTC (в этом стандарте времени сохраняются события внутри файлов journald), для этого можно использовать команду:
Фильтрация событий по важности
Система записывает события с различными уровнями важности, какие-то события могут быть предупреждением, которое можно проигнорировать, какие-то могут быть критическими ошибками. Если мы хотим просмотреть только ошибки, игнорируя другие сообщения, введем команду с указанием кода важности:
# journalctl -p 0
Для уровней важности, приняты следующие обозначения:
- 0: emergency (неработоспособность системы)
- 1: alerts (предупреждения, требующие немедленного вмешательства)
- 2: critical (критическое состояние)
- 3: errors (ошибки)
- 4: warning (предупреждения)
- 5: notice (уведомления)
- 6: info (информационные сообщения)
- 7: debug (отладочные сообщения)
Когда вы указываете код важности, journalctl выведет все сообщения с этим кодом и выше. Например если мы укажем опцию -p 2, journalctl покажет все сообщения с уровнями 2, 1 и 0.
Настройка хранения журналов
По умолчанию journald перезаписывает свои журналы логов при каждой перезагрузке, и вызов journalctl выведет журнал логов начиная с текущей загрузки системы.
Если необходимо настроить постоянное сохранение логов, потребуется отдельно это настроить, т.к. разработчики отказались от постоянного хранения всех журналов, чтобы не дублировать rsyslog.
Когда в конфигурационном файле /etc/systemd/journald.conf параметру Storage= задано значение auto) и каталога /var/log/journal/ не существует, журнал будет записываться в /run/log/journal без сохранения между перезагрузками, если /var/log/journal/ существует, журналы будут сохраняться в нем, на постоянной основе, но если каталог будет удален, systemd не пересоздаст его автоматически и вместо этого будет вести журнал снова в /run/systemd/journal без сохранения. Каталог может быть пересоздан в таком случае, если добавить Storage=persistent в journald.conf и перезапустить systemd-journald.service (или перезагрузиться).
Создадим каталог для хранения журналов, установим необходимые атрибуты и перезапустим службу:
Просмотр журналов загрузки
Если journald был настроен на постоянное хранение журналов, мы можем просматривать журналы логов по каждой отдельной загрузке, следующая команда выведет список журналов:
Первый номер показывает номер журнала, который можно использовать для просмотра журнала определенной сессии. Второй номер boot ID так же можно использовать для просмотра отдельного журнала.
Следующие две даты, промежуток времени в течении которого в него записывались логи, это удобно если вы хотите найти логи за определенный период.
Например, чтобы просмотреть журнал начиная с текущего старта системы, можно использовать команду:
А для того, чтобы просмотреть журнал предыдущей загрузки:
Просмотр журнала за определенный период времени
Journalctl позволяет использовать такие служебные слова как “yesterday” (вчера), “today” (сегодня), “tomorrow” (завтра), или “now” (сейчас).
Поэтому мы можем использовать опцию «—since» (с начала какого периода выводить журнал).
С определенной даты и времени:
С определенной даты и по определенное дату и время:
Со вчерашнего дня:
С 9 утра и до момента, час назад:
Просмотр сообщений ядра
Чтобы просмотреть сообщения от ядра Linux за текущую загрузку, используйте команду с ключом -k:
Просмотр журнала логов для определенного сервиса systemd или приложения
Вы можете отфильтровать логи по определенному сервису systemd. Например, что бы просмотреть логи от NetworkManager, можно использовать следующую команду:
Если нужно найти название сервиса, используйте команду:
Так же можно просмотреть лог приложения, указав его исполняемый файл, например чтобы просмотреть все сообщения от nginx за сегодня, мы можем использовать команду:
Или указав конкретный PID:
Дополнительные опции просмотра
Следить за появлением новых сообщений (аналог tail -f):
Открыть журнал «перемотав» его к последней записи:
Если в каталоге с журналами очень много данных, то фильтрация вывода journalctl может занять некоторое время, процесс можно значительно ускорить с помощью опции —file, указав journalctl только нужный нам журнал, за которым мы хотим следить:
По умолчанию journalctl отсекает части строк, которые не вписываются в экран по ширине, хотя иногда перенос строк может оказаться более предпочтительным. Управление этой возможностью производится посредством переменной окружения SYSTEMD_LESS, в которой содержатся опции, передаваемые в less (программу постраничного просмотра, используемую по умолчанию). По умолчанию переменная имеет значение FRSXMK, если убрать опцию S, строки не будут обрезаться.
Ограничение размера журнала
Если journald настроен что бы сохранять журналы после перезагрузки, то по умолчанию размер журнала ограничен 10% от объема файлового раздела и максимально может занять 4 Гб дискового пространства.
Максимальный объем журнала можно скорректировать, раскомментировав и отредактировав следующий параметр в файле конфигурации journald:
Удаление журналов
Удалить файлы архивных журналов, можно вручную с помощью rm или использовав journalctl.
Удалить журналы, оставив только последние 100 Мб:
Удалить журналы, оставив журналы только за последние 7 дней:
Заключение
Служба журналирования логов journald очень мощный и гибкий инструмент, и если вы знаете как его использовать, он может сделать вашу жизнь намного проще во время поиска причин проблем с системой или ее сервисами.
Источник