22.12. Ведение отдельных журналов для виртуальных хостов

Проблема

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

Решение

Чтобы назначить отдельные файлы журналов для каждого виртуального хоста, отредактируйте файл конфигурации httpd.conf. Ниже приведён пример настройки для одного из виртуальных хостов:

<VirtualHost *:80>
    ServerName www.tuxcomputing.com
    ServerAlias tuxcomputing.com *.tuxcomputing.com
    DocumentRoot /var/www/tuxcomputing
    ErrorLog /var/www/tuxcomputing/logs/error.log
    CustomLog /var/www/tuxcomputing/logs/access.log combined
    ServerAdmin admin@tuxcomputing.com
</VirtualHost>

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

Директивы LogFormat и настройка форматов логов

В файле httpd.conf Apache включает несколько предустановленных форматов логов с использованием директивы LogFormat. Вот основные форматы:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

Директива combined предоставляет полную информацию, включая данные о реферере и агенте пользователя, что полезно для анализа источников трафика и типов устройств. Формат common содержит базовую информацию о запросах, а форматы referer и agent фокусируются на специфических данных, таких как источники переходов и идентификатор клиента.

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

Примеры пользовательских форматов логов

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

LogFormat "%h %t \"%{User-Agent}i\"" custom_device_log
CustomLog /var/www/tuxcomputing/logs/device.log custom_device_log

В этом примере лог будет записывать IP-адрес, время запроса и только данные о типе устройства, указанного в заголовке User-Agent. Это может быть полезно для анализа типов устройств, используемых вашими посетителями.

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

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

См. также

Раздел 22.4, документация по mod_log_config