Управление сообщениями журналов в Systemd с использованием Journalctl [прикладное руководство]

Управление сообщениями журналов в Systemd с использованием Journalctl [прикладное руководство]

SystemD

Сегодня поговорим про Journalctl. Systemd — это передовая система и менеджер сервисов (служб) для Linux-систем: замена демона init, предназначенная для параллельного запуска процессов при загрузке системы. В настоящее время она поддерживается в ряде текущих дистрибутивов, включая Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS и т.д.

systemd

 

Раньше мы обсудили, что такое демон, почему «init» технически необходимо заменить на «systemd», а также основные функции systemd.

Одним из основных преимуществ systemd над другими общими системами инициализации является поддержка централизованного управления регистрацией системы и процессов с использованием журнала. В этой статье мы узнаем, как управлять и просматривать сообщения журнала в systemd с помощью команды logctl в Linux.

Важно: прежде чем двигаться дальше, в этой статье, вы можете узнать, как управлять службами и подразделениями Systemd с помощью команды «Systemctl», а также создавать и запускать новые служебные модули в systemd с помощью сценариев оболочки в Linux. Если всё вышеперечисленное вас не напугало, продолжайте читать.

Настройка Journald для сбора логов с Systemd

Управление сообщениями журналов в Systemd с использованием Journalctl [прикладное руководство]

journald — демон (служба), который собирает записи журнала из всей системы; это, по сути, загрузочные сообщения, сообщения из ядра и из syslog или различных приложений, и он хранит все сообщения в центральном месте — файле журнала.

Вы можете управлять поведением журнала с помощью файла конфигурации по умолчанию: /etc/systemd/journald.conf, который создается во время установки. Этот файл содержит параметры, значения которых вы можете изменить, в соответствии с вашим требованиям к локальной среде.

Ниже приведен пример того, как выглядит файл.

$ cat /etc/systemd/journald.conf

 

Journald Configuration File
# See journald.conf(5) for details.
[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg

 

Обратите внимание, что различные установки пакетов и использование выводов конфигурации в /usr/lib/systemd/*.conf.d/ и конфигурациях времени выполнения можно найти в /run/systemd/journald.conf.d/*.conf.

 

Включим хранение данных журнала на диске

Ряд дистрибутивов Linux, включая Ubuntu и её производные, такие как Linux Mint, не позволяют по умолчанию сохранять в постоянную память загрузочные логи на диске.

Это можно включить, установив для параметра «Хранение» значение «постоянный», как показано ниже. Это создаст каталог /var/log/journal, и все файлы журнала будут сохранены в эту директорию.

$ sudo vi /etc/systemd/journald.conf

 

ИЛИ

$ sudo nano /etc/systemd/journald.conf

 

[Journal]
Storage=persistent

 

Для дополнительных настроек найдите значение всех параметров, которые должны быть настроены в разделе «[Journal]», набрав:

$ man journald.conf

 

Установка правильного системного времени с помощью команды Timedatectl

Чтобы обеспечить надежное управление журналом в системе с помощью службы journald, убедитесь, что у вас верные настройки времени, в том числе и часовой пояс.

Чтобы просмотреть текущие настройки даты и времени в вашей системе, введите:

$ timedatectl

 

ИЛИ

 

$ timedatectl status
Local time: Thu 2017-06-15 13:29:09 EAT
Universal time: Thu 2017-06-15 10:29:09 UTC
RTC time: Thu 2017-06-15 10:29:09
Time zone: Africa/Kampala (EAT, +0300)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no

 

Чтобы установить правильный часовой пояс и, возможно, системное время, используйте приведенные ниже команды:

$ sudo timedatectl set-timezone Africa/Kampala
$ sudo timedatectl set-time “13:50:00”

 

Просмотр сообщений журнала с помощью команды Journalctl

journalctl — это утилита, используемая для просмотра содержимого журнала systemd (который записывается службой journald).

Чтобы показать все собранные данные журнала без какой-либо фильтрации, введите:

$ journalctl

 

View Log Messages
-- Logs begin at Wed 2017-06-14 21:56:43 EAT, end at Thu 2017-06-15 12:28:19 EAT
Jun 14 21:56:43 tecmint systemd-journald[336]: Runtime journal (/run/log/journal
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpuset
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpu
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpuacct
Jun 14 21:56:43 tecmint kernel: Linux version 4.4.0-21-generic ([email protected])
Jun 14 21:56:43 tecmint kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-
Jun 14 21:56:43 tecmint kernel: KERNEL supported cpus:
Jun 14 21:56:43 tecmint kernel: Intel GenuineIntel
Jun 14 21:56:43 tecmint kernel: AMD AuthenticAMD
Jun 14 21:56:43 tecmint kernel: Centaur CentaurHauls
Jun 14 21:56:43 tecmint kernel: x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x01: 'x87 flo
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x02: 'SSE reg
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x04: 'AVX reg
Jun 14 21:56:43 tecmint kernel: x86/fpu: Enabled xstate features 0x7, context si
Jun 14 21:56:43 tecmint kernel: x86/fpu: Using 'eager' FPU context switches.
Jun 14 21:56:43 tecmint kernel: e820: BIOS-provided physical RAM map:
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000000000-0x00000000000
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000090000-0x00000000000
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000100000-0x000000001ff
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000020000000-0x00000000201
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000020200000-0x00000000400

 

Просмотр сообщений журнала загрузки системы

Вы можете отобразить список загрузочных номеров (относительно текущей загрузки), их идентификаторы и отметки времени первого и последнего сообщений, соответствующие загрузке с опцией -list-boots.

$ journalctl --list-boots
-1 9fb590b48e1242f58c2579defdbbddc9 Thu 2017-06-15 16:43:36 EAT—Thu 2017-06-15 1
0 464ae35c6e264a4ca087949936be434a Thu 2017-06-15 16:47:36 EAT—Thu 2017-06-15 1

 

Чтобы просмотреть записи журнала из текущей загрузки (номер 0), используйте флаг -b :

$ journalctl -b

 

Чтобы просмотреть журнал логов из предыдущей загрузки, используйте -1, относительный указатель с опцией -b, как показано ниже:

$ journalctl -b -1

 

Кроме того, используйте идентификатор загрузки:

$ journalctl -b 9fb590b48e1242f58c2579defdbbddc9

 

Фильтрация сообщений журнала по времени

Чтобы использовать время в формате Coordinated Universal Time (UTC), добавьте опцию -utc следующим образом:

$ journalctl --utc

 

Чтобы просмотреть все записи с определенной даты и времени, например «с 15 июня 2018 года с 8:15 утра» введите эту команду:

$ journalctl --since "2018-06-15 08:15:00"
$ journalctl --since today
$ journalctl --since yesterday

 

Просмотр последних сообщений журнала

Чтобы просмотреть последние сообщения журнала (по умолчанию 10), используйте флаг -n, как показано ниже:

$ journalctl -n
$ journalctl -n 20

 

Просмотр сообщений журнала, созданных ядром

Чтобы увидеть только сообщения ядра, похожие на вывод команды dmesg, вы можете использовать флаг -k.

$ journalctl -k
$ journalctl -k -b
$ journalctl -k -b 9fb590b48e1242f58c2579defdbbddc9

 

Просмотр журнальных логов, созданных службами

Чтобы просмотреть все записи журнала для определенной службы, используйте ключ -u следующим образом:

$ journalctl -u apache2.service

 

Для отображения последнего запуска службы введите эту команду:

$ journalctl -b -u apache2.service

 

Чтобы показать журнал с предыдущей загрузки, используйте эту команду:

$ journalctl -b -1 -u apache2.service

 

Ниже приведены некоторые другие полезные команды:

$ journalctl -u apache2.service
$ journalctl -u apache2.service --since today
$ journalctl -u apache2.service -u nagios.service --since yesterday

 

Просмотр журнальных логов, генерируемых процессами

Чтобы просмотреть журналы, созданные определенным процессом, укажите его PID.

$ journalctl _PID=19487
$ journalctl _PID=19487 --since today
$ journalctl _PID=19487 --since yesterday

 

Просмотр журнальных сообщений, созданных с помощью идентификатора пользователя или группы

Чтобы просмотреть журналы, созданные определенным пользователем или группой, укажите идентификатор пользователя или группы, например:

$ journalctl _UID=1000
$ journalctl _UID=1000 --since today
$ journalctl _UID=1000 -b -1 --since today

 

Просмотр журналов, созданных файлом

Чтобы показать все журналы, сгенерированные файлом (возможно, исполняемый файл), например исполняемый файл D-Bus или исполняемый файл bash, введите:

$ journalctl /usr/bin/dbus-daemon
$ journalctl /usr/bin/bash

 

Просмотр журнальных логов по приоритету

Вы также можете фильтровать выходные данные на основе приоритетов сообщений или диапазонов приоритетов, используя флаг -p. Возможные значения: 0 — появление, 1 — тревога, 2 — crit, 3 — ошибка, 4 — предупреждение, 5 — уведомление, 6 — информация, 7 — отладка):

$ journalctl -p err

 

Чтобы указать диапазон, используйте следующий формат (появится предупреждение):

$ journalctl -p 1..4

 

ИЛИ

$ journalctl -p emerg..warning

 

Просмотр журналов в режиме реального времени

Вы можете фактически просматривать журналы, поскольку они записываются с параметром -f (аналогично функции tail -f):

$ journalctl -f

 

Форматирование способа отображения журналов

Если вы хотите контролировать форматирование вывода записей журнала, добавьте флаг -o и используйте следующие параметры: cat, export, json, json-pretty, json-sse, short, short-iso, short-monotonic, short-exact и verbose («подробно») (проверьте значение параметров на странице руководства:

Параметр cat показывает фактическое сообщение каждой записи журнала без каких-либо метаданных (временная метка и т.д.).

$ journalctl -b -u apache2.service -o cat

 

Управление журналами в системе

Чтобы проверить файл журнала на внутреннюю корреляцию элементов, используйте параметр —verify. Если все хорошо, на выходе вы должны получить — «PASS«.

$ journalctl --verify
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system.journal
491f68: Unused data (entry_offset==0)
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/[email protected]9866c3d4d.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/[email protected]5d8945a9e.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/[email protected]1becab02f.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/[email protected]01cfcedff.journal

 

Удаление старых журнала

Вы также можете отображать текущее использование диска всеми файлами журнала с параметрами использования -disk. Он показывает данные о использовании диска для всех архивных и активных файлов журнала:

$ journalctl --disk-usage

 

Для удаления старых (архивных) файлов журнала выполните следующие команды:

$ sudo journalctl --vacuum-size=50M #delete files until the disk space they use falls below the specified size
$ sudo journalctl --vacuum-time=1years #delete files so that all journal files contain no data older than the specified timespan
$ sudo journalctl --vacuum-files=4 #delete files so that no more than the specified number of separate journal files remain in storage location

 

Очистка (ротация) файлов журналов

И последнее, но не менее важное: вы можете обучить journald очищать файлы журналов с помощью опции -rotate. Обратите внимание, что эта опция будет не доступна до завершения операции вращения:

$ sudo journalctl --rotate

 

Подробное руководство по использованию и параметры смотрите в man-странице journalctl.

$ man journalctl

 

 

Спасибо за уделенное время на прочтение статьи!

Если возникли вопросы, задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Ciscoкурсы по кибербезопасности,  полный курс по кибербезопасности от Академии Ciscoкурсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

Курсы Cisco и Linux с трудоустройством!

Спешите подать заявку! Осталось пару мест. Группы стартуют 22 июля, а следующая 19 августа, 23 сентября, 21 октября, 25 ноября, 16 декабря, 20 января, 24 февраля.
Что Вы получите?
  • Поможем стать экспертом в сетевом администрировании и получить международные сертификаты Cisco CCNA Routing & Switching или Linux LPI.
  • Предлагаем проверенную программу и учебник экспертов из Cisco Networking Academy и Linux Professional Institute, сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и сделать карьеру. 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проводим вечерние онлайн-лекции на нашей платформе или обучайтесь очно на базе Киевского офиса.
  • Спросим у вас об удобном времени для практик и подстроимся: понимаем, что времени учиться мало.
  • Если хотите индивидуальный график — обсудим и осуществим.
  • Выставим четкие дедлайны для самоорганизации. Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
А еще поможем Вам:
  • отредактировать резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроим на работу в Cisco по программе Cisco Incubator, New Graduate и Experienced. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco CCNA Routing & Switching и Linux LPI, подайте заявку или получите бесплатную консультацию.
SystemD

Больше похожих постов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения

Самое читаемое
Меню