Journald: различия между версиями

Материал из ALT Linux Wiki
 
(не показано 68 промежуточных версий 16 участников)
Строка 1: Строка 1:
==Основные команды==
{{начало цитаты|источник=https://ru.opensuse.org/SDB:Systemd#systemd-journalctl}}
Начиная с версии v38+ systemd имеет собственную систему регистрации событий, которая по умолчанию включена в дистрибутив openSUSE 12.2+. systemd-journalctl является неотъемлемой частью systemd и не может использоваться отдельно. Журналы данного инструмента хранятся в бинарном виде в /var/log/journal, что исключает возможность просмотра содержимого данных файлов стандартными утилитами обработки текстовых данных. При вызове инструмента без параметров покажет все содержимое журнала аналогичного классической системе лог-файлов syslog ( /var/log/messages )
{{конец цитаты}}
 
Подробное описание работы с журналом, см (англ)


Чтение всех логов:
<source lang="bash">
man systemd-journald
man journalctl
</source>
 
==Основные сведения==
===Ключи journalctl===
* Получить актуальные ключи команды:
<source lang="bash">
journalctl --help
</source>
 
* Чтение всех логов:
<source lang="bash">
<source lang="bash">
journalctl
journalctl
</source>
</source>
Логи с момента запуска системы:
 
* Логи с момента запуска системы:
<source lang="bash">
<source lang="bash">
journalctl -b
journalctl -b
</source>
</source>
Если был крах системы, можно ввести параметр -1 и посмотреть логи с предыдущего запуска системы (-2 с двух предыдущих и.т.д):
 
* Если был крах системы, можно ввести параметр -1 и посмотреть логи с предыдущего запуска системы (-2 логи сеанса за два сеанса до текущего и т.д.) <ref name="sis">Работает пока только в Сизифе, уточняйте через  journalctl --help</ref>:
<source lang="bash">
<source lang="bash">
journalctl -b -1
journalctl -b -1  
</source>
</source>
Вывод последней записи:
 
* Показывать записи журнала с момента запуска системы с расшифровкой ошибок:
<source lang="bash">
journalctl -xb
</source>
 
* Показать самые последние записи журнала, и продолжать печатать новые записи, при добавлении их в журнал:
<source lang="bash">
<source lang="bash">
journalctl -f
journalctl -f
</source>
</source>


==Настройка==
*Остальные ключи
Знак = указывает на введение контрольных значений, описание берем из man.
<source lang="bash">
--no-full, --full, -l - отображать все доступные поля;
-a, --all - отображать все поля в выводе full, даже если они содержат непечатаемые символы или слишком длинные;
-e, --pager-end - отобразить только последние сообщения из журнала;
-n, --lines= - количество строк, которые нужно отображать на одном экране, по умолчанию 10;
--no-tail - отображать все строки доступные строки;
-r, --reverse - отображать новые события в начале списка;
-o, --output= - настраивает формат вывода лога;
--output-fields= - поля, которые нужно выводить;
-x, --catalog - добавить к информации об ошибках пояснения, ссылки на документацию или форумы там, где это возможно;
-q, --quiet - не показывать все информационные сообщения;
-m, --merge - показывать сообщения из всех доступных журналов;
-b, --boot - показать сообщения с момента определенной загрузки системы. По умолчанию используется последняя загрузка;
--list-boots - показать список сохраненных загрузок системы;
-k, --dmesg - показывает сообщения только от ядра. Аналог вызова команды dmesg;
-t, --identifier=SYSLOG_IDENTIFIER - показать сообщения с выбранным идентификатором;
-u, --unit=UNIT|PATTERN - показать сообщения от выбранного сервиса;
--user-unit= - фильтровать сообщения от выбранной сессии;
-p, --priority= - фильтровать сообщения по их приоритету. Есть восемь уровней приоритета, от 0 до 7;
-g, --grep= - фильтрация по тексту сообщения;
-c, --cursor= - начать просмотр сообщений с указанного места;
-S, --since=, -U, --until= - фильтрация по дате и времени;
-F, --field= - вывести все данные из выбранного поля;
-N, --fields - вывести все доступные поля;
--system - выводить только системные сообщения;
--user - выводить только сообщения пользователя;
-M, --machine= - выводить сообщения от определенного контейнера;
--header - выводить заголовки полей при выводе журнала;
--disk-usage - вывести общий размер лог файлов на диске;
--list-catalog - вывести все доступные подсказки для ошибок;
--sync - синхронизировать все не сохраненные журналы с файловой системой;
--flush - перенести все данные из каталога /run/log/journal в /var/log/journal;
--rotate - запустить ротацию логов;
--no-pager - выводить информацию из журнала без возможности листать страницы;
-f, --follow - выводить новые сообщения в реальном времени, как в команде tail;
--vacuum-time= - очистить логи, давностью больше указанного периода;
--vacuum-size= - очистить логи, чтобы размер хранилища соответствовал указанному.
</source>
 
===Вывод лога в текстовый файл===
----
Если вам нужно вывести лог в текстовый файл (например, чтобы [[BugTracking|сообщить]] разработчикам об ошибке), используйте конструкцию <source lang="bash">
'команда' > 'путь к текстовому файлу'
</source>
 
Пример:
<source lang="bash">
journalctl -b > /home/user/debug.log
</source>
 
===Фильтрация по дате и времени===
----
 
Для фильтрации по дате и времени важны два ключа
 
* --since - вывод от такого-то момента времени
 
* --until - вывод до такого-то момента времени
 
в качестве значений для этих ключей могут использоваться:
 
— Формат YYYY-MM-DD HH:MM:SS
<source lang="bash">
journalctl --since "2017-05-05 00:01" --until "2017-05-06 01:40"
</source>
 
— Слова «yesterday», «today», «tomorrow», «now»:
<source lang="bash">
journalctl --since "yesterday" --until "2017-05-06 01:40"
</source>
 
— Удобочитаемые выражения вида:
<source lang="bash">
journalctl --since "10 hours ago"
journalctl --since "1 minute ago"
journalctl --since "50 minute ago" --until "5 minute ago"
</source>
 
====Примеры====
*Показать все сообщения за последние 20 минут:
<source lang="bash">
journalctl --since "20 min ago"
</source>
 
*Просмотреть все сообщения начиная с 20 июля 2015 года 17:15:
<source lang="bash">
journalctl --since "2015-07-20 17:15:00"
</source>
 
*Просмотреть все сообщения начиная со вчерашнего дня:
<source lang="bash">
journalctl --since "yesterday"
</source>
 
*Просмотреть все сообщения с 9:00 до настоящего времени:
<source lang="bash">
journalctl --since "09:00" --until "now"
</source>
 
*Просмотреть все сообщения с 9:00 до прошлого часа:
<source lang="bash">
journalctl --since "10:00" --until "1 hour ago"
</source>
 
===Фильтрация событий по важности===
 
Система записывает события с различными уровнями важности, какие-то события могут быть предупреждением, которое можно
проигнорировать, какие-то могут быть критическими ошибками. Если необходимо просмотреть только ошибки, игнорируя другие сообщения, введем команду с указанием кода важности:
<source lang="bash">
journalctl -p 0
</source>
Для уровней важности, приняты следующие обозначения:
<source lang="bash">
0: emergency (неработоспособность системы)
1: alerts (предупреждения, требующие немедленного вмешательства)
2: critical (критическое состояние)
3: errors (ошибки)
4: warning (предупреждения)
5: notice (уведомления)
6: info (информационные сообщения)
7: debug (отладочные сообщения)
</source>
Когда вы указываете код важности, journalctl выведет все сообщения с этим кодом и выше. Например если мы укажем опцию -p 2, journalctl покажет все сообщения с уровнями 2, 1 и 0.
 
===Фильтрация по другим параметрам===
 
* Показывать в реальном времени все записи, независимо от их размера и кодировки:
<source lang="bash">
journalctl -af
</source>
 
* Просмотр сообщений ядра <ref name ="sis"/>:
<source lang="bash">
journalctl -k
</source>
 
* Все сообщение конкретной утилиты, например, systemd:
<source lang="bash">
journalctl /usr/lib/systemd/systemd
</source>
 
* Все сообщения конкретного процесса:
<source lang="bash">
journalctl _PID=1
</source>


Файл настройки находится в /etc/systemd/journald.conf и состоит из следующих секций:
* Все сообщения конкретного приложения или службы:
<source lang="bash">
journalctl -u netcfg
</source>
 
* Все сообщения процессов, запущенных от имени конкретного пользователя:
<source lang="bash">
journalctl _UID=33
</source>
 
*Показать сообщения от пользовательской службы конкретного юнита:


* Storage= Указывает, где хранить журнал. Доступны следующие параметры:
<source lang="bash">
** "volatile" Журнал хранится в оперативной памяти, т.е. в каталоге /run/log/journal.
$ journalctl --user -u dbus
** "persistent", Данные хранятся на диске, т.е. в каталоге /var/log/journal
</source>
** "auto"
** "none" Журнал не ведётся
* Compress= Принимает значения "yes" или "no". Если включена (по-умолчанию) сообщения перед записью в журнал, будут сжиматься.
* Seal= Принимает значения "yes" или "no". Если включена (по-умолчанию) будет включена защита Forward Secure Sealing (FSS), которая позволяет накладывать криптографические отпечатки на журнал системных логов.
* SplitMode= Определяет доступ к журналу пользователям. Доступны следующие параметры:
** "uid" Все пользователи получают доступ к чтению системного журнала. Используется по-умочанию.
** "login" Каждый пользователь может читать только сообщения, относящиеся к его сеансу.
** "none" Пользователи не имеют доступа к системному журналу.


* SyncIntervalSec= Таймаут, после которого происходит синхронизация и запись журнала на диск. Относится только к уровням ERR, WARNING, NOTICE, INFO, DEBUG. Сообщения уровня CRIT, ALERT, EMERG записываются сразу на диск.
===Журнал===
* RateLimitInterval= и RateLimitBurst= Настройки ограничения скорости генерации сообщений для каждой службы. Если в интервале времени, определяемого RateLimitInterval =, больше сообщений, чем указано в RateLimitBurst = регистрируются службой, все дальнейшие сообщения в интервале отбрасываются, пока интервал не закончится.При этом генерируется сообщение о количестве отброшенных сообщений. По умолчанию 1000 сообщений за 30 секунд. Единицы измерения: "s", "min", "h", "ms", "us". Чтобы выключить ограничение скорости, установите значения в 0.
----
* SystemMaxUse=, SystemKeepFree=, SystemMaxFileSize=, RuntimeMaxUse=, RuntimeKeepFree=, RuntimeMaxFileSize= Определяет ограничения на размер журнала. Параметры с префиксом "System" определяют максимальный размер журнала, который может быть сохранён на файловую систему, а именно в каталог /var/log/journal. Параметры с префиксом "Runtime" определяют максимальный размер журнала, который может быть сохранён в оперативную память, а именно в каталог /run/log/journal. SystemMaxUse = и RuntimeMaxUse = сколько дискового пространства Systemd-journald может использовать под журнал (по-умолчанию 10% и 15% соответственно). SystemKeepFree = и RuntimeKeepFree = определяют сколько дискового пространства Systemd-journald должен оставить свободным для других целей. SystemMaxFileSize = и RuntimeMaxFileSize = определяют максимальный размер файлов журнала (по-умолчанию 1/8 от SystemMaxUse = или RuntimeMaxUse). Единицы измерения: K, M, G, T, P, E.
* Журнал хранится в двоичном формате, поэтому в окружении, где не установлен systemd, его логи можно посмотреть с помощью команды strings:
<source lang="bash">
strings /mnt/arch/var/log/journal/af4967d77fba44c6b093d0e9862f6ddd/system.journal | grep -i сообщение
</source>


* MaxRetentionSec= Максимальное время хранения записей журнала. Единицы измерения: "year", "month", "week", "day", "h" or " m"
* Если же имеется файл журнала, например, с другого компьютера и systemd установлен (должно быть достаточно пакета {{pkg|journalctl}} из Sisyphus), то посмотреть его содержимое проще:


* MaxFileSec= Максимальное время хранения записей в одном файле журнала, после которого он переводится в следующий.


*ForwardToSyslog=, ForwardToKMsg=, ForwardToConsole=, ForwardToWall= Определяют куда направлять сообщения: в традиционный системный журнал Syslog, в буфер журнала ядра (kmsg), на системную консоль, или на стену, чтобы было видно всем зарегистрированным пользователям. Эти опции принимают логические аргументы. Если переадресация на Syslog включен, но не Syslog демон не работает, соответствующий параметр не имеет никакого эффекта. По умолчанию, только стена включена. Эти параметры могут быть переопределены во время загрузки с параметрами командной строки ядра "systemd.journald.forward_to_syslog =", "systemd.journald.forward_to_kmsg =", "systemd.journald.forward_to_console =" и "systemd.journald.forward_to_wall =". При пересылке в консоль, должен быть установлен TTYPath =, как будет описано ниже.
из директории
* TTYPath= Назначает консоль TTY, для вывода сооющений, если установлен параметр ForwardToConsole=yes. По-умолчанию, используется /dev/console. Для того, чтобы вывести на 12 консоль устанавливаем TTYPath=/dev/tty12
<source lang="bash">
* MaxLevelStore=, MaxLevelSyslog=, MaxLevelKMsg=, MaxLevelConsole=, MaxLevelWall= Определяет максимальный уровень сообщений который сохраняется в журнал, выводится на традиционный системный журнал Syslog, буфер журнала ядра (kmsg), консоль или стену. Значения: "emerg", "alert", "crit", "err", "warning", "notice", "info", "debug" или цифры от 0 до 7 (соответствуют уровням).
journalctl -D /mnt/arch/var/log/journal/af4967d77fba44c6b093d0e9862f6ddd
</source>
 
из файла
<source lang="bash">
journalctl --file /mnt/arch/var/log/journal/af4967d77fba44c6b093d0e9862f6ddd/system.journal
</source>
 
===Недавние события===
----
*Просмотр информации о недавних событиях
<source lang="bash">
$ journalctl -n
</source>
 
*По умолчанию на консоль выводится информация о последних 10 событиях. С опцией -n можно указать необходимое число событий:
<source lang="bash">
$ journalctl -n 20
</source>


==Анализ этапа загрузки==
==Анализ этапа загрузки==
Строка 60: Строка 252:
</source>
</source>


[[Категория:Admin]]
== Основные настройки ==
Файл настройки находится в /etc/systemd/journald.conf и состоит из следующих секций:
 
* '''Storage=''' Указывает, где хранить журнал. Доступны следующие параметры:
** '''volatile''' Журнал хранится в оперативной памяти, т.е. в каталоге /run/log/journal.
** '''persistent''' Данные хранятся на диске, т.е. в каталоге /var/log/journal
** '''auto''' используется по умолчанию
** '''none''' Журнал не ведётся
 
* '''Compress=''' Принимает значения "yes" или "no". Если включена (по умолчанию) сообщения перед записью в журнал, будут сжиматься.
 
* '''Seal=''' Принимает значения "yes" или "no". Если включена (по умолчанию) будет включена защита Forward Secure Sealing (FSS), которая позволяет накладывать криптографические отпечатки на журнал системных логов.
 
* '''SplitMode=''' Определяет доступ к журналу пользователям. Доступны следующие параметры:
** '''uid''' Все пользователи получают доступ к чтению системного журнала. Используется по умолчанию.
** '''login''' Каждый пользователь может читать только сообщения, относящиеся к его сеансу.
** '''none''' Пользователи не имеют доступа к системному журналу.
 
* '''SyncIntervalSec=''' Таймаут, после которого происходит синхронизация и запись журнала на диск. Относится только к уровням '''ERR, WARNING, NOTICE, INFO, DEBUG.''' Сообщения уровня '''CRIT, ALERT, EMERG''' записываются сразу на диск.
 
* '''RateLimitInterval=''' и '''RateLimitBurst=''' Настройки ограничения скорости генерации сообщений для каждой службы. Если в интервале времени, определяемого '''RateLimitInterval=''', больше сообщений, чем указано в '''RateLimitBurst=''' регистрируются службой, все дальнейшие сообщения в интервале отбрасываются, пока интервал не закончится.При этом генерируется сообщение о количестве отброшенных сообщений. По умолчанию 1000 сообщений за 30 секунд. Единицы измерения: '''"s", "min", "h", "ms", "us"'''. Чтобы выключить ограничение скорости, установите значения в 0.
 
* '''MaxRetentionSec=''' Максимальное время хранения записей журнала. Единицы измерения: '''year, month, week, day, h''' или '''m'''
 
* '''MaxFileSec=''' Максимальное время хранения записей в одном файле журнала, после которого он переводится в следующий.
 
* '''ForwardToSyslog=, ForwardToKMsg=, ForwardToConsole=, ForwardToWall='''  Определяют куда направлять сообщения: в традиционный системный журнал ''Syslog'', в буфер журнала ядра (''kmsg''), на системную консоль, или на стену, чтобы было видно всем зарегистрированным пользователям. Эти опции принимают логические аргументы. Если переадресация на ''Syslog'' включен, но ''Syslog'' демон не работает, соответствующий параметр не имеет никакого эффекта. По умолчанию, только стена включена. Эти параметры могут быть переопределены во время загрузки с параметрами командной строки ядра '''systemd.journald.forward_to_syslog =''', '''systemd.journald.forward_to_kmsg =''', '''systemd.journald.forward_to_console =''' и '''systemd.journald.forward_to_wall ='''. При пересылке в консоль, должен быть установлен '''TTYPath =''', как будет описано ниже.
 
* '''TTYPath=''' Назначает консоль ''TTY'', для вывода сообщений, если установлен параметр '''ForwardToConsole=yes'''. По умолчанию, используется ''/dev/console''. Для того, чтобы вывести на 12 консоль, устанавливаем '''TTYPath=/dev/tty12'''. Для того, чтобы вывести на последовательный порт, устанавливаем '''TTYPath=/dev/ttySX''', где X номер com-порта.
 
* '''MaxLevelStore=, MaxLevelSyslog=, MaxLevelKMsg=, MaxLevelConsole=, MaxLevelWall=''' Определяет максимальный уровень сообщений который сохраняется в журнал, выводится на традиционный системный журнал ''Syslog'', буфер журнала ядра (''kmsg''), консоль или стену. Значения: '''emerg, alert, crit, err, warning, notice, info, debug''' или цифры от 0 до 7 (соответствуют уровням).
 
== Управление логированием ==
*Определение текущего объёма логов
Со временем объём логов растёт, и они занимают всё больше места на жёстком диске. Узнать объём имеющихся на текущий момент логов можно с помощью команды:
<source lang="bash">
journalctl --disk-usage
</source>
 
*Ротация логов
Настройка ротации логов осуществляется с помощью опций −−vacuum-size и −−vacuum-time.
Первая из них устанавливает предельно допустимый размер для хранимых на диске логов (в нашем примере — 1 ГБ):
<source lang="bash">
journalctl --vacuum-size=1G
</source>
 
Как только объём логов превысит указанную цифру, лишние файлы будут автоматические удалены.
Аналогичным образом работает опция −−vacuum-time. Она устанавливает для логов срок хранения, по истечении которого они будут автоматически удалены:
 
<source lang="bash">
journalctl --vacuum-time=1years
</source>
 
*'''Настройка ротации в конфигурационном файле'''. Настройки ротации логов можно также прописать в конфигурационном файле /еtc/systemd/journald.conf, который включает в числе прочих следующие параметры:
**'''SystemMaxUse=''' — максимальный объём, который логи могут занимать на диске;
**'''SystemKeepFree=''' — объём свободного места, которое должно оставаться на диске после сохранения логов;
**'''SystemMaxFileSize=''' — объём файла лога, по достижении которого он должен быть удален с диска;
**'''RuntimeMaxUse=''' — максимальный объём, который логи могут занимать в файловой системе /run;
**'''RuntimeKeepFree=''' — объём свободного места, которое должно оставаться в файловой системе /run после сохранения логов;
**'''RuntimeMaxFileSize=''' — объём файла лога, по достижении которого он должен быть удален из файловой системы /run.
 
Единицы измерения: K, M, G, T, P, E.
 
== Возврат syslog ==
Допускается либо параллельное ведение журналов в syslog, либо полное переключение на него. За это отвечают параметры Storage и ForwardToSyslog в /etc/systemd/journald.conf:
[Journal]
Storage=none
ForwardToSyslog=yes
 
После этого надо установить logrotate и один из вариантов syslog.
 
При этом следует иметь ввиду это: [https://lists.freedesktop.org/archives/systemd-devel/2012-January/004188.html Compatibility with classic syslog implementations is provided, via a socket /run/systemd/journal/syslog, to which all messages are forwarded, regardless whether they came in via /dev/log, the journal native protocol or any other source. To make your syslog implementaiton work with this make sure that it binds to that socket instead of /dev/log which is now systemd-journal property.]
 
=== syslog-ng ===
Начиная со сборки 3.24.1-alt1 следует установить пакет syslog-ng-journal: <s>[[altbug:36454]]</s>.
 
=== rsyslog ===
Установить пакет rsyslog-classic.
 
 
==== На стороне отправителя сообщений (клиента) ====
Создать файл /etc/rsyslog.d/all.conf, в нём прописать протокол (@@ - tcp, @ - udp) и адрес доставки сообщений
 
*.* @@192.168.0.111:514
 
==== На стороне приёмника сообщений (сервера) ====
Раскомментировать в /etc/rsyslog.d/00_common.conf строки
 
#для udp
module(load="imudp")
input(type="imudp" port="514")
#для tcp
module(load="imtcp")
input(type="imtcp" port="514")
 
Создать свой шаблон для логов /etc/rsyslog.d/myrules.conf
$template remote-incoming-logs,"/var/log/%HOSTNAME/%PROGRAMNAME.log"
*.* ?remote-incoming-logs
 
== Запись в журнал из скрипта ==
echo "MESSAGE" | systemd-cat -t myunit
 
где ''myunit'' — имя юнита.
 
== Ссылки ==
* [https://ru.opensuse.org/SDB:Systemd#systemd-journalctl Описание демона systemd-journalctl На Wiki OpenSuse]
*[[Systemd]]
* [http://habrahabr.ru/company/selectel/blog/264731 Статья на Хабрахабр "Управление логгированием в systemd"]
*[[Участник:HihinRuslan/Systemd| Улучшаем Systemd]]
 
Примечания :
{{примечания}}
 
[[Категория:Systemd]]

Текущая версия от 15:16, 11 июня 2024

https://ru.opensuse.org/SDB:Systemd#systemd-journalctl:

Начиная с версии v38+ systemd имеет собственную систему регистрации событий, которая по умолчанию включена в дистрибутив openSUSE 12.2+. systemd-journalctl является неотъемлемой частью systemd и не может использоваться отдельно. Журналы данного инструмента хранятся в бинарном виде в /var/log/journal, что исключает возможность просмотра содержимого данных файлов стандартными утилитами обработки текстовых данных. При вызове инструмента без параметров покажет все содержимое журнала аналогичного классической системе лог-файлов syslog ( /var/log/messages )

Подробное описание работы с журналом, см (англ)

man systemd-journald
man journalctl

Основные сведения

Ключи journalctl

  • Получить актуальные ключи команды:
journalctl --help
  • Чтение всех логов:
journalctl
  • Логи с момента запуска системы:
journalctl -b
  • Если был крах системы, можно ввести параметр -1 и посмотреть логи с предыдущего запуска системы (-2 логи сеанса за два сеанса до текущего и т.д.) [1]:
journalctl -b -1
  • Показывать записи журнала с момента запуска системы с расшифровкой ошибок:
journalctl -xb
  • Показать самые последние записи журнала, и продолжать печатать новые записи, при добавлении их в журнал:
journalctl -f
  • Остальные ключи

Знак = указывает на введение контрольных значений, описание берем из man.

--no-full, --full, -l - отображать все доступные поля;
-a, --all - отображать все поля в выводе full, даже если они содержат непечатаемые символы или слишком длинные;
-e, --pager-end - отобразить только последние сообщения из журнала;
-n, --lines= - количество строк, которые нужно отображать на одном экране, по умолчанию 10;
--no-tail - отображать все строки доступные строки;
-r, --reverse - отображать новые события в начале списка;
-o, --output= - настраивает формат вывода лога;
--output-fields= - поля, которые нужно выводить;
-x, --catalog - добавить к информации об ошибках пояснения, ссылки на документацию или форумы там, где это возможно;
-q, --quiet - не показывать все информационные сообщения;
-m, --merge - показывать сообщения из всех доступных журналов;
-b, --boot - показать сообщения с момента определенной загрузки системы. По умолчанию используется последняя загрузка;
--list-boots - показать список сохраненных загрузок системы;
-k, --dmesg - показывает сообщения только от ядра. Аналог вызова команды dmesg;
-t, --identifier=SYSLOG_IDENTIFIER - показать сообщения с выбранным идентификатором;
-u, --unit=UNIT|PATTERN - показать сообщения от выбранного сервиса;
--user-unit= - фильтровать сообщения от выбранной сессии;
-p, --priority= - фильтровать сообщения по их приоритету. Есть восемь уровней приоритета, от 0 до 7;
-g, --grep= - фильтрация по тексту сообщения;
-c, --cursor= - начать просмотр сообщений с указанного места;
-S, --since=, -U, --until= - фильтрация по дате и времени;
-F, --field= - вывести все данные из выбранного поля;
-N, --fields - вывести все доступные поля;
--system - выводить только системные сообщения;
--user - выводить только сообщения пользователя;
-M, --machine= - выводить сообщения от определенного контейнера;
--header - выводить заголовки полей при выводе журнала;
--disk-usage - вывести общий размер лог файлов на диске;
--list-catalog - вывести все доступные подсказки для ошибок;
--sync - синхронизировать все не сохраненные журналы с файловой системой;
--flush - перенести все данные из каталога /run/log/journal в /var/log/journal;
--rotate - запустить ротацию логов;
--no-pager - выводить информацию из журнала без возможности листать страницы;
-f, --follow - выводить новые сообщения в реальном времени, как в команде tail;
--vacuum-time= - очистить логи, давностью больше указанного периода;
--vacuum-size= - очистить логи, чтобы размер хранилища соответствовал указанному.

Вывод лога в текстовый файл


Если вам нужно вывести лог в текстовый файл (например, чтобы сообщить разработчикам об ошибке), используйте конструкцию

'команда' > 'путь к текстовому файлу'

Пример:

journalctl -b > /home/user/debug.log

Фильтрация по дате и времени


Для фильтрации по дате и времени важны два ключа

  • --since - вывод от такого-то момента времени
  • --until - вывод до такого-то момента времени

в качестве значений для этих ключей могут использоваться:

— Формат YYYY-MM-DD HH:MM:SS

journalctl --since "2017-05-05 00:01" --until "2017-05-06 01:40"

— Слова «yesterday», «today», «tomorrow», «now»:

journalctl --since "yesterday" --until "2017-05-06 01:40"

— Удобочитаемые выражения вида:

journalctl --since "10 hours ago"
journalctl --since "1 minute ago"
journalctl --since "50 minute ago" --until "5 minute ago"

Примеры

  • Показать все сообщения за последние 20 минут:
journalctl --since "20 min ago"
  • Просмотреть все сообщения начиная с 20 июля 2015 года 17:15:
journalctl --since "2015-07-20 17:15:00"
  • Просмотреть все сообщения начиная со вчерашнего дня:
journalctl --since "yesterday"
  • Просмотреть все сообщения с 9:00 до настоящего времени:
journalctl --since "09:00" --until "now"
  • Просмотреть все сообщения с 9:00 до прошлого часа:
journalctl --since "10:00" --until "1 hour ago"

Фильтрация событий по важности

Система записывает события с различными уровнями важности, какие-то события могут быть предупреждением, которое можно проигнорировать, какие-то могут быть критическими ошибками. Если необходимо просмотреть только ошибки, игнорируя другие сообщения, введем команду с указанием кода важности:

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.

Фильтрация по другим параметрам

  • Показывать в реальном времени все записи, независимо от их размера и кодировки:
journalctl -af
  • Просмотр сообщений ядра [1]:
journalctl -k
  • Все сообщение конкретной утилиты, например, systemd:
journalctl /usr/lib/systemd/systemd
  • Все сообщения конкретного процесса:
journalctl _PID=1
  • Все сообщения конкретного приложения или службы:
journalctl -u netcfg
  • Все сообщения процессов, запущенных от имени конкретного пользователя:
journalctl _UID=33
  • Показать сообщения от пользовательской службы конкретного юнита:
$ journalctl --user -u dbus

Журнал


  • Журнал хранится в двоичном формате, поэтому в окружении, где не установлен systemd, его логи можно посмотреть с помощью команды strings:
strings /mnt/arch/var/log/journal/af4967d77fba44c6b093d0e9862f6ddd/system.journal | grep -i сообщение
  • Если же имеется файл журнала, например, с другого компьютера и systemd установлен (должно быть достаточно пакета journalctl из Sisyphus), то посмотреть его содержимое проще:


из директории

journalctl -D /mnt/arch/var/log/journal/af4967d77fba44c6b093d0e9862f6ddd

из файла

journalctl --file /mnt/arch/var/log/journal/af4967d77fba44c6b093d0e9862f6ddd/system.journal

Недавние события


  • Просмотр информации о недавних событиях
$ journalctl -n
  • По умолчанию на консоль выводится информация о последних 10 событиях. С опцией -n можно указать необходимое число событий:
$ journalctl -n 20

Анализ этапа загрузки

Для анализа этапа инициализации системы используется утилита systemd-analyze. Для установки делаем от root:

apt-get install systemd-analyze

Выявляем самые медленные процессы (от пользователя):

systemd-analyze blame

Выводим график загрузки процессов в векторный рисунок:

systemd-analyze plot > file.svg

Основные настройки

Файл настройки находится в /etc/systemd/journald.conf и состоит из следующих секций:

  • Storage= Указывает, где хранить журнал. Доступны следующие параметры:
    • volatile Журнал хранится в оперативной памяти, т.е. в каталоге /run/log/journal.
    • persistent Данные хранятся на диске, т.е. в каталоге /var/log/journal
    • auto используется по умолчанию
    • none Журнал не ведётся
  • Compress= Принимает значения "yes" или "no". Если включена (по умолчанию) сообщения перед записью в журнал, будут сжиматься.
  • Seal= Принимает значения "yes" или "no". Если включена (по умолчанию) будет включена защита Forward Secure Sealing (FSS), которая позволяет накладывать криптографические отпечатки на журнал системных логов.
  • SplitMode= Определяет доступ к журналу пользователям. Доступны следующие параметры:
    • uid Все пользователи получают доступ к чтению системного журнала. Используется по умолчанию.
    • login Каждый пользователь может читать только сообщения, относящиеся к его сеансу.
    • none Пользователи не имеют доступа к системному журналу.
  • SyncIntervalSec= Таймаут, после которого происходит синхронизация и запись журнала на диск. Относится только к уровням ERR, WARNING, NOTICE, INFO, DEBUG. Сообщения уровня CRIT, ALERT, EMERG записываются сразу на диск.
  • RateLimitInterval= и RateLimitBurst= Настройки ограничения скорости генерации сообщений для каждой службы. Если в интервале времени, определяемого RateLimitInterval=, больше сообщений, чем указано в RateLimitBurst= регистрируются службой, все дальнейшие сообщения в интервале отбрасываются, пока интервал не закончится.При этом генерируется сообщение о количестве отброшенных сообщений. По умолчанию 1000 сообщений за 30 секунд. Единицы измерения: "s", "min", "h", "ms", "us". Чтобы выключить ограничение скорости, установите значения в 0.
  • MaxRetentionSec= Максимальное время хранения записей журнала. Единицы измерения: year, month, week, day, h или m
  • MaxFileSec= Максимальное время хранения записей в одном файле журнала, после которого он переводится в следующий.
  • ForwardToSyslog=, ForwardToKMsg=, ForwardToConsole=, ForwardToWall= Определяют куда направлять сообщения: в традиционный системный журнал Syslog, в буфер журнала ядра (kmsg), на системную консоль, или на стену, чтобы было видно всем зарегистрированным пользователям. Эти опции принимают логические аргументы. Если переадресация на Syslog включен, но Syslog демон не работает, соответствующий параметр не имеет никакого эффекта. По умолчанию, только стена включена. Эти параметры могут быть переопределены во время загрузки с параметрами командной строки ядра systemd.journald.forward_to_syslog =, systemd.journald.forward_to_kmsg =, systemd.journald.forward_to_console = и systemd.journald.forward_to_wall =. При пересылке в консоль, должен быть установлен TTYPath =, как будет описано ниже.
  • TTYPath= Назначает консоль TTY, для вывода сообщений, если установлен параметр ForwardToConsole=yes. По умолчанию, используется /dev/console. Для того, чтобы вывести на 12 консоль, устанавливаем TTYPath=/dev/tty12. Для того, чтобы вывести на последовательный порт, устанавливаем TTYPath=/dev/ttySX, где X номер com-порта.
  • MaxLevelStore=, MaxLevelSyslog=, MaxLevelKMsg=, MaxLevelConsole=, MaxLevelWall= Определяет максимальный уровень сообщений который сохраняется в журнал, выводится на традиционный системный журнал Syslog, буфер журнала ядра (kmsg), консоль или стену. Значения: emerg, alert, crit, err, warning, notice, info, debug или цифры от 0 до 7 (соответствуют уровням).

Управление логированием

  • Определение текущего объёма логов

Со временем объём логов растёт, и они занимают всё больше места на жёстком диске. Узнать объём имеющихся на текущий момент логов можно с помощью команды:

journalctl --disk-usage
  • Ротация логов

Настройка ротации логов осуществляется с помощью опций −−vacuum-size и −−vacuum-time. Первая из них устанавливает предельно допустимый размер для хранимых на диске логов (в нашем примере — 1 ГБ):

journalctl --vacuum-size=1G

Как только объём логов превысит указанную цифру, лишние файлы будут автоматические удалены. Аналогичным образом работает опция −−vacuum-time. Она устанавливает для логов срок хранения, по истечении которого они будут автоматически удалены:

journalctl --vacuum-time=1years
  • Настройка ротации в конфигурационном файле. Настройки ротации логов можно также прописать в конфигурационном файле /еtc/systemd/journald.conf, который включает в числе прочих следующие параметры:
    • SystemMaxUse= — максимальный объём, который логи могут занимать на диске;
    • SystemKeepFree= — объём свободного места, которое должно оставаться на диске после сохранения логов;
    • SystemMaxFileSize= — объём файла лога, по достижении которого он должен быть удален с диска;
    • RuntimeMaxUse= — максимальный объём, который логи могут занимать в файловой системе /run;
    • RuntimeKeepFree= — объём свободного места, которое должно оставаться в файловой системе /run после сохранения логов;
    • RuntimeMaxFileSize= — объём файла лога, по достижении которого он должен быть удален из файловой системы /run.

Единицы измерения: K, M, G, T, P, E.

Возврат syslog

Допускается либо параллельное ведение журналов в syslog, либо полное переключение на него. За это отвечают параметры Storage и ForwardToSyslog в /etc/systemd/journald.conf:

[Journal]
Storage=none
ForwardToSyslog=yes

После этого надо установить logrotate и один из вариантов syslog.

При этом следует иметь ввиду это: Compatibility with classic syslog implementations is provided, via a socket /run/systemd/journal/syslog, to which all messages are forwarded, regardless whether they came in via /dev/log, the journal native protocol or any other source. To make your syslog implementaiton work with this make sure that it binds to that socket instead of /dev/log which is now systemd-journal property.

syslog-ng

Начиная со сборки 3.24.1-alt1 следует установить пакет syslog-ng-journal: altbug:36454.

rsyslog

Установить пакет rsyslog-classic.


На стороне отправителя сообщений (клиента)

Создать файл /etc/rsyslog.d/all.conf, в нём прописать протокол (@@ - tcp, @ - udp) и адрес доставки сообщений

*.* @@192.168.0.111:514

На стороне приёмника сообщений (сервера)

Раскомментировать в /etc/rsyslog.d/00_common.conf строки

#для udp
module(load="imudp")
input(type="imudp" port="514")
#для tcp
module(load="imtcp")
input(type="imtcp" port="514")

Создать свой шаблон для логов /etc/rsyslog.d/myrules.conf

$template remote-incoming-logs,"/var/log/%HOSTNAME/%PROGRAMNAME.log"
*.* ?remote-incoming-logs

Запись в журнал из скрипта

echo "MESSAGE" | systemd-cat -t myunit

где myunit — имя юнита.

Ссылки

Примечания :

  1. 1,0 1,1 Работает пока только в Сизифе, уточняйте через journalctl --help