Работа с логами в Linux
Практически любое ПО или служба в Linux ведут или могут вести логи. Лог-файлы, это журналы куда в процессе работы ПО или службы вносится служебная информация:
- Запросы и ответы, коды состояния
- Выполнение операций, последовательность событий
- Исключения (механизмы, обрабатывающие нетипичные ситуации и не прекращающие работу)
- Трассировку стека (список методов, которые были вызваны до момента, когда в приложении произошло исключение)
- Сообщения об ошибках или недостаточных данных
- Выполнение определенных операций, использование ресурсов (например, процессора, памяти)
Дополнительно для удобства обработки логи делятся на подтипы:
- Логи ядра - содержат информацию о работе самого ядра Linux. Эти логи полезны для диагностики проблем, связанных с ядром, таких как паники и ошибки. Логи ядра обычно находятся в
/var/log/kern.log
- Системные логи - эти логи содержат информацию о работе операционной системы. Важные события, такие как загрузка системы, ошибки ядра и управление аппаратным оборудованием, записываются в системных логах. Обычно они находятся в
/var/log/syslog
или/var/log/messages
- Серверные логи - отвечающие за процесс обращения к серверу
- Почтовые логи - работающие с отправлениями
- Логи баз данных - которые отражают процессы обращения к базам данных
- Авторизационные и аутентификационные логи - эти логи отслеживают попытки входа в систему. Ошибки аутентификации и информация о входящих пользовательских сессиях записываются в эти логи. Примером является
/var/log/auth.log
- Логи приложений - создаются приложениями и сервисами, установленными в системе. Они могут содержать информацию о работе приложений, сообщения об ошибках и другую отладочную информацию. Местоположение логов приложений может различаться в зависимости от конкретного приложения
- Логи аудита - используются для аудита безопасности системы. Они записывают информацию о действиях пользователей и изменениях в системе. Примером является
/var/log/audit/audit.log
- Логи X-системы - если вы используете графическую среду на Linux, то логи X-системы содержат информацию о работе X-сервера, который управляет графическим интерфейсом. Обычно они находятся в
/var/log/Xorg.0.log
Где хранятся логи
Как правило, в Linux логи хранятся в специальном каталоге /var/log
, внутри которого создаются отдельные файлы и папки для того или иного сервиса.
/var/log/messages
содержит глобальные системные логи Linux, в том числе те, которые регистрируются при запуске системы. В этот лог записываются несколько типов сообщений: это почта, cron, различные сервисы, ядро, аутентификация и другие/var/log/dmesg
содержит сообщения, полученные от ядра. Регистрирует много сообщений еще на этапе загрузки, в них отображается информация об аппаратных устройствах, которые инициализируются в процессе загрузки. Можно сказать это еще один лог системы Linux. Количество сообщений в логе ограничено, и когда файл будет переполнен, с каждым новым сообщением старые будут перезаписаны. Вы также можете посмотреть сообщения из этого лога с помощью команды dmseg/var/log/auth.log
содержит информацию об авторизации пользователей в системе, включая пользовательские логины и механизмы аутентификации, которые были использованы/var/log/boot.log
содержит информацию, которая регистрируется при загрузке системы/var/log/daemon.log
включает сообщения от различных фоновых демонов/var/log/kern.log
тоже содержит сообщения от ядра, полезны при устранении ошибок пользовательских модулей, встроенных в ядро/var/log/lastlog
отображает информацию о последней сессии всех пользователей. Это нетекстовый файл, для его просмотра необходимо использовать команду lastlog/var/log/maillog /var/log/mail.log
журналы сервера электронной почты, запущенного в системе/var/log/user.log
информация из всех журналов на уровне пользователей/var/log/Xorg.x.log
лог сообщений Х сервера/var/log/alternatives.log
информация о работе программы update-alternatives. Это символические ссылки на команды или библиотеки по умолчанию/var/log/btmp
лог файл Linux содержит информацию о неудачных попытках входа. Для просмотра файла удобно использовать команду last -f /var/log/btmp/var/log/cups
все сообщения, связанные с печатью и принтерами/var/log/anaconda.log
все сообщения, зарегистрированные при установке сохраняются в этом файле/var/log/yum.log
регистрирует всю информацию об установке пакетов с помощью Yum/var/log/cron
всякий раз когда демон Cron запускает выполнения программы, он записывает отчет и сообщения самой программы в этом файле/var/log/secure
содержит информацию, относящуюся к аутентификации и авторизации. Например, SSHd регистрирует здесь все, в том числе неудачные попытки входа в систему/var/log/wtmp или /var/log/utmp
системные логи Linux, содержат журнал входов пользователей в систему. С помощью команды wtmp вы можете узнать кто и когда вошел в систему/var/log/faillog
лог системы linux, содержит неудачные попытки входа в систему. Используйте команду faillog, чтобы отобразить содержимое этого файла/var/log/mysqld.log
файлы логов Linux от сервера баз данных MySQL/var/log/httpd/ или /var/log/apache2
лог файлы linux11 веб-сервера Apache. Логи доступа находятся в файле access_log, а ошибок в error_log/var/log/lighttpd/
логи linux веб-сервера lighttpd/var/log/conman/
файлы логов клиента ConMan,/var/log/mail/
в этом каталоге содержатся дополнительные логи почтового сервера/var/log/prelink/
программа Prelink связывает библиотеки и исполняемые файлы, чтобы ускорить процесс их загрузки. /var/log/prelink/prelink.log содержит информацию о .so файлах, которые были изменены программой/var/log/audit/
содержит информацию, созданную демоном аудита auditd/var/log/setroubleshoot/
SE Linux использует демон setroubleshootd (SE Trouble Shoot Daemon) для уведомления о проблемах с безопасностью. В этом журнале находятся сообщения этой программы/var/log/samba/
содержит информацию и журналы файлового сервера Samba, который используется для подключения к общим папкам Windows/var/log/sa/
содержит .cap файлы, собранные пакетом Sysstat/var/log/sssd/
используется системным демоном безопасности, который управляет удаленным доступом к каталогам и механизмами аутентификации
Стоит учитывать, для служб и ПО не запрещено задавать специальные каталоги для хранения логов. Например, для виртуальных хостов сайтов, панель ispmanager задает специальный каталог /var/www/htttpd-logs
для удобного анализа логов по каждому сайту отдельно. Стороннее ПО, устанавливаемое в директорию /opt
, чаще всего будет вести логи также внутри этого каталога.
Несмотря на общую похожую структуру, наименования отдельных файлов и каталогов могут отличаться в зависимости от определенной версии Linux, операционные системы принято разделять на два вида:
Debian-based
сюда относятся: Debian, UbuntuRedHat-based
сюда относятся: Centos, Rocky Linux, AlmaLinux
Системные логи
Системные логи можно разделить на две части.
Системный журнал записывается в файлы:
Debian-based/var/log/syslog
RedHat-based/var/log/messages
В этих логах находится много различной информации о событиях, процессах и ошибках практически от всех системных служб сервера и сообщения от ядра Linux.
К системному логу можно отнести журнал с сообщениями ядра и драйверов всех устройств сервера:
Debian-based/var/log/dmesg
RedHat-based/var/log/kern.log
Системные логи ведутся с момента старта системы, поэтому часто после ее аварийной перезагрузки сложно узнать, что было виной, так как этого события уже нет в логе.
Лог авторизации
Сюда вносится информация о входах в систему, в том числе и о неудачных попытках, полезно для отслеживания попыток подбора пароля к системе и выяснения, кто был на сервере.
Debian-based/var/log/auth.log
RedHat-based/var/log/secure
Лог загрузки ОС
/var/log/boot.log
Лог планировщика (CRON) системы
/var/log/cron
Логи веб-сервера
В стандартных конфигурациях сайты осуществляют свою работу посредством таких веб-серверов, как Apache или Nginx. Они могут быть установлены как поодиночке, так и в связке, где Nginx будет отвечать за фронтенд, а Apache за бэкенд.
У Apache и Nginx есть свои логи, как правило, двух категорий:
- хранит журнал посещений
- хранит информацию об ошибках, уведомлениях, примечаниях, предупреждениях
Apache
Apache создает два лог-файла:
- Лог посещений или доступа
access.log/access_log
- Лог ошибок
error.log/error_log
Конфигурация Apache позволяет задать хранение этих файлов отдельно для каждого сайта, размещенного на сервере, стандартная реализация:
Debian-based/var/log/apache2
RedHat-based/var/log/httpd
Nginx
Nginx создает как и Apache два файла, хранящих журнал посещений и журнал ошибок. Файлы находятся в каталоге:
/var/log/nginx
В случае конфигурации веб-сервера как связки Nginx с Apache, журналы Nginx иногда пишутся в одном файле с логами Apache, с одной стороны, это может быть удобно, но в некоторых случаях для обнаружения ошибок это может создать трудности. Также как и в Apache, Nginx может быть настроен для ведения логов каждого сайта отдельно.
PHP-интерпретатора
Стандартно PHP-интерпретатор входит в конфигурацию Apache как модуль PHP. В таком случае все ошибки PHP хранятся там же, где основной лог Apache. Если интерпретатор PHP работает в виде службы PHP-FPM, для связки веб-сервера Nginx+PHP-fpm, логи хранятся отдельно, в каталоге:
/var/log/php-fpm
В PHP, через конфигурационный файл php.ini, возможно настроить запись ошибок в определенный лог-файл, либо задать запись ошибок на определенной странице в отдельный файл, это уже осуществляется через файл .htaccess в соответствующем каталоге сайта. Чаще всего для таких случаев задают имя файла php_error.log или просто error.log, располагаться они могут как в каталоге сайта, так и любом другом каталоге пользователя, проверить лучше непосредственно в конфигурации PHP и веб-сервера.
Логи почтовой службы
На серверах довольно часто, присутствует почтовая служба для отправки и приема писем все с тех же сайтов или отдельно через электронные почтовые ящики. Наиболее популярной конфигурацией почты сейчас является связка, Exim отправка и прием писем по протоколу SMTP и Dovecot с сортировщиком sieve, для доступа пользователей к почтовым ящикам по протоколу IMAP/POP3.
Логи Exim находятся в каталоге /var/log/exim
, чаще всего интересует файл main.log
, в нем хранятся все события почтовой службы, еще есть panic.log
там находятся сообщения об ошибках.
У Dovecot, логи как правило, пишутся в файл /var/log/maillog
или /var/log/mail.log
, в него заносится информация о доставке, приеме и сортировке писем.
Логи FTP
В качестве FTP-службы в Linux есть несколько вариантов ПО, но в целом методика ведения логов у каждого ПО примерно схожая.
В папке /var/log
создаются журналы FTP-сервера, в случае использования vsFTPd это будет файл vsftpd.log
, в случае proFTPd это будет файл proftpd.log
.
В случае PURE-FTPd поищите файл /var/log/pureftpd.log
.
Если лога FTP вы не обнаружите, скорее всего, он все равно ведется, но уже в системных логах
Debian-based/var/log/syslog
RedHat-based/var/log/messages
Логи сервера базы данных
MySQL
В стандартной настройке он ведет лог в файле mysqld.log
или mysql.log
. Файл располагается в папке /var/log/mysql
или /var/log/mariadb
, в зависимости от используемой версии MySQL. Чаще всего в этот файл задается ведение general log
, он же лог запросов, но так как этот лог очень быстро заполняется и начинает занимать много места на диске, то без особой необходимости его ведение не включают, а в лог если что и пишется, то ошибки и
уведомления.
Ошибки и уведомления заносятся, как правило, в файл error.log
или mysql_error.log
.
Сервер MySQL может создавать в папке /var/log/mysql
, файл отладки медленных запросов к базе данных. Обычно он называется mysql_slow.log
.
Иногда, в случае если настроена репликация баз данных, включают и ведение бинарных логов, они заносятся в файл mysql-bin.log
. Этот лог, помимо большого своего объема на диске, также может снизить производительность сервера баз данных, поэтому также без особой необходимости включать его ведение не стоит.
PostgreSQL
Ведение логов задается в разных случаях в совершенно разные директории. Стоит посмотреть значение переменной log_filename
в конфигурационном файле PostgreSQL, если этот параметр не задан, но при этом параметр logging_collector
в статусе on
, то лог ведется по следующему пути:
Debian-based/var/log/postgresql/postgresql-x.x.main.log
RedHat-based/var/lib/pgsql/data/pg_log