Логи (log-файлы, журналы) — это текстовые файлы, куда автоматически записываются все события, которые происходили в компьютерной системе. Их основная цель — помочь определить, почему на сайте или в программе возникает ошибка, а также найти того, кто совершил какое-то действие.
Подробнее о том, как найти логи в Linux и как их обрабатывать — рассказываем в статье.
Содержание
Виды логов
Разные программы на сервере как правило генерируют собственные лог-файлы. Вот наиболее основные из них:
- главный системный лог — общая информация о системе, начиная с момента её запуска (данные о действиях с ядром Linux, обнаруженных устройствах, сетевых интерфейсах, работе различных служб вроде FTP-сервера или DNS-сервера, и ещё много о чём другом).
- лог загрузки системы — сообщения от ядра. Сюда записываются данные об устройствах, которые загружаются вместе с системой. С помощью этого лога можно выполнить отладку системы, если она не загружается.
- журнал авторизации пользователей — информация об авторизации пользователей. Здесь вы найдёте записи об успешных и неуспешных попытках входа в систему, логины пользователей, используемые механизмы аутентификации.
- логи веб-сервера — журнал запросов к веб-серверу, информация об ошибках. Эта информация поможет найти битые ссылки и причины ошибок на сайте, а также покажет, кто слишком сильно нагружает сервер или пытается его взломать.
- лог почтового сервера — записи обо всех отправленных и доставленных сообщениях, ошибки почтового сервера, причины отклонения писем.
- логи базы данных — запросы к базам данных, ошибки сервера.
- логи планировщика Cron — протокол выполненных задач, сообщения от самих команд, ошибки при запуске крона.
Это далеко не все логи, а только те, которые по нашему опыту используют чаще всего. В зависимости от того, какое программное обеспечение установлено у вас на сервере, у вас могут быть и другие лог-файлы.
Как найти логи
Доступ к логам будет отличаться в зависимости от того, какой у вас хостинг: простой виртуальный хостинг, либо же VPS/выделенный сервер. Рассмотрим отдельно, как посмотреть логи сайта в каждой из этих ситуаций.
На VPS или выделенном сервере
В этом случае у вас будет полный доступ к логам сервера. По умолчанию большинство логов Linux хранится в папке /var/log/, но некоторые программы могут переопределять этот путь и сохранять свои логи в других местах. А также стандартный путь к логам можно изменить вручную в конфигурационных файлах нужной программы.
Чтобы вывести полный список лог файлов в папке /var/log/ на вашем сервере, используйте команду ls:
ls -l /var/log/
Вот как называются основные логи, которые вы найдёте в этой папке:
- /var/log/syslog или /var/log/messages — главный системный лог Linux.
- /var/log/auth.log или /var/log/secure — журнал авторизации пользователей.
- /var/log/maillog/ или /var/log/mail.log — логи почтового сервера.
- /var/log/httpd/ или /var/log/apache2/ — логи веб-сервера Apache. Журнал доступа находится в файле access.log, а логи ошибок в файле error.log.
- /var/log/nginx/ — логи веб-сервера Nginx.
- /var/log/dmesg — лог загрузки системы.
- /var/log/mysql/ — логи базы данных MySQL.
- /var/log/cron — логи планировщика Cron.
Чтобы посмотреть логи в Linux, скорее всего, вам понадобится root доступ к серверу. Дальше можно использовать такие стандартные команды:
- tail — вывести последние 10 строк;
- head — вывести первые 10 строк;
- cat — вывести весь лог-файл;
- grep — вывести в лог-файле все вхождения указанного слова или регулярного выражения.
Также есть вариант — установить утилиту lnav. Её удобство в том, что она поддерживает подсветку синтаксиса. Возможно, с её помощью работать с логами будет удобнее.
На виртуальном хостинге
В этом случае доступ к логам сервера будет ограничен. Вы сможете посмотреть только то, что настроит для вас провайдер хостинга. Обычно это логи ошибок веб-сервера и посещений сайта, а также логи PHP.
Вот как найти логи в панели управления cPanel, которую предоставляем у себя на виртуальном хостинге мы и некоторые другие провайдеры.
На главной странице cPanel найдите раздел «Метрики». В нём есть несколько приложений, где хранятся логи: «Посетители» и «Необработанный журнал доступа».
В приложении «Ошибки» вы найдёте логи ошибок веб-сервера за последние два дня. Информация здесь подаётся в необработанном виде и сразу по всем доменам из вашего аккаунта. Всего здесь может быть до 300 записей.
В приложении «Необработанный журнал доступа» можно скачать текстовые файлы с логами доступа к сайту. Отдельно будут логи за последние сутки, а чуть ниже — архивы с логами за прошлые месяцы.
Просмотреть логи после скачивания можно при помощи любого текстового редактора.
Также в корневой папке вашего сайта в файле error_log будут логи с ошибками PHP. По умолчанию для основного домена эта папка называется public_html, а для дополнительного — также как и сам домен.
Как обрабатывать логи
Самый трудный момент при работе с логами — понять хоть что-то, что в них написано. Чтобы хоть немного помочь разобраться с этим моментом, вот расшифровка лог файлов на примере нескольких записей из основных логов.
Access.log
66.249.66.45 - - [25/Apr/2023:18:33:00 +0300] "GET /robots.txt HTTP/1.1" 404 24406 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
66.249.66.45 — IP-адрес посетителя.
“- -“ — два идентификатора посетителя. Первый идентификатор это identd. Второй это юзернейм посетителя, если он использовал HTTP-аутентификацию. В нашем примере оба идентификатора неизвестны, поэтому в логах стоят два прочерка.
[25/Apr/2023:18:33:00 +0300] — дата и время запроса.
“GET /robots.txt HTTP/1.1” — тип запроса, путь к запрашиваемому файлу и версия протокола HTTP.
404 — код состояния HTTP, которым сервер ответил на запрос.
24406 — размер файла в байтах без учёта заголовков ответа.
“-“ — страница, с которой совершили запрос. Прочерк в нашем примере означает, что посетитель обратился к URL напрямую.
“Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)” — данные о посетителе, который совершил запрос.
Error.log
2023-04-26 09:34:07.513128 [INFO] [25473] [T0] [65.108.46.177:48252#APVH_vashdomen.com] File not found [/home/username/public_html/wp-content/themes]
2023-04-26 09:34:07.513128 — дата и время, когда была сделана запись в логах.
[65.108.46.177:48252#APVH_vashdomen.com] — IP-адрес клиента, который совершил запрос, а также имя виртуального хоста, к которому он обращался.
File not found [/home/username/public_html/wp-content/themes] — текст ошибки и путь к файлу или папке, который её вызвал.
PHP error_log
[20-Apr-2023 17:16:29 UTC] PHP Fatal error: require(): Failed opening required '/home/username/public_html/wp-includes/class-wp-session-tokens.php' in /home/username/public_html/wp-settings.php on line 189
[20-Apr-2023 17:16:29 UTC] — дата и время возникновения ошибки.
PHP Fatal error: require(): Failed opening required ‘/home/username/public_html/wp-includes/class-wp-session-tokens.php’ — текст ошибки. Конкретно в этом примере ошибка в том, что PHP-обработчик не смог открыть файл class-wp-session-tokens.php, потому что файл либо отсутствует по указанному пути, либо к нему нет доступа.
in /home/username/public_html/wp-settings.php on line 189 — путь к файлу, в котором возникла проблема, с указанием проблемной строки.
Что дальше
После того как вы нашли нужные логи сервера и выяснили, в чём была причина ошибки, остаётся только исправить её. У нас есть отдельные статьи для ошибок, которые чаще всего возникают на хостинге:
- Ошибка 403 Forbidden
- Ошибка 500 Internal Server Error
- Ошибка 503 Service Unavailable
- Ошибка 504 Gateway Time-out
Если же проблема в том, что кто-то пытается взломать сайт или слишком сильно нагружает сервер тяжёлыми запросами, вам может понадобиться заблокировать этого пользователя. Это можно сделать в файле .htaccess.
Как заблокировать доступ к сайту в .htaccess
А какими полезными инструментами для работы с логами пользуетесь вы? Расскажите в комментариях.