Логи в Linux. Как найти и прочитать?

  Дмитрий Бушуев  | 

  Обновл. 20 Май 2021  | 

 1919

Процесс загрузки системы, работа приложений и служб, различные действия пользователей, сообщения ядра ОС и многое другое — все эти события регистрируются в специальных журналах операционной системы, так называемых log-файлах (или «логах»). Если в работе системы что-то пойдет не так, то эти файлы станут для вас полезным источником информации, с помощью которого вы сможете разобраться в причинах возникших проблем и самостоятельно их устранить.

Как посмотреть логи в Linux?

Большинство логов в Linux генерируются системными демонами syslogd или rsyslogd и хранятся в обычном текстовом файле ASCII в каталоге /var/log. Этот каталог содержит лог-файлы самой ОС, служб и различных приложений, запущенных в системе. Вот как этот каталог выглядит в типичной системе Debian Linux:

$ cd /var/log
$ ls

Если вы попробуете просмотреть какой-нибудь лог-файл от имени обычного пользователя, то в 99% случаев система ответит вам сообщением о нехватке прав доступа. Поэтому я заранее переключился на пользователя root (команда su –) и все дальнейшие действия будут выполняться от его имени.

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

root@debian:/var/log# tail boot.log

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

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

   tail — вывод последних 10 строк;

   head — вывод первых 10 строк;

   cat — вывод содержимого всего лог-файла;

   grep — поиск в лог-файле всех вхождений заданного выражения или фильтрация лог-файла по заданному выражению;

   zcat — отображает всё содержимое сжатых лог-файлов (с расширением *.gz);

   zmore — постраничный просмотр сжатых лог-файлов, без их распаковки;

   zgrep — поиск внутри сжатого лог-файла.

Основные логи


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

   системные лог-файлы;

   лог-файлы событий;

   лог-файлы служб;

   лог-файлы приложений.

Многие из этих лог-файлов располагаются в каталоге var/log. Наиболее распространенными логами являются:

   /var/log/boot.log — журнал загрузки системы (в нем хранится вся информация, связанная с этапами загрузки ОС);

   /var/log/kern.log — журнал ядра (в нем хранятся сообщения и предупреждения, поступающие непосредственно из ядра Linux);

   /var/log/syslog или /var/log/messages — журналы, в которых хранится информация об общей активности в системе (включая сообщения этапа загрузки);

   /var/log/auth.log или /var/log/secure — журналы аутентификации и безопасности (в них хранятся записи обо всех попытках входа в систему, включая как успешные, так и неудачные);

   /var/log/debug — журнал отладки (в нем хранится подробная отладочная информация системы и приложений);

   /var/log/daemon.log — журнал демонов (содержит информацию о событиях, связанных с различными запущенными в системе демонами/службами);

   /var/log/maillog или /var/log/mail.log — журналы почтовых серверов (в них хранится информация, относящаяся к почтовым серверам и архивированию электронных писем);

   /var/log/cron — журнал, в котором хранится информация о запланированных задачах (заданиях cron);

   /var/log/faillog — информация о неудачных входах в систему. Журнал полезен для изучения потенциальных нарушений безопасности, таких как: взломы учетных записей, попытки перебора паролей и пр.;

   /var/log/dmesg — журнал сообщений драйверов устройств. Просмотреть содержимое данного журнала можно с помощью команды dmesg. Стоит заметить, что при достижении своего предела, старые сообщения перезаписываются более новыми.

   /var/log/Xorg.x.log — журнал сообщений X-сервера.

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

   /var/log/dpkg.log — журнал пакетов, установленных через утилиту dpkg в системах на основе Debian Linux.

   /var/log/yum.log — журнал пакетов, установленных через утилиту yum в системах на основе Red Hat Linux.

   /var/log/emerge.log — журнал пакетов (ebuild), установленных через утилиту emerge в Gentoo Linux.

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

   /var/log/utmp и /var/log/utmp — журналы учета входов пользователей в систему. Для просмотра сообщений применяется команда utmpdump, например:

# utmpdump /var/log/wtmp

   /var/log/lastlog — журнал с информацией о последних входах пользователей. Для просмотра сообщений применяется команда lastlog:


Ротация лог-файлов

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

Цель ротации заключается в сжатии устаревших лог-файлов, которые занимают много места. Лог-файлы, в конце имен которых добавлены нули, являются ротируемыми (их имена были автоматически изменены системой). Ротацию лог-файлов можно выполнить с помощью команды logrotate, например:

# logrotate /var/log/daemon.log

Настройки ротации лог-файлов хранятся в соответствующем файле конфигурации /etc/logrotate.conf:

var/log/имя_журнала.log {
Missingok
Notifempty
Compress
Size 20k
Daily
Create 0600 root root
}

Разберем детально каждую строку вышеприведенного фрагмента:

   Missingok — указывает команде logrotate не выводить ошибку, если лог-файл отсутствует.

   Notifempty — если лог-файл пуст, то ротации не будет.

   Compress — лог-файл необходимо сжать.

   Size 20k — гарантирует, что лог-файл не превышает заданного размера, в противном случае производится его ротация.

   Daily — ротация лог-файлов по ежедневному расписанию. Также можно задавать ежечасный (Hourly), еженедельный (Weekly), ежемесячный (Monthly) или ежегодный (Yearly) график.

   Create 0600 root root — создает экземпляр лог-файла, владельцем и группой которого является root.

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

systemd и journald


systemd — это подсистема инициализации и управления службами в Linux, фактически вытеснившая в 2010-е годы традиционную подсистему init. В связке с ней работает и journald — демон сбора логов, являющийся частью systemd. Он собирает логи со всей системы и хранит их в бинарном виде в каталоге /var/log/journal. Для того чтобы их просмотреть, создана специальная утилита journalctl. Рассмотрим несколько примеров её применения.

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

# journalctl --list-boots | tail

Видите столбец, который я обвел красным? Цифрой 0 в нем обозначена текущая загрузка системы, цифрой -1 — предыдущая и т.д. Если вы хотите просмотреть логи какой-то конкретной загрузки, например, позапрошлой, то достаточно ввести:

# journalctl -b -2

Также можно просмотреть информацию по выбранной службе, например, по NetworkManager:

# journalctl -u NetworkManager

Или же вывести сообщения ядра ОС:

# journalctl -k

Для получения своих, каких-то более конкретных результатов, допускается комбинировать опции и параметры команды journalctl:

# journalctl -b -1 -u NetworkManager

Для вывода информации только по нескольким последним записям, применяется опция -n, задающая их количество:

# journalctl -u NetworkManager -n 5

Если говорить про systemd, то, наверное, стоит упомянуть и про команду systemd-analyze, которая отвечает за сбор статистики загрузки системы. Применение данной команды без параметров отобразит общее время загрузки системы:

# systemd-analyze

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

# systemd-analyze blame


Приоритет сообщений в лог-файлах

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

   emerg — наивысший приоритет, что-то сломалось, повод паниковать;

   alert — тревога, стоит волноваться;

   crit — критическое событие, стоит насторожиться;

   err — ошибка;

   warning — предупреждение;

   notice — уведомление, можно не заморачиваться;

   info — информационное сообщение, принять к сведению и забыть;

   debug — отладочная информация.

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

# grep 'err' /var/log/syslog

Или же для journalctl:

# journalctl -p warning -b 0


Заключение


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

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (8 оценок, среднее: 5,00 из 5)
Загрузка...

Добавить комментарий

Ваш E-mail не будет опубликован. Обязательные поля помечены *