Expertus metuit
journalctl
Опубликовано 2024-09-23 в 14:30

journalctl — это инструмент запросов и поиска в логах systemd. А это шпаргалка по journalctl, так как теперь им приходится часто пользоваться, а команды запоминаются с трудом, так как их много и они не особо интуитивные или логичные.

Сами логи в systemd структурированные, а journalctl умеет выводить записи из него в разных форматах. Формат можно менять через аргумент -o, всего их довольно много, включая json; если аргумент -o не указывать, то подразумевается -o short.

По умолчанию (то есть в режиме вывода -o short) journalctl выводит логи в текстовом виде, максимально приближенном к формату syslog:

сен 23 10:28:19 sigsergv-ws kwin_x11[982965]: qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 15025, resource id: 18766990, major code: 2 (ChangeWindowAttributes), minor code: 0

Нигде в документации я не нашёл описаний, из каких именно элементов состоит вывод в текстовом формате -o short, это можно достоверно узнать только из исходного кода systemd (это файл src/shared/logs-show.c, функция output_short). В нашем случае он состоит из такого:

$timestamp $hostname $sys_id[$pid]: $message 
  • $timestamp (сен 23 10:28:19) — это время записи, отформатированное для текущей локали
  • $hostname (sigsergv-ws) — название хоста машины
  • $sys_id (kwin_x11) — условный системный идентификатор процесса/сервиса, который отправил запись в лог, условный потому, что здесь может быть одно из двух возможных значений (поля из полной структуры записи SYSLOG_IDENTIFIER, _COMM), какой из них первым определён, тот и печатается
  • $pid (982965) — PID процесса, который отправил запись в лог
  • $message (qt.qpa.xcb: QXcbConnection: XCB error....) — собственно текстовая часть сообщения, она уже не имеет предопределённой структуры и печатается как есть

──────────────────

Чтобы посмотреть все поля из каждой записи, нужно выбрать режим вывода -o json (весь JSON печатается одной строкой для каждой записи) или -o json-pretty (каждая запись печатается с отступами). Или -o verbose, в нём тоже выдаются все значения с отступами, но в немного обработанном виде.

──────────────────

Простой вызов journalctl происходит в интерактивном режиме, позволяющем двигать «окно» с результатами примерно так же, как это делается в less, например: shift-g перемещает в конец лога, g — в начало, PageUp/PageDown — переход на страницу вверх/вниз соответственно. q — выход.

Также настоятельно рекомендую системным пейджером выставить less, а не more:

sudo apt install less
sudo update-alternatives --config pager

Выводить время записей с указанием года

journalctl -o short-iso

Вывести N свежих записей

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

journalctl -n 5

Выводить записи по мере их поступления

Запущенная в таком режиме команда будет выводить записи по мере их поступления, чтобы прервать, нажмите ctrl+c:

journalctl -f

Открыть на последней (самой свежей) записи

По такой команде лог открывается сразу на последней записи:

journalctl -e -nall

Если аргумент -nall не указать, то будет подгружено по умолчанию только 1000 последних записей и при скроллинге вверх дальше этих 1000 уйти не получится.

Выводить записи только для конкретного компонента

Например, вы смотрите весь лог и видите, что проблемы идут от компонента kwin_x11 (как в примере выше). Чтобы показать записи только с ним, нужно добавить такой фильтр в аргумент запуска команды:

journalctl SYSLOG_IDENTIFIER=kwin_x11

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

journalctl -f SYSLOG_IDENTIFIER=kwin_x11

Другие элементы фильтра (типа SYSLOG_IDENTIFIER) можно посмотреть, если запустить в формате вывода verbose, тогда записи будут выводиться с полной детализацией для всех элементов.

Комментарии

Текст комментария (допустимая разметка: *курсив*, **полужирная**, [ссылка](http://example.com) или <http://example.com>) Посетители-анонимы, обратите внимение, что более чем одна гиперссылка в тексте (включая оную из поля «веб-сайт») приведёт к блокировке комментария для модерации. Зайдите на сайта с использованием аккаунта на twitter, например, чтобы посылать комментарии без этого ограничения.
Имя (обязательно, 50 символов или меньше)
Опциональный email, на который получать ответы (не будет опубликован)
Веб-сайт
© 2006—2024 Sergey Stolyarov | Работает на pyrengine