Веб-серверы Apache могут генерировать много логов.
Эти логи содержат различную информацию, такую как HTTP-запросы, которые Apache обработал и ответил, и другие действия, специфичные для Apache.
Анализ журналов является важной частью администрирования Apache и обеспечения его правильной работы.
В этом руководстве мы рассмотрим различные параметры ведения журналов, представленные в Apache, и способы их интерпретации.
Вы узнаете, как анализировать логи, которые создает Apache, и как настроить параметры ведения журналов, чтобы предоставить вам наиболее релевантные данные о том, что делает Apache.
В этом руководстве вы узнаете как:
- Настроить и понять ведение журналов веб-сервера Apache
- Каковы уровни журнала Apache
- Как интерпретировать форматирование логов Apache и их значение
- Каковы наиболее распространенные файлы конфигурации логгирования Apache
- Как расширить конфигурацию логгирования, чтобы включить форензику
Логи Apache и их расположение
Apache создает два разных файла журнала:
- access.log хранит информацию обо всех входящих запросах на подключение к Apache. Каждый раз, когда пользователь посещает ваш сайт, это будет зарегистрирован здесь. Каждая страница, которую запрашивает пользователь, также будет зарегистрирована как отдельная запись.
- error.log хранит информацию об ошибках, с которыми Apache сталкивается на протяжении всей своей работы. В идеале этот файл должен оставаться относительно пустым.
Расположение файлов журналов может зависеть от того, какую версию Apache вы используете и какой дистрибутив Linux вы используете.
Apache также может быть настроен для хранения этих файлов в другом месте, отличном от заданного по умолчанию.
Но по умолчанию вы сможете найти журналы доступа и ошибок в одном из следующих каталогов:
- /var/log/apache/
- /var/log/apache2/
- /etc/httpd/logs/
Форматирование логов Apache
Apache позволяет вам настраивать, какая информация регистрируется и как представляется каждая запись в журнале, что мы рассмотрим позже в этом руководстве.
Обычный формат, которым следует Apache для представления записей журнала:
"%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\""
- %h –IP-адрес клиента.
- %l –Это «идентификатор» на клиенте, который используется для идентификации. Это поле обычно пустое и представляется как дефис.
- %u – Идентификатор пользователя клиента, если использовалась HTTP-аутентификация. Если нет, в записи журнала ничего для этого поля не будет отображаться.
- %t –Отметка времени записи в журнале.
- \%r\ –Строка запроса от клиента. Этот параметр покажет, какой метод HTTP был использован (например, GET или POST), какой файл был запрошен и какой протокол HTTP был использован.
- %>s –Код состояния, который был возвращен клиенту. Коды 4xx (например, 404, страница не найдена) указывают на ошибки клиента, а коды 5xx (например, 500, внутренняя ошибка сервера) указывают на ошибки сервера. Другие числа должны указывать успешную работу (например, 200, ОК) или что-то еще, например, перенаправление (например, 301).
- %O –Размер файла (включая заголовки) в байтах, который был запрошен.
- \”%{Referer}i\”– Ссылка на ссылку. Параметр говорит о том, как пользователь перешел на вашу страницу (по внутренней или внешней ссылке).
- \”%{User-Agent}i\” – Содержит информацию о подключающемся веб-браузере клиента и операционной системе.
10.10.220.3 - - [17/Dec/2019:23:05:32 -0500] "GET /products/index.php HTTP/1.1" 200 5015 "http://example.com/products/index.php" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"
[Mon Dec 16 06:29:16.613789 2019] [php7:error] [pid 2095] [client 10.10.244.61:24145] script '/var/www/html/settings.php' not found or unable to stat
Настройка логов Apache
Ведение логов в Apache очень настраиваемо и может быть изменено с помощью пары файлов конфигурации.
В Ubuntu и Debian основной файл конфигурации для ведения журнала Apache находится здесь:
- /etc/apache2/apache2.conf
- /etc/apache2/sites-available/000-default.conf
- /etc/httpd/conf/httpd.conf
- /etc/httpd/conf.d/ (поместите дополнительные конфигурации VirtualHost в этот каталог)
Директивы логов
Существует несколько различных директив, которые можно настроить внутри этих файлов, но это основные из них, о которых вам следует позаботиться, если вы хотите настроить логи Apache:
- CustomLog – определяет, где хранится файл журнала доступа.
- ErrorLog – определяет, где хранится файл журнала ошибок.
- LogLevel – Определяет, насколько серьезным должно быть событие, чтобы его можно было зарегистрировать (подробнее см. Ниже).
- LogFormat – Определяет, как должна быть отформатирована каждая запись в журнале доступа (подробнее см. Ниже).
LogLevel по умолчанию настроен на warn, что означает, что он будет записывать в журнал error.log предупреждения или более серьезные события.
Если ваш журнал ошибок заполняется множеством безобидных предупреждающих сообщений, вы можете увеличить его до error
, и система будет сообщать только об ошибках или более серьезных проблемах.
Другие варианты включают (в порядке серьезности)crit
, alert
, и emerg
.
Apache рекомендует использовать уровень как минимум crit.
В целях отладки вы можете временно настроить LogLevel на debug, но имейте в виду, что вы можете получить громоздкое количество записей в журнале ошибок (error.log).
Модули логов Apache
Настройка логов, которую мы пока показываем в этом руководстве, относится к модулю Apache mod_log_config.
Чтобы расширить функциональность логов, вы можете загрузить другие модули Apache.
Они могут предоставить вам некоторые дополнительные возможности, которые недоступны с настройками по умолчанию.
mod_log_forensic начинает запись перед запросом (когда заголовки получены впервые) и снова регистрируется после запроса.
Это означает, что для каждого запроса создаются две записи журнала, что позволяет администратору более точно измерять время ответа.
Определите местоположение вашего журнала форензики с помощью директивы CustomLog.
Например:
CustomLog ${APACHE_LOG_DIR}/forensic.log forensic
mod_logio записывает количество байтов, отправленных и полученных от каждого запроса.
Он предоставляет очень точную информацию, поскольку он также учитывает данные, присутствующие в заголовке и теле каждого запроса, а также дополнительные данные, которые требуются для зашифрованных соединений SSL / TLS.
Добавьте %I
и O%
% к директиве LogFormat, чтобы использовать дополнительные данные, предоставленные этим модулем.
Так же есть и другие модули; это лишь два из самых полезных.
Заключение
В этой статье мы увидели, как анализировать и интерпретировать acces.log и error.log Apache.
Мы также узнали, как настроить ведение журнала в файлах конфигурации Apache, чтобы сделать данные журнала более актуальными.
Вооружившись этими знаниями, вы сможете быстрее выявлять проблемы и решать их.
Помните, что функциональность логов в Apache может быть расширена с помощью других модулей, хотя это необходимо только в крайних случаях, которые требуют расширенной отладки.