Apache — это кроссплатформенный HTTP-сервер с открытым исходным кодом. Он имеет множество мощных функций, которые могут быть расширены с помощью широкого спектра модулей. При управлении веб-серверами Apache одной из самых частых задач, которую вы выполняете, является проверка файлов журнала.
Знание того, как настраивать и читать журналы, очень полезно при устранении неполадок сервера или приложений, поскольку они предоставляют подробную информацию об отладке.
Apache записывает записи своих событий в два типа журналов: журналы доступа и журналы ошибок. Журналы доступа содержат информацию о клиентских запросах, а журналы ошибок — информацию о проблемах сервера и приложения.
В этой статье описывается, как настроить доступ и прочитать журналы ошибок к Apache.
Веб-сервер Apache генерирует новое событие в журнале доступа для всех обработанных запросов. Каждая запись события содержит метку времени и включает в себя различную информацию о клиенте и запрошенном ресурсе. Журналы доступа показывают местоположение посетителей, страницу, которую они посещают, сколько времени они проводят на странице и многое другое.
Директива CustomLog определяет местоположение файла журнала и формат сообщений журнала.
Основной синтаксис директивы CustomLog следующий:
CustomLog log_file format [condition];
log_file может быть по отношению к ServerRoot или полный путь к файлу журнала. Сообщения журнала также могут передаваться в другую программу с использованием символа канала |.
Второй аргумент format указывает формат сообщений журнала. Это может быть либо явное определение формата, либо псевдоним, определенный директивой LogFormat.
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined CustomLog logs/access.log combined
CustomLog logs/access.log "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\""
Чтобы не повторять один и тот же код несколько раз, предпочитайте определять директиву LogFormat и использовать ее в качестве псевдонима в директиве CustomLog.
Полный список всех форматных строк и модификаторов смотрите в документации к модулю «mod_log_config».
Третий аргумент [condition] является необязательным и позволяет писать сообщения журнала только при соблюдении определенного условия. Обычно это делается с помощью переменных среды. Условие можно отменить с помощью символа !.
Например, если вы хотите исключить запросы к файлам css для записи в файл журнала, вы должны использовать следующее:
SetEnvIf Request_URI \.css$ css-file CustomLog logs/access.log custom env=!css-file
Чтобы изменить формат ведения журнала, вы можете либо определить новую директиву LogFormat, либо переопределить формат по умолчанию. Обычно лучше определить новый формат.
Хотя журнал доступа предоставляет очень полезную информацию, он занимает место на диске и может повлиять на производительность сервера. Если на вашем сервере недостаточно ресурсов и у вас загруженный веб-сайт, вы можете отключить журнал доступа.
Для этого просто закомментируйте или удалите директиву CustomLog из разделов конфигурации основного сервера и виртуального сервера.
Если вы хотите отключить журнал доступа только для одного виртуального хоста, установите первый аргумент директивы CustomLog /dev/null:
CustomLog /dev/null combined
Apache записывает сообщения об ошибках приложения и общих ошибках сервера в файл журнала ошибок. Если вы столкнулись с ошибками в вашем веб-приложении, журнал ошибок — это первое место, с которого можно начать устранение неполадок.
Директива ErrorLog определяет имя местоположение журнала ошибок. Он принимает следующую форму:
ErrorLog log_file
Если путь к log_file не является абсолютным, он устанавливается относительно ServerRoot. Сообщения об ошибках также могут передаваться в другую программу с использованием символа канала |.
Параметр LogLevel устанавливает уровень протоколирования. Ниже перечислены уровни их серьезности (от низкого до высокого):
Каждый уровень журнала включает в себя более высокие уровни. Например, если вы установите уровень журнала warn, Apache также пишет там сообщения error, crit, alert и emerg.
Если параметр LogLevel не указан, по умолчанию используется значение warn. Рекомендуется установить уровень как минимум crit.
Директива ErrorLogFormat определяет формат журнала ошибок. В большинстве дистрибутивов Linux сервер Apache использует формат по умолчанию, который является достаточным для большинства случаев.
Поведение журналирования и расположение файлов можно задавать как глобально, так и для каждого виртуального хоста.
Затем директивы CustomLog или ErrorLog устанавливаются в контексте основного сервера, сервер записывает все сообщения журнала в один и тот же файл журнала доступа и журнала ошибок. В противном случае, если директивы находятся внутри блока <VirtualHost>, в указанный файл записываются только сообщения журнала для этого виртуального хоста.
Директива log, установленная в блоке <VirtualHost>, переопределяет директиву, заданную в контексте сервера.
Виртуальные хосты без директив CustomLog или ErrorLog получат свои сообщения журнала, записанные в журналы глобального сервера.
Для лучшей читаемости рекомендуется установить отдельные файлы журналов доступа и ошибок для каждого виртуального хоста. Вот пример:
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com ServerAdmin webmaster@example.com DocumentRoot /var/www/example.com/public LogLevel warn ErrorLog /var/www/example.com/logs/error.log CustomLog /var/www/example.com/logs/access.log combined </VirtualHost>
Всякий раз, когда вы изменяете файл конфигурации, вы должны перезапустить службу Apache, чтобы изменения вступили в силу.
По умолчанию в дистрибутивах на основе Debian, таких как Ubuntu, журналы доступа и ошибок расположены в каталоге /var/log/apache2. На CentOS файлы журналов помещаются в каталог /var/log/httpd.
Файлы журнала можно открыть и проанализировать с помощью стандартных команд, таких как cat, less, grep, cut, awk, и так далее.
Вот пример записи из файла журнала доступа, который использует формат combine журнала в Debian :
192.168.33.1 - - [08/Jan/2020:21:39:03 +0000] "GET / HTTP/1.1" 200 6169 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
Давайте разберемся, что означает каждое поле записи:
Используйте команду tail для просмотра файла журнала в режиме реального времени:
tail -f access.log
Файлы журнала предоставляют вам полезную информацию о проблемах сервера и о том, как посетители взаимодействуют с вашим сайтом.
Apache имеет очень настраиваемую систему ведения журналов, которая позволяет вам настраивать доступ и журналы ошибок в соответствии с вашими потребностями.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.