Команда journalctl в linux

Обновлено: 04.07.2024

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

Общая идея

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

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

Журнальную систему systemd можно использовать вместе с существующей реализацией syslog , или в качестве функциональной замены syslog , если вам это потребуется. Хотя журнальная система systemd способна удовлетворить большинство потребностей администратора, ее также можно использовать в качестве дополнения к существующим механизмам ведения журнала. Например, вы можете использовать централизованный сервер syslog для компиляции данных с нескольких серверов, но при этом также чередовать журналы нескольких служб одной системы с журналом systemd . Объединив эти технологии, вы можете выполнить обе задачи.

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

Одно из преимуществ использования двоичного журнала заключается в возможности просмотра записей журнала как с локальным временем, так и с временем по Гринвичу (UTC). По умолчанию systemd использует для отображения результатов локальное время.

В связи с этим, прежде чем мы начнем работу с журналом, нам нужно будет убедиться, что часовой пояс настроен правильно. Пакет systemd включает инструмент timedatectl , который может помочь с этой задачей.

Прежде всего, нужно использовать опцию list-timezones для просмотра доступных часовых поясов:

Эта опция выводит список часовых поясов, доступных в вашей системе. Когда вы найдете часовой пояс, соответствующий расположению вашего сервера, вы сможете установить его с помощью опции set-timezone :

Чтобы убедиться, что ваша система использует правильное время, воспользуйтесь командой timedatectl без опций или с опцией status . Изображение на экране будет таким же:

В первой строке должно отображаться правильное время.

Основы просмотра журнала

Чтобы просмотреть журналы, собранные демоном journald , используйте команду journalctl .

Когда эта команда используется отдельно, все записи журналов в системе будут выведены в многостраничном списке (обычно занимает меньше страницы), который вы сможете просматривать. Самые старые записи будут отображаться сверху:

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

Данный формат будет знаком тем, кто привык к стандартным журналам syslog . Однако при этом способе данные собираются из большего числа источников, чем поддерживают стандартные приложения syslog . Журнальная система поддерживает журналы процесса начальной загрузки, ядра, initrd, стандартные журналы ошибок и вывода приложений и т. д.

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

Если вы хотите вывести временные метки в формате UTC, вы можете использовать флаг --utc :

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

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

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

Флаг -b — одна из самых простых опций, которой вы часто будете пользоваться. С его помощью вы сможете вывести для просмотра все записи журнала, собранные с момента последней перезагрузки.

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

Если вы не используете эту функцию и выводите данные более, чем за один день загрузок, вы увидите, что утилита journalctl вставляет примерно такую строку при каждом выключении системы:

Ее можно использовать в качестве логического разделителя информации между сеансами загрузки.

Прошлые загрузки

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

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

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

В разделе [Journal] установите для опции Storage= значение persistent, чтобы включить постоянное хранение журналов:

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

С этой опцией команда будет выводить по одной строке для каждого сеанса загрузки. Первый столбец — это относительный идентификатор сеанса загрузки, который удобно использовать для ссылки на сеанс загрузки с помощью journalctl . Если вам требуется абсолютный идентификатор, используйте значение boot ID во втором столбце. Два поля времени ближе к концу строки позволяют определить время сеанса загрузки.

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

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

Также вы можете использовать идентификатор сеанса загрузки для получения данных по сеансу загрузки:

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

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

Для фильтрации временных окон можно использовать опции --since и --until , которые ограничивают вывод записями после или до указанного времени соответственно.

Значения времени могут иметь разные форматы. Для абсолютных значений времени нужно использовать следующий формат:

Например, чтобы просмотреть все записи с 10 января 2015 г. 17:15, мы введем:

Если какие-то компоненты вышеописанного формата будут пропущены, будут применены значения по умолчанию. Например, если дата не будет указана, по умолчанию будет использоваться текущая дата. Если компонент времени отсутствует, для замены будет использоваться значение “00:00:00” (полночь). Поле секунд можно опустить, и тогда для него будет по умолчанию использовано значение “00”:

Журнальная система также понимает определенные относительные значения и именованные ярлыки. Например, вы можете использовать слова “yesterday” (вчера), “today” (сегодня), “tomorrow”(завтра), “now” (сейчас) и т. д. Чтобы указать относительное время, следует использовать префикс «-» или «+» перед числовым значением или использовать такие слова, как «ago» (назад) при построении фраз.

Чтобы получить данные за вчерашний день, введите:

Если вы получили отчеты о перебоях в работе службы, которые начались в 9:00 и закончились час назад, вы можете ввести следующую команду:

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

По единицам

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

Например, чтобы посмотреть все журналы единицы Nginx в нашей системе, мы можем ввести команду:

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

Такая фокусировка особенно полезна, если вы используете возможности чередования записей разных единиц в журнальной системе. Например, если ваш процесс Nginx использует единицу PHP-FPM для обработки динамического контента, вы можете объединить их данные в хронологическом порядке, указав обе единицы:

Это облегчает поиск взаимодействия между разными программами, позволяя отлаживать целые системы вместо отдельных процессов.

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

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

Для этого нужно указать при фильтрации поле _PID . Например, если нас интересует PID 8088, мы можем ввести:

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

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

Символ подчеркивания в начале указывает, что поле _PID относится к последнему типу. Журнал автоматически регистрирует и индексирует значения PID процессов, регистрируемых для последующей фильтрации. Вы можете узнать все о доступных полях журнала, используя следующую команду:

В этом руководстве мы обсудим это более подробно. Сейчас же мы рассмотрим более полезную опцию, связанную с фильтрацией по этим полям. Опцию -F можно использовать, чтобы вывести все доступные значения для указанного поля журнальной системы.

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

Она покажет вам все значения, сохраненные в журнальной системе для поля group ID. Это должно помочь вам в настройке фильтров.

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

Также для фильтрации можно указать путь.

Если путь указывает на исполняемый файл, journalctl выведет все записи, связанные с этим исполняемым файлом. Например, чтобы найти записи с исполняемым файлом bash , нужно ввести команду:

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

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

Например, чтобы вывести только записи с уровнем серьезности error (ошибка) или выше, введите команду:

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

Изменение отображения журнальной системы

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

Сокращение или расширение области вывода

Мы можем настроить вид вывода данных journalctl , указав, что вывод можно сжать или раскрыть.

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

Если вы предпочитаете урезать вывод и вставить многоточие в месте, где удалена информация, вы можете использовать опцию --no-full :

Также вы можете сделать и обратное, и попросить journalctl вывести всю доступную информацию вне зависимости от того, содержит ли она непечатные символы. Для этого можно использовать флаг -a :

Вывод в стандартный выход

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

Для такого вывода следует использовать опцию --no-pager :

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

Форматы вывода

Если вы обрабатываете записи журнала, как указано выше, вам вероятно будет проще анализировать данные в более удобном формате. К счастью, журнал можно выводить в множестве разных форматов. Для этого вы можете использовать опцию -o вместе с указателем формата.

Например, чтобы вывести журнала в формате JSON, нужно ввести следующую команду:

Это полезно, если вы используете утилиты для синтаксического анализа. Вы можете использовать формат json-pretty , чтобы сделать структуру данных проще, прежде чем передавать данные потребителю JSON:

Для отображения можно использовать следующие форматы:

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

Мониторинг активных процессов

Команда journalctl имитирует, сколько администраторов используют tail для мониторинга активных процессов или недавней активности. Эта функция встроена в journalctl , обеспечивая доступ к этим возможностям без подключения другого инструмента.

Отображение последних журналов

Чтобы вывести указанное количество записей, вы можете использовать опцию -n , которая работает как tail -n .

По умолчанию отображается 10 последних записей:

Вы можете указать желаемое количество записей, задав число после -n :

Наблюдение за журналами

Для активного наблюдения за журналами по мере их пополнения можно использовать флаг -f . Это будет работать именно так, как можно ожидать, если у вас есть опыт использования tail -f :

Обслуживание журналов

Вам может быть интересно, сколько места занимают все эти данные, которые мы уже видели. Более того, вы можете захотеть удалить какие-либо старые журналы и освободить место.

Определение текущего использования дискового пространства

Вы можете определить, сколько места занимает журнал на диске, используя флаг --disk-usage :

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

Если вы хотите сократить размер журнала, вы можете использовать для этого два разных способа (доступных в systemd версии 218 или выше).

Если вы используете опцию --vacuum-size , вы можете сократить журнал, указав размер. При использовании этой опции старые записи будут удаляться, пока занимаемое журнальной системой место на диске не сократится до требуемого размера:

Также можно сократить размер журнала, указав время отсечки с помощью --vacuum-time . Любые записи вне этого времени удаляются. Эта опция позволяет сохранить записи, созданные после истечения определенного времени.

Например, чтобы сохранить записи с прошлого года, вы можете ввести:

Ограничение расширения журналов

Вы можете настроить свой сервер так, чтобы ограничить место, занимаемое журнальной системой. Для этого следует отредактировать файл /etc/systemd/journald.conf .

Для ограничения роста занимаемого журнальной системой объема можно использовать следующие элементы:

  • SystemMaxUse= : указывает максимальное пространство на диске, которое может использоваться журнальной системой.
  • SystemKeepFree= : указывает пространство на диске, которое журнальная система должна оставлять свободным при добавлении записей в журналы.
  • SystemMaxFileSize= : определяет, до какого размера могут увеличиваться большие файлы журнала на диске до ротации.
  • RuntimeMaxUse= : указывает, сколько места на диске может использоваться для временного хранения (в /run filesystem).
  • RuntimeKeepFree= : указывает, сколько места на диске следует оставлять на диске для других целей при записи данных во временное хранилище (в файловой системе /run ).
  • RuntimeMaxFileSize= : указывает, сколько места может занимать отдельный файл журнала во временном хранилище (в файловой системе /run ) до ротации.

Задавая эти значения, вы можете контролировать, сколько места на вашем сервере использует journald . Помните, что SystemMaxFileSize и RuntimeMaxFileSize будут применяться к архивным файлам для достижения заданных ограничений. Это важно помнить при интерпретации подсчета файлов после операции вакуумной очистки.

Заключение

Как видите, журнальная система systemd очень полезна для сбора данных о вашей системе и приложениях и для управления этими данными. Гибкость в основном обеспечивается за счет автоматической регистрации большого количества метаданных и централизованной структуры журналов. Команда journalctl позволяет легко использовать расширенные функции журнальной системы и проводить расширенный анализ и реляционную отладку разных компонентов приложения.


Journalctl — отличный инструмент для анализа логов, обычно один из первых с которым знакомятся начинающие администраторы linux систем. Встроенные возможности ротации, богатые возможности фильтрации и возможность просматривать логи всех systemd unit-сервисов одним инструментом очень удобны и заметно облегчают работу системным администраторам.

Эта статья рассматривает основные возможности утилиты journalctl и различные варианты ее применения. С помощью journalctl можно просматривать логи системы, чтобы решить возникшие проблемы на рабочей станции или сервере использующие дистрибутив linux с демоном инициализации systemd, де-факто уже ставшим стандартом в современных Linux-системах, например: RHEL, CentOS, Fedora, Debian и многих других.

Существует мнение, что systemd не так уж и хорош — он нагружает систему и это все еще предмет для споров на сегодняшний день, но нельзя отрицать, что он предоставляет прекрасный набор инструментов для управления системой и поиска проблем. Представьте, что вам приходится иметь дело с проблемным сервером, который даже не загружается — в таком случае можно загрузиться с live-дистрибутива, смонтировать системный раздел и просмотреть логи systemd, чтобы понять, в чем проблема.

Systemd

Systemd состоит из трех основных компонентов:

  • systemd — менеджер системы и сервисов
  • systemctl — утилита для просмотра и управление статусом сервисов
  • systemd-analyze — предоставляет статистику по процессу загрузки системы, проверяет корректность unit-файлов и так же имеет возможности отладки systemd

Journald

Journald — системный демон журналов systemd. Systemd спроектирован так, чтобы централизованно управлять системными логами от процессов, приложений и т.д. Все такие события обрабатываются демоном journald, он собирает логи со всей системы и сохраняет их в бинарных файлах.

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

Файлы логов journald могут собирать тысячи событий и они обновляются с каждым новым событием, поэтому если ваша Linux-система работает достаточно долго — размер файлов с логами может достигать несколько гигабайт и более. Поэтому анализ таких логов может происходить с задержками, в таком случае, при анализе логов можно фильтровать вывод, чтобы ускорить работу.

Файл конфигурации journald

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

Каталог с журналом journald располагается /run/log/journal (в том случае, если не настроено постоянное хранение журналов, но об этом позже).

Файлы хранятся в бинарном формате, поэтому нормально их просмотреть с помощью cat или nano, как привыкли многие администраторы — не получится.

Использование journalctl для просмотра и анализа логов

Основная команда для просмотра:



Она выведет все записи из всех журналов, включая ошибки и предупреждения, начиная с того момента, когда система начала загружаться. Старые записи событий будут наверху, более новые — внизу, вы можете использовать PageUp и PageDown чтобы перемещаться по списку, Enter — чтобы пролистывать журнал построчно и Q — чтобы выйти.

По умолчанию journalctl выводит время событий согласно настроенного в вашей системе часового пояса, также journalctl позволяет просмотреть логи с временем UTC (в этом стандарте времени сохраняются события внутри файлов journald), для этого можно использовать команду:

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

Для уровней важности, приняты следующие обозначения:

Настройка хранения журналов

По умолчанию journald перезаписывает свои журналы логов при каждой перезагрузке, и вызов journalctl выведет журнал логов начиная с текущей загрузки системы.

Если необходимо настроить постоянное сохранение логов, потребуется отдельно это настроить, т.к. разработчики отказались от постоянного хранения всех журналов, чтобы не дублировать rsyslog.

Когда в конфигурационном файле /etc/systemd/journald.conf параметру Storage= задано значение auto) и каталога /var/log/journal/ не существует, журнал будет записываться в /run/log/journal без сохранения между перезагрузками, если /var/log/journal/ существует, журналы будут сохраняться в нем, на постоянной основе, но если каталог будет удален, systemd не пересоздаст его автоматически и вместо этого будет вести журнал снова в /run/systemd/journal без сохранения. Каталог может быть пересоздан в таком случае, если добавить Storage=persistent в journald.conf и перезапустить systemd-journald.service (или перезагрузиться).

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

Просмотр журналов загрузки

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



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

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

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


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

Просмотр журнала за определенный период времени

Journalctl позволяет использовать такие служебные слова как “yesterday” (вчера), “today” (сегодня), “tomorrow” (завтра), или “now” (сейчас).

Поэтому мы можем использовать опцию "--since" (с начала какого периода выводить журнал).

С определенной даты и времени:


С определенной даты и по определенное дату и время:


Со вчерашнего дня:


С 9 утра и до момента, час назад:



Просмотр журнала логов для определенного сервиса systemd или приложения

Вы можете отфильтровать логи по определенному сервису systemd. Например, что бы просмотреть логи от NetworkManager, можно использовать следующую команду:



Если нужно найти название сервиса, используйте команду:


Или указав конкретный PID:

Дополнительные опции просмотра


Открыть журнал «перемотав» его к последней записи:


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


По умолчанию journalctl отсекает части строк, которые не вписываются в экран по ширине, хотя иногда перенос строк может оказаться более предпочтительным. Управление этой возможностью производится посредством переменной окружения SYSTEMD_LESS, в которой содержатся опции, передаваемые в less (программу постраничного просмотра, используемую по умолчанию). По умолчанию переменная имеет значение FRSXMK, если убрать опцию S, строки не будут обрезаться.

Ограничение размера журнала

Если journald настроен что бы сохранять журналы после перезагрузки, то по умолчанию размер журнала ограничен 10% от объема файлового раздела и максимально может занять 4 Гб дискового пространства.

Максимальный объем журнала можно скорректировать, раскомментировав и отредактировав следующий параметр в файле конфигурации journald:

Удаление журналов

Удалить файлы архивных журналов, можно вручную с помощью rm или использовав journalctl.

Удалить журналы, оставив только последние 100 Мб:


Удалить журналы, оставив журналы только за последние 7 дней:

Заключение

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

Systemd – наиболее совершенный менеджер системы и служб для Linux. Это замена демона init с возможностью параллельного запуска процессов при загрузке системы. В данный момент он поддерживается большинством распространенных дистрибутивов, в том числе Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS и другими.
Одно из главных преимуществ systemd над другими распространенными системами инициализации является поддержка централизованного управления ведения логов системы и процессов при помощи журнала. В данном руководстве мы научимся работать с логами в systemd при помощи команды journalctl.

Важно: Прежде чем приступить к чтению этого руководства, вам может потребоваться разобраться, как управлять сервисами в systemd при помощи команды systemctl, а также создавать и запускать в systemd новые сервисы. Если вы хорошо владеете этими вопросами, можно смело читать дальше.

Настройка Journald для сбора записей логов

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


Хранение журнала на диске

Установка корректного системного времени

Для эффективного управления логами при помощи службы journald нужно убедиться, что настройки времени, в том числе часовой пояс, установлены корректно. Для просмотра текущей даты и времени введите команду:


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

Просмотр записей журнала

journalctl – это утилита для просмотра содержимого журнала systemd, который ведется службой journald. Для отображения всех собранных логов без какой-либо фильтрации просто выполните команду без опций:

Результат будет иметь приблизительно следующий вид:


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


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

Для просмотра журнала, начиная с предыдущей загрузки, укажите после опции –b относительный указатель -1, как показано ниже:

Также можно использовать идентификатор загрузки:

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

Для использования времени в формате UTC укажите опцию –-utc:

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

Аналогичным образом можно указать начальную дату today (сегодня) или yesterday (вчера):

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

Для просмотра последних записей журнала (по умолчанию 10) используется опция –n.

После нее можно указать необходимое количество записей:

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

Просмотр записей конкретных сервисов

Для просмотра записей журнала конкретной службы используется опция –u, после которой нужно указать эту службу:

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

Показать записи, начиная с предыдущей загрузки:

Можно указать несколько сервисов и сочетать фильтрацию по сервису и по времени:

Просмотр записей по идентификатору процесса

Логи, созданные заданным процессом, можно просмотреть, указав его идентификатор (PID):

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

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

Просмотр записей, созданных файлом

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

Просмотр записей по приоритету

Цифровые значения и ключевые слова равнозначны:

Просмотр записей в реальном времени

Проверка целостности


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

Для удаления старых (архивированных) файлов воспользуйтесь командами ниже.
Удалять файлы, пока используемое ими дисковое пространство не сократится до указанного размера:

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

Удалять файлы, пока их количество не станет равно заданному:

Ротация файлов журнала

Для более подробного руководства и информации об опциях обратитесь к man-странице команды:

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Централизованное ведение журнала

Система systemd и менеджер служб внесли значительные изменения в способ сбора системных журналов. Журналы раньше располагались в разных местах файловой системы в соответствии с сервисом или демоном, который их создавал. Но у них всех было одно общее. Это были простые текстовые файлы.

С помощью systemd все файлы журналов системны, загрузки и ядра собираются и управляются центральным специализированным решением для ведения журнала. Формат, в котором они хранятся, является двоичным. Как мы убедимся далее, это облегчает возможность извлечения данных в разные форматы, такие как JSON.

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

journalctl — это инструмент, используемый для работы с журналом.

journalctl без излишеств

Вы можете вызвать journalctl без параметров командной строки:

Команда journalctl отобразит весь журнал, с самыми старыми записями вверху списка. Список отображается с использованием команды less, что позволяет просматривать страницы и осуществлять поиск с использованием обычных функций навигации команды less. Вы также можете использовать клавиши «Стрелка влево» и «Стрелка вправо» для боковой прокрутки и чтения широких записей журнала.


Нажатие клавишу End для перехода к нижней части списка, чтобы увидеть самые новые записи в журнале.


Для выхода нажмите клавишу q или Ctrl+c.

journalctl можно запустить без использования sudo, но если использовать sudo, то вы гарантированно увидите все подробности в журнале.

Если вы хотите, чтобы все данные были просто выведены в окно терминала без использования программы less, то запустите journalctl с опцией --no-pager:

Будет выведено много информации, вы окажитесь в конце журнала и вам будет доступно приглашении командной строки.


Чтобы ограничить количество строк, которые возвращает journalctl, используйте опцию -n ЧИСЛО. Допустим, нужно вывести только десять строк:

Постоянное обновление выводимой информации

Вы можете сделать так, что journalctl будет постоянно выводить новые записи журнала в реальном времени по мере их появления. Для этого используйте опцию -f.

Обновление происходит практически в реальном времени, в зависимости от количества событий, выводимых записей может быть много.


Изменение формата отображения

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

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


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



Если вы хотите, чтобы вывод был представлен как правильно сформированные объекты JavaScript Object Notation (JSON), используйте модификатор json:


Чтобы вывод JSON был напечатан в удобном для восприятия человеком виде, используйте модификатор json-pretty.

Каждый объект JSON разбит на несколько строк, каждая пара имя-значение находится на новой строке.



Чтобы ограничить вывод из journalctl интересующим вас периодом времени, используйте опции -S (с) и -U (до).

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


Это отличная комбинация, если вы знаете, что в вашей системе произошло что-то странное, и примерно когда это произошло.

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

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

journalctl понимает today (сегодня), yesterday (вчера) и tomorrow (завтра). Эти модификаторы предоставляют удобный способ задания общих периодов времени. Чтобы увидеть все события, которые произошли вчера, используйте эту команду:

Все события журнала журнала, которые произошли вчера, до полуночи 00:00:00, извлекаются и отображаются для вас.

Отобразится всё с 00:00:00 до момента ввода команды.

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

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

Обратите внимание, что после остановки и повторного запуска процесса, а также после перезагрузки, идентификаторы меняются!

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


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


Давайте сделаем это снова и посмотрим на идентификаторы групп (_GID):


Вы можете сделать это с любым из идентификаторов полей журнала.


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

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

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


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

Как правило, если у вас возникла проблема и вам пришлось перезагрузить компьютер, вам интересна предыдущая последовательность загрузки. Так что это популярная форма команды.

Легко запутаться в последовательности загрузок. Чтобы помочь, мы можем попросить journalctl перечислить загрузки, которые он записал в своём журнале, для этого используйте опцию --list-boots.


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

Поиск проблем служб (journalctl -xe)

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

Что касается команды journalctl с опциями -xe, то рассмотрим эти опции более подробно — фактически, это две опции -x и -e.

Опция -e, --pager-end говорит немедленно перейте к концу журнала внутри подразумеваемого инструмента пейджера. Это подразумевает -n1000, чтобы гарантировать, что пейджер не будет буферизовать журналы неограниченного размера. Это может быть заменено явным параметром -n с другим числовым значением, в то время как -nall отключит это ограничение. Обратите внимание, что эта опция поддерживается только для пейджера less(1).

Вы также можете использовать любые другие уже рассмотренные опции, например, номер загрузки:

Очистка места на диске: управление пространством на жёстком диске для системного журнала


С сегодняшними жёсткими дисками 2.3 ГБ это не так уж много места, но в демонстрационных целях мы все равно очистим место на диске. Есть два способа сделать это. Первый — установить ограничение размера, до которого вы хотите уменьшить журнал. Конечно, он снова вырастет, но процедуру можно будет повторить снова.

Мы будем использовать замечательную опцию --vacuum-size и передадим размер, до которого мы хотели бы уменьшить занимаемое место. Мы укажем 100 МБ. Это означает, мы просим journalctl очистить все данные логов, которые занимают больше 100 МБ в системном журнале.


Данные против информации

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

Читайте также: