Читайте и анализируйте системные журналы Linux с помощью Journalctl
Тот факт, что в вашей системе нет ошибок, не означает, что все работает нормально. Почему бы не прочитать и проанализировать системные журналы Linux, чтобы узнать, что происходит с вашей системой? Не знаете как? К счастью для вас, Journalctl справится с этой задачей!
В этом руководстве вы узнаете, как внимательно следить за поведением вашей системы с помощью инструмента Journalctl, читая и анализируя файлы журнала журнала systemd.
Читайте дальше и поддерживайте свою систему в расцвете сил!
Предварительные условия
Этот урок будет практической демонстрацией. Если вы хотите следовать инструкциям, убедитесь, что у вас есть следующее.
- Машина с Linux. В этой демонстрации используется Ubuntu 20.04 LTS, но вы можете использовать любой дистрибутив.
- Учетная запись без полномочий root с привилегиями sudo.
Установка правильного системного времени
Прежде чем вы сможете использовать Journalctl, вам необходимо установить системное время. Временные метки, записанные в журнале systemd, указаны в формате UTC, поэтому вам необходимо выбрать правильный часовой пояс. Если ваше время отстает всего на несколько секунд, некоторые записи журнала могут отображаться неправильно, когда вы будете использовать их позже.
1. Откройте терминал и выполните команду timedatectl ниже, чтобы получить список доступных часовых поясов.
timedatectl list-timezonesВыберите и отметьте один из приведенного ниже списка, соответствующий вашему региону. Например, если вы живете в Америке, выберите часовой пояс, соответствующий ближайшему к вашему городу.
2. Затем выполните приведенную ниже команду, чтобы установить часовой пояс (set-timezone). Замените your-zone названием часового пояса, который вы выбрали ранее (шаг первый). Эта команда устанавливает системное время в соответствии с выбранным вами часовым поясом.
С этого момента каждая запись в журнале будет регистрироваться по вашему местному времени.
sudo timedatectl set-timezone your-zone3. Наконец, выполните следующую команду, чтобы убедиться, что вы правильно установили часовой пояс.
timedatectl statusКак показано ниже, текущая системная дата и время должны соответствовать выбранному вами региону и часовому поясу.
Показ всех журналов
Теперь с установкой часового пояса можно приступить к просмотру журналов в вашей системе. Systemd System and Service Manager обеспечивает централизованное управление демонами журналов, которые собирают журналы из различных частей/инструментов системы.
Но как просмотреть логи? Утилита Journalctl позволяет просматривать журналы вашего компьютера. И первое, что вам обычно хочется сделать, это показать все, что произошло с момента последней загрузки.
Запустите команду journalctl ниже, чтобы просмотреть все журналы демона Journald.
Утилита Journalctl реализует интерфейс командной строки демона Journald для сбора и просмотра журнала systemd. Утилита Journalctl позволяет пользователям анализировать активность и состояние любого объекта, управляемого systemd (сервиса, процесса и т. д.).
sudo journalctl
Команда отображает весь журнал, показанный ниже, и его немного сложно читать. Самые старые журналы находятся вверху списка, а самые последние — внизу.
Скорее всего, у вас будут сотни или тысячи записей, если журнал systemd записывает журналы достаточно долго.
Вы можете использовать другие параметры для фильтрации журналов, но вы не будете здесь рассматривать эти фильтры, поскольку эта тема выходит за рамки данного руководства.
Поскольку вы, вероятно, захотите более выборочно просматривать список, было бы неплохо использовать стрелки вверх/вниз. Нажмите K, чтобы перейти на страницу вверх, и J, чтобы перейти на страницу вниз. Нажмите END, чтобы перейти на последнюю страницу.
Обратите внимание, что временные метки в начале каждой записи — это ваше местное время, поскольку вы ранее установили свой часовой пояс в разделе «Установка правильного системного времени» (шаг второй).
Как сделать журнал постоянным
Вы видели, как просмотреть все журналы, но обычно вам желательно хранить журналы в течение более длительного периода, чтобы у вас было больше шансов найти данные о проблемах, которые возникают редко. Как? Делая журнал постоянным.
Каталог /run/log/journal/ является расположением данных журнала по умолчанию и по умолчанию не является постоянным. Как только вы перезагружаете систему, все логи пропадают. Идея постоянного ведения журналов заключается в сохранении всех файлов журналов, однако старые журналы архивируются, когда становятся слишком большими.
Чтобы сделать журнал постоянным между загрузками, вы отредактируете файл /etc/systemd/journald.conf и настроите его на использование постоянного места хранения.
1. Откройте файл /etc/systemd/journald.conf в предпочитаемом вами текстовом редакторе и найдите директиву Storage=auto, как показано ниже.
2. Затем измените значение директивы Storage с auto на persistent, затем сохраните изменения и закройте редактор. Держите директиву Storage в одной строке и без пробелов между директивой и значением, иначе конфигурация не будет работать.
3. Выполните следующую команду, чтобы перезапустить службу systemd-journald и активировать все изменения. Эта команда не выводит выходные данные, а перезагружает ваш компьютер и открывает другой терминал после завершения этой команды.
На этом этапе systemd проигнорирует /run/log/journal и вместо этого сохранит данные журнала в каталоге /var/log/journal, поэтому ваш журнал журналов становится постоянным между ботинки.
Когда вы запускаете службу
systemd-journald, она автоматически создает каталог /var/log/journal, если он не существует.
sudo systemctl restart systemd-journald4. Теперь выполните приведенную ниже команду, чтобы проверить состояние systemd-journald.service.
sudo systemctl status systemd-journald.serviceВы увидите активный (работающий) статус, если ваша конфигурация работает, как показано ниже. Вывод ниже подтверждает, что журнал работает должным образом.
5. Запустите приведенную ниже команду ls, чтобы проверить, существует ли каталог /var/log/journal.
ls /var/log/journalВы увидите следующий вывод — UUID постоянного журнала. Этот UUID не имеет какого-либо особого значения и представляет собой просто случайную уникальную строку, генерируемую во время процесса загрузки. Эта строка представляет собой идентификатор, который вы можете использовать для ссылки на данные в /var/log/journal.
Запишите UUID, поскольку вы будете использовать его для вывода списка журналов журналов (шаг шестой).
6. Наконец, выполните приведенную ниже команду, чтобы просмотреть журналы журналов. Обязательно замените myUUID ранее записанным UUID (шаг пятый).
ls /var/log/journal/myUUIDАналогично ниже вы увидите журнал вашей последней загрузки. И теперь у вас есть постоянная система журналирования!
Вывод записей журнала из текущей загрузки
Вы узнали, как отображать все записи журнала. Но, возможно, вы предпочитаете отфильтровывать определенные типы журналов. В этом случае вы можете просмотреть только записи журнала ядра.
Инструмент Journalctl имеет мощный синтаксис фильтрации, который позволяет отображать определенные типы записей журнала. Или даже показывать соответствующую информацию, например идентификатор процесса (PID) или имя устройства исходной службы.
Существуют разные способы фильтрации журналов, но, возможно, вас интересует только просмотр журналов текущей загрузки. Если да, то базовая команда journalctl поможет.
Запустите команду journalctl ниже, чтобы просмотреть все записи журнала из вашей текущей загрузки (-b), относящиеся к вашей текущей системе/среде. Флаг -b указывает команде journalctl отображать журналы, хранящиеся в журнале с момента последней загрузки системы.
journalctl -b
Вывод журналов прошлых загрузок
При использовании journalctl для устранения неполадок вам также может потребоваться отобразить записи журнала конкретной прошлой загрузки. Возможно, у вас есть служба, которая запускается при одной загрузке, но дает сбой при другой. В этом случае вам необходимо изолировать запись журнала от второй загрузки, чтобы увидеть, что пошло не так.
1. Запустите приведенную ниже команду, чтобы отобразить список прошлых загрузок (-list-boots).
journalctl --list-bootsКак показано ниже, поскольку в предыдущем разделе вы настроили постоянное ведение журнала, журналctl отображает все прошлые загрузки.
- Каждая строка в списке указывает на предыдущую запись журнала загрузки. Первый столбец — это смещение загрузки, которое вы можете использовать для ссылки на каждую запись. Смещения отображаются в виде чисел (-1, 0).
- Вы также можете использовать второй столбец, идентификатор загрузки, как абсолютную ссылку на загрузочную запись.
2. Затем запустите команду journalctl -b -1, чтобы отобразить записи журнала из загрузки 1 (предыдущая загрузка). Но вы также можете отображать записи журнала других загрузок, изменив номер загрузки (т. е. загрузка 2, загрузка 3…).
journalctl -b -13. Наконец, запустите приведенную ниже команду, чтобы отобразить записи журнала из той же загрузки, но на которые ссылается ее идентификатор загрузки (boot_id). Обязательно замените boot_id идентификатором загрузки, который вы указали на первом шаге.
journalctl -b boot_idСписок журналов на основе временных окон
Вы видели, как просмотреть все журналы прошлых загрузок, но что, если вам нужно просмотреть определенные журналы по времени? Добавление параметров --since и --until позволяет фильтровать записи журнала журнала на основе временных окон.
Запустите команду journalctl ниже, чтобы найти все записи журнала, созданные 24 часа назад с определенной даты и времени (--since "2022-02-04 12:40:49 ”) ).
journalctl --since "2022-02-04 12:40:49”
Возможно, вы не хотите указывать дату и время. Если да, то вместо этого используйте относительные значения и продолжительность времени. Например, «2 минуты», «30 минут», «1 час» и даже такие дни, как «вчера», «сейчас» и так далее.
Запустите приведенную ниже команду, чтобы отобразить все записи журнала, произошедшие 24 часа назад с текущей даты и времени ( «вчера» ).
journalctl --since "yesterday"
А что, если ваша служба SSH работала сегодня с 10:10 и продолжала работать до тех пор, пока не была прервана час назад? Добавьте параметры --since и --until к команде journalctl, чтобы узнать, что пошло не так.
Запустите команду ниже, чтобы найти журналы, созданные с 10:10 сегодня до 1 час назад.
journalctl --since 10:10 --until "1 hour ago"
Фильтрация журналов на основе единицы исходного процесса
Поиск журналов, созданных с определенной даты и времени, пригодится для устранения неполадок, но вы все равно можете получить много записей в выходных данных. Как дополнительно фильтровать журналы?
Например, вы хотите отфильтровать записи журнала веб-сервера NGINX, который не запустился при загрузке. Используйте команду journalctl с опцией -unit и именем модуля службы для просмотра журналов.
Запустите приведенную ниже команду, чтобы просмотреть все записи журнала на основе единицы исходного процесса (-u) (nginx.service). Этот тип фильтрации полезен для знания PID процессов или служб, связанных с конкретной ошибкой или предупреждением.
journalctl -u nginx.service
Возможно, вы предпочитаете активно отображать любые изменения по мере их возникновения, например, при устранении неполадок службы, и вам необходимо просматривать журналы по мере их загрузки журналом. Если это так, выполните приведенную ниже команду, чтобы просмотреть или отслеживать (-f) все изменения по мере их возникновения.
journalctl -f
Вы уже видели, что журнал Journalctl является гибким и имеет множество опций для фильтрации и отображения журналов. В этом руководстве невозможно показать все виды фильтров и временных интервалов, но вы можете запустить команду
man Journalctl, чтобы увидеть другие параметры, предлагаемые инструментом Journalctl.
Настройка формата вывода
По умолчанию журналctl отображает записи журнала в формате, похожем на пейджер, и окрашивает текст терминала при выводе. Но вы, вероятно, захотите выводить свои журналы в стандартизированном, более удобном для анализа формате. В этом случае вы можете использовать любые инструменты для работы с текстом.
Запустите приведенную ниже команду, чтобы подавить разбиение на страницы и раскраску. Инструмент Journalctl позволяет указать, что отображать на стандартном выводе, с помощью директивы вывода в файле конфигурации.
journalctl --no-pager
Но если вы предпочитаете указать формат вывода, добавьте параметр -o в команду Journalctl. В следующем примере используется формат вывода JSON, но вы можете использовать любые другие параметры, доступные в журналеctl.
Команда ниже выводит записи журнала текущей загрузки (-b), созданные для службы NGINX (nginx), и выводит список в формате JSON (-o json).
journalctl -b -u nginx -o json
Хотя вы также можете использовать собственный формат вывода,
journalctlпредоставляет несколько полезных предопределенных форматов, таких как JSON, CSV и Syslog. У каждого из этих форматов есть свои преимущества, но вам следует обратиться к страницам инструментов для работы с текстом, чтобы получить дополнительную информацию о том, как они обрабатывают текст.
Заключение
В этом руководстве вы узнали, как использовать команду journalctl для просмотра журналов журнала systemd. Но прежде чем использовать любую из этих команд, вам следует сначала выбрать соответствующие параметры подкоманды, чтобы указать, что вы хотите просмотреть.
На этом этапе вы теперь можете быстро находить и точно определять конкретную информацию в системных журналах с помощью journalctl. Теперь у вас есть необходимые знания, так почему бы не перейти к управлению службами Linux с помощью systemctl и Journalctl?




















