Linux как посмотреть логи приложения
Системные администраторы, да и обычные пользователи Linux, часто должны смотреть лог файлы для устранения неполадок. На самом деле, это первое, что должен сделать любой сисадмин при возникновении любой ошибки в системе.
Расположение логов по умолчанию
Большинство файлов логов Linux находятся в папке /var/log/ вы можете список файлов логов для вашей системы с помощью команды ls:
Ниже мы рассмотрим 20 различных файлов логов Linux, размещенных в каталоге /var/log/. Некоторые из этих логов встречаются только в определенных дистрибутивах, например, dpkg.log встречается только в системах, основанных на Debian.
Просмотр логов в Linux
Чтобы посмотреть логи на Linux удобно использовать несколько утилит командной строки Linux. Это может быть любой текстовый редактор, или специальная утилита. Скорее всего, вам понадобятся права суперпользователя для того чтобы посмотреть логи в Linux. Вот команды, которые чаще всего используются для этих целей:
Я не буду останавливаться подробно на каждой из этих команд, поскольку большинство из них уже подробно рассмотрены на нашем сайте. Но приведу несколько примеров. Просмотр логов Linux выполняется очень просто:
Смотрим лог /var/log/dmesg, с возможностью прокрутки:
Просмотр логов Linux, в реальном времени:
tail -f /var/log/dmesg
Открываем лог файл dmesg:
Первые строки dmesg:
Выводим только ошибки из /var/log/messages:
grep -i error /var/log/dmesg
Кроме того, посмотреть логи на linux можно и с помощью графических утилит. Программа Журналы может быть использована для удобного просмотра и отслеживания системных журналов на ноутбуке или персональном компьютере с Linux.
Вы можете установить программу в любой системе с установленным X сервером. Также для просмотра логов может использоваться любой графический тестовый редактор.
Кроме того, у каждого сервиса есть свой лог файл, который можно посмотреть с помощью утилиты journalctl.
Выводы
В каталоге /var/log вы можете найти всю необходимую информацию о работе Linux. Из сегодняшней статьи вы достаточно узнали, чтобы знать где искать, и что искать. Теперь просмотр логов в Linux не вызовет у вас проблем. Если остались вопросы, задавайте в комментариях!
Как посмотреть логи в Linux?
Большинство логов в Linux генерируются системными демонами syslogd или rsyslogd и хранятся в обычном текстовом файле ASCII в каталоге /var/log. Этот каталог содержит лог-файлы самой ОС, служб и различных приложений, запущенных в системе. Вот как этот каталог выглядит в типичной системе Debian Linux:
Теперь можно перейти к непосредственному изучению содержимого лог-файлов. И для начала, мы заглянем внутрь boot.log. Данный лог-файл содержит информацию обо всех этапах загрузки операционной системы:
Как вы можете заметить, команда tail вывела последние 10 строк лог-файла, которые дают нам информацию о последовательном запуске различных сервисов, а также отображает их статус.
Как уже было сказано выше, многие лог-файлы хранятся в виде обычных текстовых файлов, поэтому их можно просматривать с помощью следующих стандартных команд:
tail — вывод последних 10 строк;
head — вывод первых 10 строк;
cat — вывод содержимого всего лог-файла;
grep — поиск в лог-файле всех вхождений заданного выражения или фильтрация лог-файла по заданному выражению;
zcat — отображает всё содержимое сжатых лог-файлов (с расширением *.gz);
zmore — постраничный просмотр сжатых лог-файлов, без их распаковки;
zgrep — поиск внутри сжатого лог-файла.
Основные логи
В основных логах, необходимых для работы Linux, содержится наиболее значительный объем информации о текущем состоянии системы. Их можно условно разделить на четыре категории:
Многие из этих лог-файлов располагаются в каталоге var/log. Наиболее распространенными логами являются:
/var/log/boot.log — журнал загрузки системы (в нем хранится вся информация, связанная с этапами загрузки ОС);
/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/dpkg.log — журнал пакетов, установленных через утилиту dpkg в системах на основе Debian Linux.
/var/log/yum.log — журнал пакетов, установленных через утилиту yum в системах на основе Red Hat Linux.
/var/log/emerge.log — журнал пакетов (ebuild), установленных через утилиту emerge в Gentoo Linux.
Не все журналы разработаны в удобочитаемом виде. Некоторые из них предназначены только для чтения системными приложениями и представлены в бинарном формате данных:
Ротация лог-файлов
Если учесть, что информация в лог-файлы поступает регулярно и по любому поводу, то в скором времени они должны были бы стать просто гигантскими, занимая при этом огромную кучу места на диске. А работать с ними было бы просто невозможно. Но этого не происходит благодаря ротации лог-файлов.
Цель ротации заключается в сжатии устаревших лог-файлов, которые занимают много места. Лог-файлы, в конце имен которых добавлены нули, являются ротируемыми (их имена были автоматически изменены системой). Ротацию лог-файлов можно выполнить с помощью команды logrotate, например:
Настройки ротации лог-файлов хранятся в соответствующем файле конфигурации /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 строк логов всех запусков системы, достаточно выполнить следующую команду:
Видите столбец, который я обвел красным? Цифрой 0 в нем обозначена текущая загрузка системы, цифрой -1 — предыдущая и т.д. Если вы хотите просмотреть логи какой-то конкретной загрузки, например, позапрошлой, то достаточно ввести:
Также можно просмотреть информацию по выбранной службе, например, по NetworkManager:
Для получения своих, каких-то более конкретных результатов, допускается комбинировать опции и параметры команды journalctl :
Для вывода информации только по нескольким последним записям, применяется опция -n , задающая их количество:
Если говорить про systemd, то, наверное, стоит упомянуть и про команду systemd-analyze, которая отвечает за сбор статистики загрузки системы. Применение данной команды без параметров отобразит общее время загрузки системы:
С помощью параметра blame можно увидеть, сколько времени понадобилось для загрузки каждой конкретной службы (при этом сверху отобразятся самые медленные):
emerg — наивысший приоритет, что-то сломалось, повод паниковать;
alert — тревога, стоит волноваться;
crit — критическое событие, стоит насторожиться;
err — ошибка;
warning — предупреждение;
notice — уведомление, можно не заморачиваться;
debug — отладочная информация.
Или же для journalctl:
Заключение
Конечно, на данном уроке были рассмотрены только самые основные моменты данной темы. Но в то же время объема представленной информации вполне хватит обычному пользователю, чтобы свободно работать с логами в Linux. Увидимся!
На сегодняшний день в Linux основными службами сбора логов являются rsyslog и systemd-journald, они работают независимо друг от друга и входят в состав большинства современных дистрибутивов.
rsyslog
“auth,authpriv.* /var/log/auth.log”
“*.*;auth,authpriv.none -/var/log/syslog”
Журналы логов можно открыть любой утилитой для просмотра текста, например less, cat, tail. Откроем файл “/var/log/auth.log”
Это был пример успешного подключения по ssh.
А так выглядит неудачная попытка:
В этом файле также фиксируется выполнение команд с повышенными правами.
Откроем файл /var/log/syslog
grep 'pptpd' /var/log/syslog
Во время диагностики можно использовать утилиту tail, которая выводит последние строки в файле. Команда “tail -f /var/log/syslog” позволит наблюдать запись логов в реальном времени.
Ротация логов Linux
Запись логов происходит непрерывно и размер файлов постоянно растет. Механизм ротации обеспечивает автоматическое архивирование старых журналов и создание новых. В зависимости от правил, обработка журналов может выполняться ежедневно, еженедельно, ежемесячно или при достижении файлом определенного размера. По мере создания новых архивов, старые могут быть просто удалены или предварительно отправлены по электронной почте. Ротация выполняется утилитой logrotate. Основная конфигурация находится в файле “/etc/logrotate.conf”, также обрабатывается содержимое файлов в директории “/etc/logrotate.d/”
Новые правила можно записывать в основной файл конфигурации, но более правильным будет создание отдельного файла в директории “/etc/logrotate.d/” По умолчанию в директории уже содержится несколько файлов.
Рассмотрим файл “/etc/logrotate.d/rsyslog”, который содержит правила ротации для журналов службы rsyslog.
В начале правила указывается путь к файлу журнала, затем в фигурных скобках перечисляются директивы.
- rotate 7 - необходимо постоянно хранить 7 файлов
- daily - ежедневно будет создаваться новый файл
- compress - старые файлы необходимо архивировать.
На скриншоте видно, что в каталоге “/var/log/” находится основной журнал “syslog” и семь архивов, что соответствует правилам ротации.
Более подробное описание по настройке утилиты logrotate можно найти в мануале, выполнив команду “man logrotate”
journald
Служба сбора логов systemd-journald является частью системы инициализации systemd. Файлы журнал хранятся в директории “/var/log/journal/” в специальном формате и могут быть открыты с помощью утилиты journalctl. Формат записей такой же как у службы rsyslog.
Команда journalctl без параметров выводит на экран все записи, но учитывая, что объем журнала может достигать нескольких гигабайт, такой способ просмотра не подходит для практического применения. Рассмотрим некоторые опции утилиты.
Для более гибкого поиска опции можно совмещать. Выведем все ошибки службы pptpd
journalctl -u pptpd -p err
journalctl -S "2020-02-18 04:15" /usr/bin/sudo
Для того, чтобы узнать сколько места на диске занимают файлы журнала, выполним команду
Для ограничения объема журнала размером 1Gb выполним команду
Открытие бинарных файлов
В заключении рассмотрим несколько специальных файлов в директории “/var/log/”, в которых регистрируются попытки входа пользователей в систему. Это бинарные файлы, которые могут быть открыты только специальными утилитами.
/var/log/wtmp - содержит информацию об успешном входе пользователей в систему, для открытия используется утилита last
/var/log/btmp - в файле регистрируются все неудачные попытки входа в систему, открывается командой lastb с повышенными правами. Параметр -n определяет количество выводимых строк начиная с конца файла.
/var/log/lastlog - содержит время последнего входа для каждой учетной записи, может быть открыт одноименной утилитой lastlog
Привет, друг. Если, вдруг, ты решил изучать Linux чуть глубже чем процесс установки, то рано или поздно (скорее рано), а если начнешь что-то шаманить в системе, то практически сразу, ты столкнёшься с такой штукой, которую принято называть логи. А если, вдруг, ты решишь озаботиться вопросами безопасности каких-нибудь серверов то красноглазить в километры логов будет твои любимым занятием. Я конечно утрирую, но не сильно.
Логи Linux
Теперь по сути. Основные файлы логов лежат в папке /var/log.
Для начала рассмотрим какие вообще есть логи Linux и что в них пишется. Конечно прям все мы обсуждать не будем, дабы не плодить много букв. Возьмем только те которые мне кажуться наиболее актуальными. Кстати, в разных дистрибутивах Linux названия одних и тех-же логов могут отличаться. Для более глубокого понимания можно заглянуть в конфиг службы rsyslog. Именно она является одной из основных служб Linux отвечающей за сбор логов. Её конфиг лежит: /etc/rsyslog.d/50-default.conf
Типы логов
А сейчас разберем, собственно сами логи, точнее какие бывают логи:
/var/log/mysql/ — лог базы данных MySQL.
Это конечно не все возможные логи, но для большинства основных задач достаточно. Ещё с некоторыми познакомимся дальше.
Информация о пользователях
Теперь познакомимся с командами позволяющими получить основную информацию о системе и пользователях. Это намного удобнее если нужно получить какую-то конкретную информацию и лопатить логи нет необходимости или желания.
Команда who покажет нам кто из пользователей сейчас залогинен в системе и когда он зашел. Данная информация хранится в файле /var/run/utmp, но хранится она там временно, только пока пользователь в системе. Если пользователей выйдет, запись удалится. Т.е. эта команда показывает только актуальные данные.
Если нужно выяснить когда пользователь заходил в систему и сколько времени в ней находился то эта инфа хранится в логе /var/log/wtmp. Чтобы получить эти данные используется команда last и указывается имя пользователя, либо можно имя не указывать тогда увидим отчет по всем пользователям.
Следующая команда, которая может быть крайне полезной, это:
Эта команда показывает список всех пользователей системы с датами их последнего входа. Тут стоит проверять чтобы системные пользователи ни когда не логинились в системе. Просто потому что они не могут этого делать сами и, если вдруг, ты подобное видишь, значит у тебя явно что-то идет не так как должно.
Способы чтения логов в Linux
Просматривать логи в Linux можно несколькими способами. Можно делать это стандартными средствами системы, а можно использовать специализированный софт.
Также логи можно изучать используя инструменты командной строки. Так как логи хранятся в виде текстовой информации, то и просматривать их можно соответствующими способами, как текстовую информацию. Самый простой, но не самый удобный вариант, команда cat:
Она просто выведет в терминал содержимое файла, дополнительный функционал не предусмотрен.
Чуть более удобна в использовании утилита less.
после ввода команды, чтобы увидеть справку можно нажать кнопку h, чтобы выйти кнопку q. Используя less, можно перемещаться по файлу лога впере-назад построчно, либо поэкранно. Также можно следить за изменениями в реальном времени.
Если нужно только следить за каким-либо логом в режиме реального времени, то для этого подойдет команда tail -f. Если параметр -f не указывать, то команда tail просто покажет последние 10 строк лога.
В общем стандартные утилиты это хорошо, и знать про них нужно. Вот только, как и практически всё стандартное, они не дают того удобства которое можно получить используя утилиты специализированные.
Одна из лучших утилит для просмотра логов это Log File Navigator или lnav. Установить её можно командой:
либо, если ты используешь дистрибутив, в репозиториях которого её нет, то вот ссылка на неё:
Основные фишки lnav это удобная подсветка, возможность чтения любых форматов логов, в том числе архивированных, возможность объединения нескольких файлов в единый отчет, удобный поиск и фильтрация, ну и всякое другое, по мелочи. Короче если часто лопатишь логи, штука мастхэвная.
Как пользоваться? Тут все просто. Если запустить программу без параметров:
то нам покажет журнал syslog. Если нужно посмотреть какой-то другой лог, то после lnav нужно указать какой именно, а если нужно увидеть несколько логов то просто их перечисляем, например:
Естественно есть возможность поиска нужны строк. Для этого жмём кнопку ? и вводим слово для поиска, одновременно с этим видим подсказку по синтаксису поиска.
Ротация логов
Вроде как разобрались с lnav и неспеша переходим дальше. А дальше у нас такая штука как ротация логов. Учитывая что логи пишутся постоянно и по любому поводу, то если бы этот процес был неконтролируемым, через некоторое время файлы логов стали бы огромными, занимали бы кучу места и работать с ними стало бы просто нереально. Естественно этот процес контролируемый и отвечает за него утилита logrotate. Она плодит файлы с названием лога и цифрой через точку, либо такие же архивы. Туда сохраняются старые записи, чтобы к ним можно было вернуться через время. Естественно работу этой утилиты можно и нужно настраивать. Под свои потребности, так сказать.
Основной конфиг утилиты лежит в файле /etc/logrotate.conf. Но правильнее будет настраивать используя конфиги в папке: /etc/logrotate.d/. Здесь под каждый лог лежит отдельный конфиг. В котором, после названия самого лога перечисляются параметры его ведения.
Теперь понимая, какой параметр за что отвечает, можно каждому логу задать индивидуальные параметра ведения. И если для домашнего использования это вряд ли необходимо, подойдут и стандартные параметры, то для, какого-нибудь сервера, пожалуй обязательная история.
Логи Linux. journald
Для начала мы можем посмотреть все запуски системы:
Можно также получить логи касающиеся только конкретной службы. Например давай увидим все что касается только службы Network Manager:
Если нужно следить за логами в режиме реального времени, то используется параметр -f.
Также, параметры запуска этой утилиты можно комбинировать, для получения более конкретного результата:
Если нужно увидеть только несколько последних записей, то их количество можно задать параметром -n:
Ну и раз уж, уже вспомнили про systemd в целом, то наверное надо сказать и про systemd-analyze. Это такая штука которая собирает статистику загрузки системы.
Если ввести в терминале просто:
без каких-либо параметров, то мы увидим общее время загрузки системы. А если добавить параметр blame, то увидим сколько времени загружалась каждая служба, самые медленные процессы будут сверху.
Эта штука может быть полезна для выявления процессов затормаживающих загрузку и оптимизации старта системы на слабых компьютерах.
Мы можем использовать их для просмотра логов, фильтруя информацию по конкретному приоритету.
Или в случае с journalctl:
Ну, а на этом наше знакомство с логами можно считать оконченным. Мы конечно рассмотрели здесь только самые важные моменты, но на то оно и знакомство, что бы узнать азы, а глубже уже изучать самостоятельно. Если в этом есть необходимость, конечно. Потому что, описанного в этой статье, как по мне, вполне достаточно обычному пользователю, чтобы комфортно чувствовать себя при работе с логами. Ну и свой баф к линуксоидности ты сегодня получил. Потому не забывай возвращаться к нам, ведь есть ещё много тем которые стоит изучить.
Читайте также: