Как использовать журналы Ubuntu для устранения неполадок
При устранении неполадок с системой в Ubuntu Linux лучший способ начать работу — просмотреть системные журналы. По сути, каждое системное событие где-то регистрируется. Это включает в себя сообщения ядра, сообщения о состоянии службы и почти все остальное, что вы можете себе представить. Нередки случаи, когда системные журналы быстро заполняются миллионами записей за короткий промежуток времени. Имея всю эту информацию, нам просто нужно знать, как найти то, что мы ищем, а затем быстро определить виновника надоедливых системных проблем в Ubuntu.
В этом руководстве вы узнаете о различных методах использования системных журналов для устранения неполадок в Ubuntu Linux. Вы увидите различные места, где могут храниться записи журнала, а также то, как лучше всего анализировать данные и изолировать соответствующую информацию. Это первый шаг в процессе устранения неполадок, который даст вам дополнительные подсказки о том, как отследить основную причину проблем, возникающих в вашей системе. Давайте начнем!
В этом уроке вы узнаете:
- Как использовать команду
journalctl
для просмотра записей журнала - Как просматривать журналы, связанные с ядром и службами
- Как использовать файлы журнала в
/var/log
- Как использовать AppArmor для создания логов для определенных ресурсов
Использование журнала systemd для просмотра логов
Ubuntu — одна из многих операционных систем, построенных на основе systemd. Частью фреймворка systemd является journald, который представляет собой службу, собирающую логи. Поскольку почти все сервисы интегрированы в systemd, демон журнала способен собирать тонны информации о процессах, запущенных в Ubuntu. Ядро также тесно интегрировано с systemd, поэтому сообщения, специфичные для ядра, также будут собираться с помощью journald.
К службе журнала systemd можно обратиться с помощью команды journalctl. Так мы просматриваем записи журнала и указываем, какой тип логов мы хотим видеть. Давайте рассмотрим несколько примеров команд, чтобы увидеть, как мы можем использовать эту команду для просмотра журналов в Ubuntu:
-
Самый простой синтаксис commad для
journalctl
заключается в том, чтобы выполнять его без дополнительных опций. Вывод будет включать в себя все, что ваша система зарегистрировала, что, вероятно, окажется слишком громоздким для ручной обработки из-за огромного объема данных. Помните, что довольно часто записи в журнале исчисляются миллионами после того, как машина была включена в течение некоторого времени.journalctl
Посмотрите на скриншот ниже, чтобы увидеть общий формат журналов. Вывод будет автоматически передаваться на
меньший
уровень. Используйте клавишуEnter
для прокрутки строка за строкой илипробел
для прокрутки страницы за страницей. Чтобы выйти из вывода журнала, нажмитеq
на клавиатуре. Одно из удобств journald заключается в том, что записи журнала хранятся отдельно при каждой загрузке системы. Это соглашение упрощает выявление ошибок, возникших, например, при последней загрузке системы. Используйте опцию
--list-boots
для просмотра списка всех журналов предыдущих загрузок.journalctl --list-boots
На скриншоте ниже показано, что
journalctl
может получить доступ к журналам последних 11 загрузок нашей системы. Наша текущая загрузка обозначена цифрой 0, а предыдущая загрузка — цифрой 1.Теперь попробуем просмотреть логи, которые были записаны во время предыдущей загрузки системы. Для этого мы будем использовать опцию -b (boot) и число, которое соответствует самой последней загрузке, или
-1
. Вы можете указать другое число, если хотите просмотреть журналы для еще более старой загрузки.journalctl -b -1
Вы также можете использовать идентификатор загрузки для просмотра журналов предыдущей загрузки. Эта буквенно-цифровая строка не изменится, в отличие от последовательных чисел, которые продолжают увеличиваться после каждой загрузки.
journalctl -b b4b4ea9fd1eb431699634b90e1c24d3f
Возможно, вам нужно найти записи в журнале, которые произошли с определенным таймфреймом. Например, если вы знаете, что столкнулись с системной ошибкой в течение последнего часа. В этом случае опции
--since
и--until
полезны для изоляции соответствующих файлов журнала за определенный период времени. Например, чтобы просмотреть все журналы со вчерашнего дня:journalctl --since yesterday
-
Вы также можете использовать варианты в сочетании друг с другом. В этом примере мы проверяем все записи журнала со вчерашнего дня до двух часов назад:
journalctl --since yesterday --until "2 hours ago"
Используйте формат
даты YYYY-MM-DD HH:MM:SS
со следующими двумя вариантами, если вы хотите изолировать записи журнала для определенного периода времени:journalctl --since 2022-10-03 01:00:00 --until 2022-10-04 14:30:00
Это может быть полезно, если вы точно знаете, что ошибка или соответствующее событие произошли где-то в это время, и вам нужно точно определить, когда именно она произошла, или посмотреть, какие данные были зарегистрированы, когда это произошло.
Чтобы просмотреть записи, которые были зарегистрированы для определенной системной службы, используйте флаг
-u
. Например, чтобы увидеть все записи, зарегистрированные Nginx:journalctl -u nginx.service
В нем будут отображаться все записи журнала, записанные службой Nginx, включая сообщения о состоянии, предупреждения, ошибки и т. д.
Чтобы увидеть некоторые из самых последних записей, мы можем использовать опцию
-n
. По умолчанию будут показаны последние 10 записей журнала.journalctl -n 10
Обратите внимание, что эта опция будет наиболее полезной в сочетании с опцией
-u
, описанной выше. В противном случае вы будете видеть только последнее выделенное количество записей журнала для всей системы:journalctl -n 10 -u nginx.service
Просмотр логов ядра с помощью journalctl
Чтобы видеть только сообщения, относящиеся к ядру, зарегистрированные в журнале, мы предоставляем опцию
-k
:journalctl -k
Но, поскольку этот параметр сам по себе вернет слишком много записей журнала, может быть полезно видеть только те из них, которые имеют определенный приоритет. Наивысший приоритет — уровень 0, а самый низкий — уровень 7. Уровни лога следующие:
0: emergency 1: alert 2: critical 3: error 4: warning 5: notice 6: info 7: debug
Более подробная информация здесь: Введение в уровни ведения журнала ядра Linux
Используйте опцию
-p
для просмотра логов определенного уровня, а также тех, которые выше него по приоритету. В этом примере мы будем использовать уровень 3, который представляет собой любую запись, помеченную как ошибка, критическая, предупреждение или чрезвычайная ситуация.journalctl -p 3
Использование дополнительных команд с journalctl
Мы также можем использовать такие команды, как
grep
, чтобы помочь найти релевантные данные в выводеjournalctl
. Например, давайте поищем записи, которые содержат текст 'GNOME' (название нашего установленного графического интерфейса). Обратите внимание, что опция-i
просто делает регистр поиска нечувствительным:journalctl | grep -i gnome
Подключение к
команде tail
полезно для проверки последних записей, содержащихся в выводе:journalctl | grep -i gnome | tail
NOTE
Запуск journalctl сам по себе не очень полезен. Часть хитрости использования журналов заключается в понимании того, как изолировать релевантную информацию с помощью дополнительных опций команд или передачи данных к другим инструментам, таким как grep.
Просмотр файлов журнала
До появления универсальной системы ведения журналов (journald) журналы обычно хранились в файлах, расположенных в каталоге /var/log
. Просмотр этого каталога не так полезен, как раньше, так как ядро и большинство сервисов в наши дни будут полагаться на journald для хранения записей журнала, а у нас уже есть удобная команда journalctl
для их эффективного просмотра.
Однако, некоторые службы, такие как менеджер пакетов apt
, и системные события, такие как сама загрузка, сохраняют записи в /var/log
. Нишевые программы и пользовательские скрипты также могут использовать этот каталог, поэтому его стоит проверить.
Просто используйте команду cat
or less
для просмотра записей журнала в файле. Вам также может потребоваться использовать grep
для того, чтобы изолировать точную информацию, которую вы ищете:
cat /var/log/service/file.log
ЗНАЕТЕ ЛИ ВЫ?
Файлы журналов регулярно ротируются в этом каталоге, так как они заполняются слишком большим количеством записей и через некоторое время занимают место. Служба logrotate отвечает за ротацию этих файлов журнала и может быть настроена в соответствии с вашими потребностями.
Использование логов AppArmor
AppArmor — это система мандатного контроля доступа (MAC), реализованная в различных дистрибутивах, включая Ubuntu Linux. AppArmor работает, назначая «профили» процессам, сетевым портам, файлам и пользователям. Используя AppArmor, пользователи могут проводить аудит и регистрировать то, какие сущности пытаются получить доступ к ограниченным ресурсам.
Вот несколько команд для взаимодействия с AppArmor и начала ведения журнала информации о выбранных ресурсах:
Во-первых, чтобы проверить текущее состояние AppArmor:
sudo apparmor_status
Возможные режимы: принудительный, жалующийся и неограниченный.
Чтобы перевести профиль в режим
жалобы
(выдает предупреждения, но не предпринимает никаких действий):sudo aa-complain /path/to/binary
Чтобы перевести профиль в
принудительный
режим (генерирует журналы, но также применяет политики управления доступом):sudo aa-enforce /path/to/binary
Чтобы просмотреть лог-файлы, сгенерированные AppArmor, мы можем проверить лог-файл
/var/log/dmesg
:cat /var/log/dmesg | grep apparmor
Тем не менее, было бы более эффективно просматривать связанные записи журнала AppArmor с помощью команды
journalctl
, как показано выше.
Заключение
В этом руководстве мы рассмотрели, как использовать журналы для устранения системных проблем в системе Ubuntu Linux. Методом go to обычно является команда journalctl
, которая позволяет нам эффективно просматривать сообщения ядра и журнала службы. Мы узнали, как различные варианты могут помочь нам изолировать информацию, необходимую для устранения неполадок. Другие методы включали каталог /var/log
и сервис AppArmor, которые предоставляют некоторые дополнительные способы помощи в ведении журнала.