LXF132:logs

Материал из Linuxformat.

Перейти к: навигация, поиск

Содержание

Журналы. Раскопайте залежи информации о своей системе

Файлы журналов Linux – что это такое, где их найти и зачем они вам? Ответы знает Шашанк Шарма.

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

Большая часть журналов помещается в файлах («логах») внутри каталога /var/log/. Там находятся самые разные журналы, каждый для своей части системы. Например, есть журналы специально для ядра Linux, равно как для APT и X-сервера.

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

Почти во всех дистрибутивах Linux системные журналы создаются соответствующим демоном (syslogd). В файле /etc/syslogd.conf имеется список всех генерируемых им лог-файлов. Некоторые приложения создают собственные журналы, и они тоже находятся в каталоге /var/log/.

Журналы в Linux

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

Команда dmesg – полезнейшее средство выявления проблем с оборудованием. В основном она выводит на экран информацию обо всех подключенных устройствах, обнаруженных на этапе загрузки. Однако dmesg также хранит все сообщения ядра. И если у вас барахлит видеокарта Nvidia, команда dmesg | grep nvidia скажет вам, распозналась она или нет. Там же ищите сведения про всю свою периферию: web-камеру, USB-перо, накопители, беспроводные клавиатуры и прочее.

Хотя журналы – это простой текст (читаемый и в консоли, и в графических программах), большинство дистрибутивов предусматривает для их просмотра графическое приложение. Пользователям Gnome для этого предлагается утилита gnome-system-log. Чтобы увидеть информацию, содержащуюся в журнале, выберите его в списке на левой панели и укажите дату, которая вас интересует.

Из-за громоздкости большинства журналов приходится часто применять программы вроде grep и tail, чтобы отсеять только нужную информацию, а не прокручивать всякий раз весь файл целиком. Например, использование систем авторизации – программ, которые запрашивают пароль у пользователя, таких как sudo, сеансы работы с SSH и тому подобное – отслеживается в файле /var/log/auth.log. При активной работе в этом файле может оказаться множество записей – и если вам нужна только информация, связанная с входами через sshd, скомандуйте grep sshd /var/log/auth.log | less.

По умолчанию, команда tail выводит 10 последних строк указанного файла, так что команда tail /var/log/Xorg.0.log отобразит последние 10 строк журнала X.org. Если их недостаточно для диагностики проблемы с дисплеем, можете использовать опцию -n, чтобы tail выводил заданное число строк (n) с конца.

Идея применять команду tail к файлам журнала состоит в том, что если приложение работает неправильно (например, не появляется GUI), то относящаяся к нему информация будет располагаться в самом конце файла, так как программа уже не выполняется и в журнал не добавляется ничего нового.

Если приложение все же работает и файл журнала обновляется, tail все равно пригодится для отслеживания его обновлений в реальном времени, благодаря опции -f (follow, следовать). Скажем, команда tail -f example.log запустит tail в цикле, который будет постоянно ожидать добавлений в файл. Для выхода из цикла и возврата в терминал нажмите Ctrl+C.

Архивы журналов и logrotate

Просмотрев содержимое каталога /var/log/, можно заметить, что некоторые лог-файлы имеют имена kern.log.0, kern.log.1.gz и так далее. Они образуются после ротации (автоматической архивации) журналов. С течением времени почти все журналы изрядно разрастаются, и читать их становится сложно. Тогда первоначальный файл журнала переименовывается, и заводится новый журнал kern.log.

Утилита logrotate, управляемая файлом /etc/logrotate.conf, отвечает за создание новых журналов, а также переименование и архивирование старых. Файл /etc/logrotate.conf обычно имеет следующий вид:

# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d

Каталог /etc/logrotate.d содержит настройки для отдельных файлов журналов: apt, dpkg и т. д.

При соответствующей настройке logrotate не сразу удаляет старые журналы, а какое-то время хранит их в сжатом с помощью gzip виде. При желании можно указать, чтобы перед удалением logrotate отсылал старые журналы на заданный адрес электронной почты. Но прежде чем браться за реформы в /etc/logrotate.conf или любом файле из каталога /etc/logrotate.d, изучите man-страницу logrotate.

Более важными опциями настройки являются daily, weekly или monthly, которые используются для определения частоты ротации журнала. Опция rotate count укажет logrotate выполнить ротацию журнала count раз перед тем, как удалить его. Так, rotate 4 будет оставлять на хранении только четыре устаревших журнала.

Расшифровка журнала

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

Apr 7 03:50:01 linuxlala-GCPD CRON[5583]: pam_unix(cron:session): session opened for user root by (uid=0)
Apr 7 03:50:04 linuxlala-GCPD CRON[5583]: pam_unix(cron:session): session closed for user root
Apr 7 03:55:04 linuxlala-GCPD gdm[2390]: pam_unix(gdm-autologin: session): session closed for user linuxlala
Apr 8 03:27:08 linuxlala-GCPD gdm[2412]: pam_unix(gdm-autologin: session): session opened for user linuxlala by (uid=0)
Apr 8 03:27:08 linuxlala-GCPD gdm[2412]: pam_ck_connector(gdm-autologin:session): nox11 mode, ignoring PAM_TTY :0

Каждая строка этого небольшого фрагмента, взятого из файла /var/log/auth.log, содержит пять важных кусков информации, в таком порядке:

  1. Дата и время, когда сообщение попало в журнал, например Apr 7 03:55:04.
  2. Имя компьютера (hostname), от которого пришло сообщение – в нашем случае это linuxlala-GCPD.
  3. Имя программы или службы, например, gdm или cron.
  4. ID процесса программы или службы, пославшей сообщение – в квадратных скобках.
  5. Собственно текст сообщения.

Некоторые журналы в каталоге /var/log могут читаться только специальными программами или утилитами. Упомянем в этой связи лог-файл отказов входа в систему (/var/log/faillog), журнал последних входов (/var/log/lastlog) и журнал записей о входе (/var/log/wtmp), но их, однако, не прочесть без команд faillog, lastlog и who, соответственно.

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

Семь полезных журналов

Имя файла Название журнала Описание
boot.log Журнал загрузки Помимо последних загрузочных сообщений, расположенных в самом конце, содержит информацию обо всех запущенных и остановленных службах.
dmesg Журнал запуска ядра Записывает все сообщения, выдаваемые ядром при загрузке (и не только).
messages Журнал сообщений Многие программы и службы записывают cообщения в этот журнал общего назначения.
Xorg.0.log Журнал X-сервера Сообщения от X-сервера X.org.
Kern.log Журнал ядра Сообщения от ядра Linux. Они помогут исправить неполадки при установке нового ядра.
Syslog Системный журнал Содержит информацию почти обо всем. Не найдя нужной информацию в других журналах, обращайтесь сюда.
daemon.log Журнал демонов Предоставляет сведения о системных и прикладных демонах, таких как служба Bluetooth HCI, база данных MySQL и т. д. Полезен при диагностике проблем, связанных с демонами.
Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию