Инструменты пользователя

Инструменты сайта


linux:administration:journalctl

Это старая версия документа!


# Шпаргалка по journalctl в Linux

В Linux работающем под управлением системы инициализации systemd для просмотра логов определенного сервиса или загрузки системы необходимо использовать утилиту journalctl

Наличие этой утилиты в системе не означает, что теперь нет возможности пользоваться обычными файлами логов. Большинство сервисов как и раньше пишут свои основные логи в файлы, а в лог journalctl пишутся сообщения при старте сервисов, а также различные системные сообщения.
## Синтаксис и опции journalctl

Синтаксис:

``` journalctl опции ``` основные опции:

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

! Если утилита не выводит ничего, выполните её от имени суперпользователя

## Горячие клавиши journalctl

По умолчанию информация лога выводится в формате, в котором её можно листать. Для этого можно использовать следующие горячие клавиши:

  • Стрелка вниз, Enter, e или j - переместиться вниз на одну строку;
  • Стрелка вверх, y или k - переместиться на одну строку вверх;
  • Пробел - переместиться на одну страницу вниз;
  • b - переместиться на одну страницу вверх;
  • Стрелка вправо, стрелка влево - горизонтальна прокрутка;
  • g - перейти на первую строку;
  • G - перейти на последнюю строку;
  • p - перейти на позицию нужного процента сообщений. Например, 50p перенесет курсор на середину вывода;
  • / - поиск по журналу;
  • n - найти следующее вхождение;
  • N - предыдущее вхождение;
  • q - выйти.

## Примеры использования journalctl

Вывод journalctl представляет из себя цельный список всех сохраненных сообщений. Если вы запустите команду journalctl без параметров, то получите самые первые сообщения, которые были сохранены. ``` sudo journalctl ```

Формат вывода лога такой: ``` янв 13 20:55:55 sergiy-pc kernel: Linux version 4.15.0-43-generic ``` где:

  • янв 13 20:55:55 - дата и время события;
  • sergiy-pc - хост, на котором произошло событие;
  • kernel - источник события, обычно это программа или сервис. В данном случае ядро;
  • Linux version 4.15.0-43-generic - само сообщение.

Ниже приводятся примеры фильтрации и перемещения.
### 1.Просмотр логов сервисов

Самый частый случай использования journalctl - когда при запуске какого-либо сервиса с помощью systemd, он не запускается и systemd выдает сообщение подобного содержания: Failed to start service use journalctl -xe for details.

Система сама предлагает какую команду надо выполнить: ``` sudo journalctl -xe ``` эта команда отображает последние сообщения в журнале и добавляет к ним дополнительную информацию, если она есть. Учитывая, что последнее что происходило был не запустившийся сервис, то здесь будут сообщения от него и можно будет понять почему он не запускается.

Чтобы отфильтровать сообщения только от определенного сервиса можно использовать опцию -u. Например: ``` sudo journalctl -eu apache2.service ``` ### 2.Просмотр логов в режиме tail

С помощью опции -f можно указать утилите, что необходимо выводить новые сообщения в реальном времени: ``` sudo journalctl -f ``` В этом режиме less не поддерживается, поэтому для выхода нажмите сочетание клавиш Ctrl+C.

### 3.Просмотр логов загрузки

В логе journalctl содержатся все логи, в том числе и логи загрузки.

Чтобы открыть лог последней загрузки используйте опцию -b: ``` sudo journalctl -b ```

Посмотреть список всех сохраненных загрузок можно командой: ``` sudo journalctl -list-boots ``` будет выведен список загрузок системы с указанием даты и индентификатора.

Теперь, чтобы посмотреть сообщения для нужной загрузки используйте её идентификатор: ``` sudo journalctl -b 37d5c906c9c6404682f029b2c34ec9dc ``` ### 4.Фильтрация по дате

С помощью опции --since можно указать дату и время, начиная с которой нужно отображать логи: ``` sudo journalctl --since «2019-01-20 15:10:10» ```

Опция --until помогает указать по какую дату вы хотите получить информацию: ``` sudo journalctl -e --until «2019-01-20 15:05:50» ``` Или можно скомбинироват эти опции чтобы получить логи за нужный период: ``` sudo journalctl --since «2019-01-20 15:10:10» --until «2019-01-20 15:05:50» ``` ### 5.Журнал ядра

Если вы хотите посмотреть только сообщения ядра используйте опцию -k: ``` sudo journalctl -ek ``` ### 6.Настройка формата вывода

По умолчанию journalctl выводит информацию с помощью утилиты less, в которой вы можете её удобно листать и просматривать.

Но формат вывода можно изменить:

  • short - используется по умолчанию;
  • verbose - также, как и short, только выводится намного больше информации;
  • json - вывод в формате json, одна строка лога в одной строке вывода;
  • json-pretty - форматированный вывод json для более удобного восприятия;
  • cat - отображать только сообщения, без метаданных.

Чтобы указать нужный формат используйте опцию -o. Например: ``` sudo journalctl -o json-pretty ```

Или: ``` sudo journalctl -eo json-pretty ``` ### 7.Очистка логов

Сначала нужно посмотреть сколько ваши логи занимают на диске. Для этого используется такая команда: ``` sudo journalctl --disk-usage ```

Чтобы уменьшить размер лога можно использовать опцию --vacuum-size. Например, если вы хотите, чтобы ваши файлы журналов занимали на диске не более 2 Гб, выполните команду: ``` sudo journalctl --vacuum-size=2G ``` Теперь старые логи будут удалены, пока общий объем хранилища не будет составлять 2 гигабайта.

Также можно удалять логи по времени. Для этого используется опция --vacuum-time. Например, оставим только логи за последний год: ``` journalctl --vacuum-time=1years ```

/var/www/html/dokuwiki/data/attic/linux/administration/journalctl.1769623312.txt.gz · Последнее изменение: — so_v_a