Поиск по сайту:

Как использовать журналы Ubuntu для устранения неполадок


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

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

В этом уроке вы узнаете:

  • Как использовать команду journalctl для просмотра записей журнала
  • Как просматривать журналы, связанные с ядром и службами
  • Как использовать файлы журнала в /var/log
  • Как использовать AppArmor для создания логов для определенных ресурсов

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

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

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

  1. Самый простой синтаксис commad для journalctl заключается в том, чтобы выполнять его без дополнительных опций. Вывод будет включать в себя все, что ваша система зарегистрировала, что, вероятно, окажется слишком громоздким для ручной обработки из-за огромного объема данных. Помните, что довольно часто записи в журнале исчисляются миллионами после того, как машина была включена в течение некоторого времени.

    
    journalctl
    

    Посмотрите на скриншот ниже, чтобы увидеть общий формат журналов. Вывод будет автоматически передаваться на меньший уровень. Используйте клавишу Enter для прокрутки строка за строкой или пробел для прокрутки страницы за страницей. Чтобы выйти из вывода журнала, нажмите q на клавиатуре.

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

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

    
    journalctl --list-boots
    

    На скриншоте ниже показано, что journalctl может получить доступ к журналам последних 11 загрузок нашей системы. Наша текущая загрузка обозначена цифрой 0, а предыдущая загрузка — цифрой 1.

  4. Теперь попробуем просмотреть логи, которые были записаны во время предыдущей загрузки системы. Для этого мы будем использовать опцию -b (boot) и число, которое соответствует самой последней загрузке, или -1. Вы можете указать другое число, если хотите просмотреть журналы для еще более старой загрузки.

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

    
    journalctl -b b4b4ea9fd1eb431699634b90e1c24d3f
    
  6. Возможно, вам нужно найти записи в журнале, которые произошли с определенным таймфреймом. Например, если вы знаете, что столкнулись с системной ошибкой в течение последнего часа. В этом случае опции --since и --until полезны для изоляции соответствующих файлов журнала за определенный период времени. Например, чтобы просмотреть все журналы со вчерашнего дня:

    
    journalctl --since yesterday
    
  7. Вы также можете использовать варианты в сочетании друг с другом. В этом примере мы проверяем все записи журнала со вчерашнего дня до двух часов назад:

    
    journalctl --since yesterday --until "2 hours ago"
    
  8. Используйте формат даты YYYY-MM-DD HH:MM:SS со следующими двумя вариантами, если вы хотите изолировать записи журнала для определенного периода времени:

    
    journalctl --since 2022-10-03 01:00:00 --until 2022-10-04 14:30:00
    

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

  9. Чтобы просмотреть записи, которые были зарегистрированы для определенной системной службы, используйте флаг -u. Например, чтобы увидеть все записи, зарегистрированные Nginx:

    
    journalctl -u nginx.service
    

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

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

    
    journalctl -n 10
    

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

    
    journalctl -n 10 -u nginx.service
    
  11. Просмотр логов ядра с помощью journalctl

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

    
    journalctl -k
    

    Но, поскольку этот параметр сам по себе вернет слишком много записей журнала, может быть полезно видеть только те из них, которые имеют определенный приоритет. Наивысший приоритет — уровень 0, а самый низкий — уровень 7. Уровни лога следующие:

    
    0: emergency
    1: alert
    2: critical
    3: error
    4: warning
    5: notice
    6: info
    7: debug
    

    Более подробная информация здесь: Введение в уровни ведения журнала ядра Linux

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

    
    journalctl -p 3
    
  13. Использование дополнительных команд с journalctl

    Мы также можем использовать такие команды, как grep, чтобы помочь найти релевантные данные в выводе journalctl. Например, давайте поищем записи, которые содержат текст 'GNOME' (название нашего установленного графического интерфейса). Обратите внимание, что опция -i просто делает регистр поиска нечувствительным:

    
    journalctl | grep -i gnome
    
  14. Подключение к команде tail полезно для проверки последних записей, содержащихся в выводе:

    
    journalctl | grep -i gnome | tail
    

Просмотр файлов журнала

До появления универсальной системы ведения журналов (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 и начала ведения журнала информации о выбранных ресурсах:

  1. Во-первых, чтобы проверить текущее состояние AppArmor:

    
    sudo apparmor_status
    

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

  2. Чтобы перевести профиль в режим жалобы (выдает предупреждения, но не предпринимает никаких действий):

    
    sudo aa-complain /path/to/binary
    
  3. Чтобы перевести профиль в принудительный режим (генерирует журналы, но также применяет политики управления доступом):

    
    sudo aa-enforce /path/to/binary
    
  4. Чтобы просмотреть лог-файлы, сгенерированные AppArmor, мы можем проверить лог-файл /var/log/dmesg:

    
    cat /var/log/dmesg | grep apparmor
    

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

Заключение

В этом руководстве мы рассмотрели, как использовать журналы для устранения системных проблем в системе Ubuntu Linux. Методом go to обычно является команда journalctl, которая позволяет нам эффективно просматривать сообщения ядра и журнала службы. Мы узнали, как различные варианты могут помочь нам изолировать информацию, необходимую для устранения неполадок. Другие методы включали каталог /var/log и сервис AppArmor, которые предоставляют некоторые дополнительные способы помощи в ведении журнала.

Статьи по данной тематике: