Введение
Apache — это кроссплатформенный HTTP-сервер с открытым исходным кодом. Он имеет множество мощных функций, которые могут быть расширены с помощью самых разных модулей. При управлении веб-серверами Apache одной из наиболее часто выполняемых задач является проверка файлов журналов.
Знание того, как настраивать и читать журналы, очень полезно при устранении неполадок сервера или приложения, поскольку они предоставляют подробную информацию об отладке.
Apache записывает свои записи событий в журналы двух типов: журнал доступа и журнал ошибок. Журналы доступа включают информацию о клиентских запросах и информацию журнала ошибок о проблемах сервера и приложений.
В этой статье описывается, как настраивать и читать журналы ошибок и доступа Apache.
Если вы хотите включить файлы журнала ошибок Apache и журнала доступа на удаленном сервере, продолжайте чтение, в противном случае пропустите первый абзац «Подключение к серверу» и прочитайте следующий.
Подключение к серверу
Чтобы получить доступ к серверу, вам нужно знать IP-адрес. Вам также потребуется ваше имя пользователя и пароль для аутентификации. Чтобы подключиться к серверу как root, введите следующую команду:
ssh root@IP_DEL_SERVER
Далее вам нужно будет ввести пароль пользователя root.
Если вы не используете пользователя root, вы можете войти под другим именем пользователя с помощью той же команды, а затем изменить root на свое имя пользователя:
ssh nome_utente@IP_DEL_SERVER
Затем вам будет предложено ввести пароль пользователя.
Стандартный порт для подключения по ssh — 22, если ваш сервер использует другой порт, вам нужно будет указать его с помощью параметра -p, затем введите следующую команду:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Настроить журналы доступа
Веб-сервер 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
задает уровень ведения журнала. Уровни, перечисленные по серьезности (от самого низкого до самого высокого), перечислены ниже:
trace1
-trace8
- Трассировка сообщений.debug
- сообщения отладки.info
- Информационные сообщения.notice
- уведомления.warn
- Предупреждения.error
- Ошибки при обработке запроса.crit
- Критические проблемы. Требует быстрых действий.alert
- Оповещения. Действия должны быть приняты немедленно.emerg
- Чрезвычайная ситуация. Система находится в непригодном для использования состоянии.
Каждый уровень журнала включает самые высокие уровни. Например, если вы установите уровень журнала warn
, Apache также будет записывать сообщения error
, crit
событиях, alert
и emerg
.
Если параметр LogLevel
не указан, по умолчанию используется значение warn
. Рекомендуется установить хотя бы crit
уровень.
Директива ErrorLogFormat
указывает формат файла журнала ошибок Apache. В большинстве дистрибутивов Linux сервер Apache использует формат по умолчанию, которого достаточно в большинстве случаев.
Виртуальные хосты и глобальный журнал
Поведение ведения журнала и расположение файла можно задать глобально или для каждого виртуального хоста.
Затем устанавливаются директивы CustomLog
или ErrorLog
в контексте основного сервера, сервер записывает все сообщения журнала в одни и те же файлы журнала доступа и ошибок. В противном случае, если директивы помещены в блок <VirtualHost>
, в указанный файл записываются только сообщения журнала для этого виртуального хоста.
Директива журнала, установленная в блоке <VirtualHost>
, переопределяет директиву, установленную в контексте сервера.
Сообщения виртуальных хостов без директив CustomLog
или ErrorLog
будут записываться в глобальные журналы сервера.
Для лучшей читабельности рекомендуется настроить отдельные файлы входа и журнала ошибок для каждого виртуального хоста. Вот пример:
<VirtualHost *:80>
ServerName esempio.it
ServerAlias www.esempio.it
ServerAdmin [email protected]
DocumentRoot /var/www/esempio.it/public
LogLevel warn
ErrorLog /var/www/esempio.it/logs/error.log
CustomLog /var/www/esempio.it/logs/access.log combined
</VirtualHost>
Всякий раз, когда файл конфигурации изменяется, служба Apache должна быть перезапущена, чтобы изменения вступили в силу.
Расположение журналов файлов
По умолчанию в дистрибутивах на основе Debian, таких как Ubuntu, журналы доступа и ошибок находятся в каталоге /var/log/apache2
. В CentOS файлы журнала размещаются в каталоге /var/log/httpd
.
Чтение и понимание журналов файлов Apache
Файлы журналов можно открывать и анализировать с помощью стандартных команд, таких как cat
, less
, grep
, cut
, awk
и так далее.
Вот образец записи из файла журнала доступа, в котором используется формат combine
журналов Debian:
192.168.22.22 - - [26/Jan/2020:20:19:02 +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"
Давайте разберем, что означает каждое поле записи:
%h
—192.168.22.22
— Имя хоста или IP-адрес клиента, делающего запрос.%l
--
- Имя удаленного реестра. Если имя пользователя не задано, в этом поле отображается-
.%u
--
- Если запрос аутентифицирован, отображается удаленное имя пользователя.%t
-[26/Jan/2020:20:19:02 +0000]
- Локальное время сервера.\"%r\"
-"GET /HTTP/1.1"
- Первая строка запроса. Тип запроса, путь и протокол.%>s
-200
- Код ответа конечного сервера. Если символ>
не используется и запрос был перенаправлен внутри, будет отображаться статус исходного запроса.%O
-396
- Размер ответа сервера в байтах.\"%{Referer}i\"
-"-"
- URL реферала.\"%{User-Agent}i\"
-Mozilla/5.0...
- Пользовательский агент клиента (веб-браузер).
Используйте команду tail
для просмотра файла журнала в режиме реального времени:
tail -f access.log
Вывод
Файловые журналы предоставляют полезную информацию о проблемах с сервером и о том, как посетители взаимодействуют с вашим сайтом.
Apache имеет очень настраиваемую систему ведения журналов, которая позволяет настраивать журналы доступа и ошибок в соответствии с вашими потребностями.