Регистрация HTTP-запросов в Apache: Краткое руководство

watch 3m, 4s
views 2

13:14, 27.07.2026

Содержание статьи
arrow

  • Основы ведения журналов Apache
  • Категории журналов Apache
  • Журналы доступа
  • Журналы ошибок
  • Расположение файлов журналов
  • Настройка параметров ведения журналов Apache
  • Использование директивы LogLevel
  • Определение пользовательских форматов журналов
  • Присвоение псевдонимов логам
  • Ведение журналов в формате JSON
  • Реализация ротации логов
  • Настройки журналов по умолчанию для виртуальных хостов
  • Debian, Ubuntu и Linux Mint
  • Таблица директив по умолчанию
  • Таблица директив по умолчанию
  • OpenSUSE
  • Таблица директив по умолчанию
  • Модули Apache для ведения журналов
  • mod_log_config
  • mod_log_debug
  • mod_log_forensic
  • mod_logio
  • mod_filter
  • mod_unique_id

Основы ведения журналов Apache

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

Категории журналов Apache

Журналы Apache делятся на две категории: журналы ошибок и журналы доступа.

Журналы доступа

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

Журналы ошибок

Как и следует из названия, журналы ошибок содержат данные об ошибках, возникших при обработке сервером конкретного запроса. Как и в журналах доступа, в них также указывается точное время поступления запроса и IP-адрес. Журналы ошибок позволяют вам узнавать о возникших проблемах. Например, если файл отсутствует,

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

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

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

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

Использование директивы LogLevel

Директива LogLevel необходима для определения минимального уровня серьезности событий. Уровень серьезности указывает на важность конкретного события и может варьироваться. Например, уровень серьезности может быть установлен как Trace8 или Emerg. Уровень Emerg обозначает события, которые могут привести к нестабильности, а Trace8 — трассировочные сообщения. Например, LogLevel crit игнорирует все уровни, кроме Emerg, Alert и Crit.

Определение пользовательских форматов журналов

Директива LogFormats отвечает за форматирование и расположение событий в журнале. По умолчанию используется формат CLF (Common Format), но вы также можете использовать собственную строку форматирования.

Директива CustomLog также необходима для изменения расположения файлов журналов. В большинстве систем Linux журналы обычно записываются в каталог var/log/httpd или var/log/apache2. Кроме того, вы можете изменить строку после имени файла, чтобы конкретные изменения вносились только в конкретный файл.

Полный список полей можно найти в документации по журналам. Для мониторинга активности сервера и оперативного устранения возникающих проблем следует использовать следующие 5 полей:

  1. %T — указывает время, затраченное на обработку запроса. Это очень полезное поле, так как позволяет измерить скорость работы сайта. Чтобы получить те же результаты, но в микросекундах, вместо T следует использовать D.
  2. %>s — с помощью этого параметра можно проверить статус запроса после какого-либо внутреннего перенаправления.
  3. %a — показывает IP-адрес, с которого был отправлен запрос. Это означает, что вы сможете гораздо проще идентифицировать трафик.
  4. %{ID}e — ID обозначает идентификатор запроса, то есть каждый запрос имеет свой уникальный идентификатор. Это можно использовать для отслеживания запросов между сервером веб-приложения и Apache.
  5. %U — путь URL, но без дополнительных параметров, например, строки запроса.

Присвоение псевдонимов логам

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

Ведение журналов в формате JSON

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

JSON — это аббревиатура от JavaScript Object Notation и отличный формат для хранения структурированных данных. JSON весьма полезен, поскольку позволяет хранить практически любую структуру или тип данных. Кроме того, этот формат отлично подходит для самодокументирования информации. Среди основных типов, поддерживаемых этим форматом, можно выделить массивы, числа, строки, значение null и булевы операторы.

Реализация ротации логов

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

Существует специальная программа rotatelogs, которая помогает осуществлять ротацию журналов в зависимости от их размера и времени. Стандартная команда logrotate также является хорошим вариантом, с которого можно начать. В большинстве систем Linux у Apache есть файл конфигурации.

Файл конфигурации по умолчанию в Debian 11 находится в /etc/logrotate.d/apache2. Вы можете изменить этот файл, чтобы настроить ротацию журналов Apache. Давайте разберем значение каждого раздела этого файла конфигурации:

-        Отсутствие параметра «ok» не вызывает никаких проблем, если файл журнала указан.

-        /var/log/apache2/*.log — означает, что конфигурация будет применяться ко всем файлам с расширением .log в указанном месте. После { указываются все директивы для logrotate, а затем используется }.

-        Compress означает, что сжатие применяется к ротируемым файлам журналов.

-        Если указано «daily», это означает, что ротация происходит ежедневно; также вы можете изменить это значение на «yearly», «weekly» или «monthly».

-        «Rotate 14-» означает, что сохраняются 14 файлов журналов, а остальные удаляются. В случае использования ежедневной ротации у вас будет сохранено примерно 2 недели журналов.

-        «Delaycompress» означает, что недавние файлы остаются в несжатом виде, а самые старые будут сжаты.

-        Notifempty — означает, что все пустые файлы не подлежат ротации.

-        Sharedscripts — скрипты postrotate не будут запускаться, пока все журналы не будут ротированы.

-        Create 640 root adm — означает, что после ротации будут созданы файлы с правами доступа 640.

Настройки журналов по умолчанию для виртуальных хостов

Виртуальные хосты необходимы для запуска нескольких веб-сайтов на одном сервере. Для каждого виртуального хоста можно указать отдельную конфигурацию ведения журналов. Это означает, что вы можете настроить запись журналов каждого сайта в отдельный каталог. Или же вы можете оставить глобальную конфигурацию по умолчанию.

Вот пример, в котором журналы записываются в отдельный файл access.log:

<VirtualHost *:80>
 ServerName skills.com (пример домена)
 ServerAdmin webmaster@skills.com
 DocumentRoot /var/www/skills.com
 LogLevel info ssl:warn
 ErrorLog /var/www/skills.com/logs/error.log
 CustomLog /var/www/skills.com/logs/access.log example
</VirtualHost>

Debian, Ubuntu и Linux Mint

В системах Debian конфигурация шифрования веб-сайтов по умолчанию с помощью SSL/TLS находится в файле /etc/apache2/sites-available/default-ssl.conf, а конфигурация виртуального хоста для незашифрованных веб-сайтов — в файле /etc/apache2/sites-available/000-default.conf.

Таблица директив по умолчанию

Параметр/Директива

Файл конфигурации

Значение/Путь

AccessLog

/etc/apache2/sites-available/000-default.conf

CustomLog ${APACHE_LOG_DIR}/access/log combined

SUFFIX*

/etc/apache2/envvars

Условную логику можно проверить в файле конфигурации

LogLevel

/etc/apache2/apache2.conf

warn

APACHE_LOG_DIR**

/etc/apache2/envvars

Export

=/var/log/apache2$SUFFIX

ErrorLog

/etc/apache2/apache2.conf

ErrorLog${APACHE_LOG_DIR}/error.log

LogFormat

/etc/apache2/apache2.conf

“%v:%p %h %l %u %t”%r”%>s %0 “%{Referer}i” „%{User-Agent}i””

CustomLog

/etc/apache2/conf-available/other-vhosts-access-log.conf

${APACHE_LOG_DIR}/other_vhosts_access.log vhost_combined

Red Hat, Fedora и CentOS

В Red Hat и аналогичных системах файлы конфигурации виртуальных хостов находятся в каталоге /etc/httpd/conf.d, а главный файл конфигурации — в каталоге /etc/httpd/conf/httpd.conf.

Таблица директив по умолчанию

Директива

Файл конфигурации

Значение/Путь

LogLevel

/etc/httpd/conf/httpd.conf

warn

AccessLog

/etc/httpd/conf/httpd.conf

/var/log/httpd/access_log

LogFormat (log_config_module)

/etc/httpd/conf/httpd.conf

“%h %l %u %t”%r”%>s %b “%{Referer}i” „%{User-Agent}i””

ErrorLog

/etc/httpd/conf/httpd.conf

/var/log/httpd/error_log

CustomLog (log_config_module)

/etc/httpd/conf/httpd.conf

«logs/access_log» combined

LogFormat (загруженный модуль logio_module)

/etc/httpd/conf/httpd.conf

«%h %l %u %t»%r»%>s %b «%{Referer}i» „%{User-Agent}i” %l%0»combinedio

OpenSUSE

В системе OpenSUSE конфигурация для веб-сайтов с SSL/TLS находится в файле /etc/apache2/default-vhost-ssl.conf, а для незашифрованных — в файле /etc/apache2/default-vhost.conf.

Таблица директив по умолчанию

Директива

Файл конфигурации

Значение/Путь

LogLevel

/etc/apache2/sysconfig.d/global.conf

warn

AccessLog

/etc/apache2/sysconfig.d/global.conf

/var/log/apache2/access_log

LogFormat (log_config_module)

/etc/apache2/mod_log_config.conf

“%h %l %u %t”%r”%>s %b“

ErrorLog

/etc/apache2/httpd.conf

/var/log/apache2/error_log

LogFormat (logio_module)

/etc/apache2/mod_log_config.conf

«%h %l %u %t»%r»%>s %b«%{Referer}i» „%{User-Agent}i” %l%0»combinedio

CustomLog (log_config_module)

/etc/apache2/sysconfig.d/global.conf

/var/log/apache2/access_log

combined

LogFormat (mod_ssl)

/etc/apache2/mod_log_config.conf

«%t%h%{SSL_PROTOCOL}x %{SSL_CIPHER}x»%r» %b» ssl_commonLogformat”%t %h %{SSL_PROTOCOL}x

%{SSL_CIPHER}x “%r”%b “%{Referer}i” “%{User-Agent}i””ssl_combined

Модули Apache для ведения журналов

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

mod_log_config

Это, пожалуй, самый базовый модуль, о котором мы уже говорили в этой статье.

mod_log_debug

Этот модуль может отсутствовать не во всех дистрибутивах Apache, но он полезен для ведения журнала отладочных сообщений. Например, этот модуль можно использовать для записи сообщений от определённых клиентов, регистрации событий по определённому URL-пути и т. д.

Например:

<Location /path/to/some/directory>
LogMessage "Запрос на /path/to/directory поступил от"
${REMOTE_ADDR}
</Location>

mod_log_forensic

С помощью этого модуля можно вести регистрацию событий до и после обработки запроса. После включения этого модуля можно использовать ключевые слова для определения того, какой файл журнала является криминалистическим. Также можно использовать %{forensic-id} в различных строках, чтобы добавлять данные для криминалистического анализа в обычные журналы.

Вот пример:

<VirtualHost *:80>
ServerName skills.com (это пример домена)
   ServerAdmin webmaster@skills.com
   DocumentRoot /var/www/skills.com
   LogLevel info ssl:warn
   ErrorLog /var/www/skills.com/logs/error.log
   CustomLog /var/www/skills.com/logs/access.log example
   CustomLog /var/www/skills.com/logs/forensic.log forensic
</VirtualHost>

mod_logio

Данный модуль позволяет регистрировать количество байтов, полученных или отправленных в рамках каждого запроса. Этот модуль также учитывает изменения размера, связанные с шифрованием TLS/SSL, и обычно включается в соответствии с настройками по умолчанию.  

mod_filter

Этот модуль помогает отфильтровывать определённые запросы на основе заданного фильтра. Контекстный фильтр, предоставляемый этим модулем, учитывает конфигурацию виртуальных хостов, конфигурацию Apache, файлы .htaccess и многое другое.

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

mod_unique_id

Этот модуль необходим для формирования уникального идентификатора для каждого запроса. Идентификатор записывается в журнал доступа. Он передаётся обработчику приложения с помощью переменной среды UNIQUE_ID. Таким образом, разработчикам становится гораздо проще отслеживать запросы.

Поделиться

Была ли эта статья полезной для вас?

Популярные предложения VPS

-21.5%

CPU
CPU
2 Xeon Cores
RAM
RAM
4 GB
Space
Space
100 GB SSD
Bandwidth
Bandwidth
300 GB
wKVM-SSD 4096 HK Windows

40

При оплате за год

-10%

CPU
CPU
6 Epyc Cores
RAM
RAM
8 GB
Space
Space
100 GB NVMe
Bandwidth
Bandwidth
Unlimited
Keitaro KVM 8192
OS
CentOS
Software
Software
Keitaro

28.99

При оплате за год

-10%

CPU
CPU
3 Xeon Cores
RAM
RAM
1 GB
Space
Space
20 GB SSD
Bandwidth
Bandwidth
Unlimited
KVM-SSD 1024 Linux

6.6

При оплате за год

-10%

CPU
CPU
3 Epyc Cores
RAM
RAM
2 GB
Space
Space
20 GB NVMe
Bandwidth
Bandwidth
Unlimited
KVM-NVMe 2048 Linux

8.8

При оплате за год

-5%

CPU
CPU
3 Xeon Cores
RAM
RAM
1 GB
Space
Space
40 GB HDD
Bandwidth
Bandwidth
Unlimited
wKVM-HDD 1024 Windows

12.1

При оплате за год

-15.4%

CPU
CPU
4 Xeon Cores
RAM
RAM
4 GB
Space
Space
100 GB SSD
Bandwidth
Bandwidth
60 Mbps
DDoS Protected SSD-wKVM 4096 Windows

73

При оплате за год

-8.4%

CPU
CPU
4 Xeon Cores
RAM
RAM
2 GB
Space
Space
75 GB SSD
Bandwidth
Bandwidth
Unlimited
10Ge-wKVM-SSD 2048 Windows

37.4

При оплате за год

-10%

CPU
CPU
6 Epyc Cores
RAM
RAM
8 GB
Space
Space
100 GB NVMe
Bandwidth
Bandwidth
Unlimited
wKVM-NVMe 8192 Windows

28.99

При оплате за год

-15.4%

CPU
CPU
6 Xeon Cores
RAM
RAM
16 GB
Space
Space
150 GB SSD
Bandwidth
Bandwidth
100 Mbps
DDoS Protected SSD-wKVM 16384 Windows

130

При оплате за год

-15%

CPU
CPU
6 Xeon Cores
RAM
RAM
8 GB
Space
Space
100 GB SSD
Bandwidth
Bandwidth
80 Mbps
DDoS Protected SSD-wKVM 8192 Windows

101

При оплате за год

Другие статьи на эту тему

cookie

Принять файлы cookie и политику конфиденциальности?

Мы используем файлы cookie, чтобы обеспечить вам наилучший опыт работы на нашем сайте. Если вы продолжите работу без изменения настроек, мы будем считать, что вы согласны получать все файлы cookie на сайте HostZealot.