Логування HTTP-запитів в Apache: Короткий посібник

watch 3m, 3s
views 2

13:10, 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 є досить корисним, оскільки дозволяє зберігати майже будь-яку структуру чи тип даних. Крім того, цей формат чудово підходить для самодокументування інформації. Серед основних типів, що підтримуються цим форматом, можна виділити масиви, числа, рядки, нульове значення та логічні оператори.

Впровадження ротації логів

Проблеми, що можуть виникати з логами доступу або іншими логами, — це надмірне споживання місця або складнощі з управлінням. Завдяки впровадженню ротації логів можна вирішити ці проблеми.

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

Файл конфігурації за замовчуванням у Debian 11 розташований у каталозі /etc/logrotate.d/apache2. Ви можете змінити цей файл, щоб налаштувати ротацію логів Apache. Роз’яснимо значення кожного розділу цього файлу конфігурації:

-        Missingok не виявляє жодних проблем у разі, якщо файл журналу вказано.

-        /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

-10%

CPU
CPU
4 Xeon Cores
RAM
RAM
2 GB
Space
Space
30 GB SSD
Bandwidth
Bandwidth
Unlimited
10Ge-KVM-SSD 2048 Linux

30.3

При оплаті за рік

-9.7%

CPU
CPU
10 Xeon Cores
RAM
RAM
64 GB
Space
Space
300 GB SSD
Bandwidth
Bandwidth
Unlimited
wKVM-SSD 65536 Windows

138.99

При оплаті за рік

-20.2%

CPU
CPU
1 Xeon Core
RAM
RAM
1 GB
Space
Space
50 GB SSD
Bandwidth
Bandwidth
300 GB
wKVM-SSD 1024 HK Windows

19

При оплаті за рік

-9.5%

CPU
CPU
8 Epyc Cores
RAM
RAM
32 GB
Space
Space
200 GB NVMe
Bandwidth
Bandwidth
Unlimited
wKVM-NVMe 32768 Windows

74.49

При оплаті за рік

-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

При оплаті за рік

-29.4%

CPU
CPU
4 Xeon Cores
RAM
RAM
2 GB
Space
Space
30 GB SSD
Bandwidth
Bandwidth
2 TB
KVM-SSD 2048 Metered Linux

17

При оплаті за рік

-21.5%

CPU
CPU
2 Xeon Cores
RAM
RAM
2 GB
Space
Space
75 GB SSD
Bandwidth
Bandwidth
300 GB
wKVM-SSD 2048 HK Windows

26

При оплаті за рік

-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

При оплаті за рік

-15.5%

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

95

При оплаті за рік

-10%

CPU
CPU
6 Epyc Cores
RAM
RAM
16 GB
Space
Space
150 GB NVMe
Bandwidth
Bandwidth
Unlimited
KVM-NVMe 16384 Linux

50.49

При оплаті за рік

Інші статті на цю тему

cookie

Чи приймаєте ви файли cookie та політику конфіденційності?

Ми використовуємо файли cookie, щоб забезпечити вам найкращий досвід роботи на нашому сайті. Якщо ви продовжуєте користуватися сайтом, не змінюючи налаштувань, вважайте, що ви згодні на отримання всіх файлів cookie на сайті HostZealot.