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

Инструкция по использованию Journalctl в Linux

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
29 апреля 2022 г.
1332
7 минут чтения
Средний рейтинг статьи: 5

New Documentation

Система журналирования в операционных системах Linux работает на базе демона journald, который занимается обработкой сообщений от служб, initrd, ядра и т.д. Доступ к собранной в журнале информации осуществляется путем использования утилиты journalctl. Она же дает возможности для управления: делать фильтрацию, менять формат отображения, мониторить активные процессы и пр.

Инструкция По Использованию Journalctl В Linux

Общая информация

Основная задача журнальной системы systemd — централизация управления собираемыми данными независимо от источника. При помощи демона journald система объединит информацию в двоичном формате. Это позволяет повысить гибкость настройки и одинаково легко работать с задачами любой сложности. Например, комбинировать записи нескольких служб для выявления общей проблемы.

Система журналирования systemd универсальная. Ее применяют вместе с действующей syslog, вместо syslog и в качестве дополнения активных механизмов заполнения журнала. Допускается и объединение технологий, если этого требует выполнение конкретных задач.

Настроим системное время

Хранение журнала в двоичном формате позволяет просматривать записи в двух режимах: локальное время и время по Гринвичу (UTC). Стандартным считается первый из вариантов. Но перед началом работы желательно выяснить, какой часовой пояс указан. Поможет нам инструмент timedatectl, включенный в пакет systemd.

Сначала просмотрим все имеющиеся в системе часовые пояса:

timedatectl list-timezones

Найдите пояс, соответствующий фактическому размещению сервера, и установите его:

sudo timedatectl set-timezone zone

Теперь проверим, правильное ли время используется (командой timedatectl с опцией status). Вывод следующий:

Local time: Thu 2022-01-03 17:08:06 EST
Universal time: Thu 2022-01-03 21:08:06 UTC
RTC time: Thu 2022-01-03 21:08:06
Time zone: America/New_York (EST, -0500)
NTP enabled: no
NTP synchronized: no
RTC in local TZ: no
DST active: n/a

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

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

Информацию, собранную демоном journald, просматривают командой Linux journalctl. Если ее применяют отдельно, вывод журнала будет представлять многостраничный список с размещением старых записей наверху:

journalctl
-- Logs begin at Tue 2022-02-03 21:48:52 UTC, end at Tue 2022-02-03 22:29:38 UTC. --
Feb 04 21:48:52 localhost.localdomain systemd-journal[243]: Runtime journal is using 6.2M (max allowed 49.
Feb 04 21:48:52 localhost.localdomain systemd-journal[243]: Runtime journal is using 6.2M (max allowed 49.
Feb 04 21:48:52 localhost.localdomain systemd-journald[139]: Received SIGTERM from PID 1 (systemd).
Feb 04 21:48:52 localhost.localdomain kernel: audit: type=1404 audit(1423000132.274:2): enforcing=1 old_en
Feb 04 21:48:52 localhost.localdomain kernel: SELinux: 2048 avtab hash slots, 104131 rules.
Feb 04 21:48:52 localhost.localdomain kernel: SELinux: 2048 avtab hash slots, 104131 rules.
Feb 04 21:48:52 localhost.localdomain kernel: input: ImExPS/2 Generic Explorer Mouse as /devices/platform/
Feb 04 21:48:52 localhost.localdomain kernel: SELinux:  8 users, 102 roles, 4976 types, 294 bools, 1 sens,
Feb 04 21:48:52 localhost.localdomain kernel: SELinux:  83 classes, 104131 rules
...

Если система работает давно, журнал будет занимать огромное количество экранов. Пользователю доступна прокрутка, позволяющая последовательно изучить все содержимое. Такой формат выдачи знаком тем, кто уже работал со стандартными журналами syslog. Обратите внимание, везде будет стоять именно локальное время, соответствующее системе.

При необходимости заменить временные метки на формат UTC запустим утилиту с флагом:

journalctl –utc

Отфильтруем журнал по времени

Чем дольше функционирует система, тем сложнее обрабатывать информацию из журнала. Поэтому для поиска конкретных данных используют фильтр по времени.

Вывод журналов текущей загрузки

Самый простой и часто используемый флаг: -b. Он помогает просмотреть записи журнала, которые были собраны с момента последнего по времени включения компьютера (или перезагрузки):

journalctl –b

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

-- Reboot --

Предыдущие загрузки

Полезной может оказаться информация по предыдущему запуску. Например, если возникли сбои и хочется разобраться в причинах. В зависимости от релиза дистрибутива Linux данные по старым загрузкам удаляются из журнала, но система может их и сохранять. Перед началом работы лучше принудительно создать папку, где будет храниться файл:

sudo mkdir -p /var/log/journal

Команда для редактирования конфигурационного файла системы ведения журналов systemd:

sudo nano /etc/systemd/journald.conf

Найдите раздел [Journal] и установите в нем для опции Storage= значение persistent. Это активирует хранение информации без ее удаления.

Временные окна

На серверах, работающих без перезапуска, актуальность сведений по загрузке системы практически нулевая. Зато полезна информация о ключевых событиях, которую будем искать при помощи опций --since и --until, ограничивающих вывод записей утилитой journalctl по времени. После внесенного или до приведенного значения (формат YYYY-MM-DD HH:MM:SS).

Пример ввода команды:

journalctl --since "2022-01-10 17:15:00"

Если указать только время, система автоматически подставит текущую дату. Вместо неуказанного времени подставляется значение 00:00:00. То же происходит при пропуске поля секунд, которое обычно непринципиально для изучения ситуации. Есть возможность применять «относительные» значения, например yesterday (вчера).

journalctl --since yesterday

Пример команды, когда требуется получить отчет по сбоях, произошедших 1 час назад:

journalctl --since 09:00 --until "1 hour ago"

Фильтр по значимости

Помимо временных критериев, команда journalctl включает фильтрацию по важным службам или их компонентам. Система systemd поддерживает несколько способов.

По единицам

Фильтрацию по единицам включает опция -u. Так, если требуется вывести журнал только по Nginx, введем команду:

journalctl -u nginx.service

Возможно совмещение с диапазоном времени:

journalctl -u nginx.service --since today

По процессу (пользователю, идентификатору группы)

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

journalctl _PID=7077

В некоторых случаях запрашивают весь объем записей, внесенных в журнал под определенным пользователем или в рамках указанной группы. С этой целью используют фильтры _UID и _GID. В качестве примера возьмем пользователя www-user. Найдем его при помощи команды:

id -u www-user
33

Теперь используем «подсвеченный» идентификатор для включения фильтра:

journalctl _UID=33 --since today

По пути компонента

Команда позволяет указывать путь к исполняемому файлу, информацию о котором требуется сейчас изучить. Пример для фильтрации по bash:

journalctl /usr/bin/bash

В зависимости от файла возможно отображение и дочерних процессов (иногда это не работает).

Отображение сообщений ядра

Система журналирования поддерживает вывод сообщения ядра операционной системы Linux. Вся информация будет содержаться в dmesg. При вводе команды при этом используют опции --dmesg или -k.

journalctl -k

В стандартный вывод попадают сообщения только из текущего сеанса. Но пользователю доступна возможность указания другого. Например, для получения данных по «пятому сеансу» загрузки от текущего используем команду:

journalctl -k -b -5

По приоритету

Интересна фильтрация по приоритету сообщений. Это позволяет временно убрать информацию с низким приоритетом, чтобы не отвлекаться и не путаться при изучении ситуации. Выполняется операция при помощи опции -p с добавкой категории сообщений. Например, просмотрим все ошибки:

journalctl -p err –b

Вывод будет содержать информацию, помеченную следующими маркерами: error, critical, alert и emergency. Это разные уровни индикации проблем, но они все относятся к указанной категории. В стандарте системы syslog применяются стандартные уровни ошибок, каждому из которых задано определенное цифровое значение. Числа обозначают конкретный приоритет.

0: emerg
1: alert
2: crit
3: err
4: warning
5: notice
6: info
7: debug

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

Выводы

Мы разобрали, как использовать утилиту journalctl в основных режимах. Она весьма полезна для системных администраторов за счет гибкой фильтрации данных при чтении журналов. Расширение функций осуществляется за счет применения различных опций, основные из которых рассмотрели в статье.

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону