Как включить и настроить журнал ошибок Apache и журнал доступа в Linux

12 set 2022 5 min di lettura
Как включить и настроить журнал ошибок Apache и журнал доступа в Linux
Indice dei contenuti

Введение

Apache — это кроссплатформенный HTTP-сервер с открытым исходным кодом. Он имеет множество мощных функций, которые могут быть расширены с помощью самых разных модулей. При управлении веб-серверами Apache одной из наиболее часто выполняемых задач является проверка файлов журналов.

Знание того, как настраивать и читать журналы, очень полезно при устранении неполадок сервера или приложения, поскольку они предоставляют подробную информацию об отладке.

Apache записывает свои записи событий в журналы двух типов: журнал доступа и журнал ошибок. Журналы доступа включают информацию о клиентских запросах и информацию журнала ошибок о проблемах сервера и приложений.

В этой статье описывается, как настраивать и читать журналы ошибок и доступа Apache.

Если вы хотите включить файлы журнала ошибок Apache и журнала доступа на удаленном сервере, продолжайте чтение, в противном случае пропустите первый абзац «Подключение к серверу» и прочитайте следующий.

Подключение к серверу

Чтобы получить доступ к серверу, вам нужно знать IP-адрес. Вам также потребуется ваше имя пользователя и пароль для аутентификации. Чтобы подключиться к серверу как root, введите следующую команду:

ssh [email protected]_DEL_SERVER

Далее вам нужно будет ввести пароль пользователя root.

Если вы не используете пользователя root, вы можете войти под другим именем пользователя с помощью той же команды, а затем изменить root на свое имя пользователя:

ssh [email protected]_DEL_SERVER

Затем вам будет предложено ввести пароль пользователя.

Стандартный порт для подключения по ssh — 22, если ваш сервер использует другой порт, вам нужно будет указать его с помощью параметра -p, затем введите следующую команду:

ssh [email protected]_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"

Давайте разберем, что означает каждое поле записи:

  • %h192.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 имеет очень настраиваемую систему ведения журналов, которая позволяет настраивать журналы доступа и ошибок в соответствии с вашими потребностями.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.