Настройка журналов ошибок и доступа Apache

Настройка ведения журнала Apache

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 задаёт уровень ведения журнала. Ниже приведены уровни, отсортированные по степени важности (от самого низкого к самому высокому):

  • trace1trace8 — Трассировка сообщений.
  • debug — Отладочные сообщения.
  • info — Информационные сообщения.
  • notice — Уведомления.
  • warn — Предупреждения.
  • error — Ошибки при обработке запроса.
  • crit — критические проблемы. Требуют немедленного действия.
  • alert — Оповещения. Необходимо немедленно принять меры.
  • emerg — Аварийная ситуация. Система находится в непригодном для использования состоянии.

Каждый уровень журнала включает в себя более высокие уровни. Например, если установить уровень журнала « warn , Apache также будет записывать сообщения об error , crit , alert и emerg .

Если параметр LogLevel не указан, по умолчанию используется значение warn . Рекомендуется установить уровень не ниже crit .

Директива ErrorLogFormat определяет формат журнала ошибок. В большинстве дистрибутивов Linux сервер Apache использует формат по умолчанию, которого достаточно для большинства случаев.

Виртуальные хосты и глобальное ведение журнала

Поведение журнала и местоположение файлов можно настроить как глобально, так и для каждого виртуального хоста.

Затем в контексте основного сервера задаются директивы CustomLog или ErrorLog , и сервер записывает все сообщения журнала в те же файлы журнала доступа и ошибок. В противном случае, если директивы помещены в блок , в указанный файл записываются только сообщения журнала для этого виртуального хоста.

Директива журнала, заданная в блоке , переопределяет директиву, заданную в контексте сервера.

Сообщения журнала виртуальных хостов без директив CustomLog или ErrorLog будут записываться в глобальные журналы сервера.

Для лучшей читаемости рекомендуется создавать отдельные файлы журнала доступа и ошибок для каждого виртуального хоста. Вот пример:

  *: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 

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

Расположение файлов журнала

По умолчанию в дистрибутивах на базе Debian , таких как Ubuntu , журналы доступа и ошибок находятся в каталоге /var/log/apache2 . В CentOS файлы журналов находятся в каталоге /var/log/httpd .

Чтение и понимание файлов журналов Apache

Файлы журналов можно открывать и анализировать с помощью стандартных команд, таких как 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"

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

  • %h192.168.33.1 — Имя хоста или IP-адрес клиента, отправившего запрос.
  • %l- — Имя удалённого журнала. Если имя пользователя не задано, в этом поле отображается - .
  • %u- — Если запрос аутентифицирован, отображается имя удаленного пользователя.
  • %t[08/Jan/2020:21:39:03 +0000] — Локальное время сервера.
  • "%r""GET / HTTP/1.1" — первая строка запроса. Тип запроса, путь и протокол.
  • %>s200 — Конечный код ответа сервера. Если символ > не используется и запрос был перенаправлен внутри сервера, будет отображаться статус исходного запроса.
  • %O396 — Размер ответа сервера в байтах.
  • "%{Referer}i""-" — URL реферала.
  • "%{User-Agent}i"Mozilla/5.0 ... — Пользовательский агент клиента (веб-браузер).

Используйте команду tail для просмотра файла журнала в режиме реального времени:

 tail -f access.log

Заключение

Файлы журналов предоставляют вам полезную информацию о проблемах сервера и о том, как посетители взаимодействуют с вашим сайтом.

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

Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.

апач

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *