Конкурс:Наши детки
Случайные изображения
|
Настройка логов в Apache
|
|
|
|
26.1.2009, 16:42
|
Опытный Пользователь
Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435
|
Настройка логов в Apache
Одним из кусков пазла веб-сайта являются его веб-логи. Для большинства сайтов анализ трафика является одной из главных задач, а результат такого анализа зависит от того, как вы настроили свои логи. Apache - это одно из самых (если не самое) мощных open-source решений для создания веб-серверов. Как вы позже увидите, возможности ведения логов в Apache как для одного сайта, так и для нескольких доменов очень гибки.
Примечание автора: Большинство возможностей настройки логов применимы для любой операционной системы, но некоторые из них специфичны только для Unix/Linux.
Apache по умолчанию довольно хорошо сконфигурирован для ведения логов одного сайта. Стандартный файл httpd.conf (находится в /etc/httpd/conf/httpd.conf) должен иметь раздел логов с подробными комментариями для каждой директивы. Каталог логов по умолчанию находится в /etc/httpd/logs. Позже мы покажем как изменить этот путь. Теперь давайте рассмотрим раздел настройки логов: ErrorLog logs/error_log LogLevel warn 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 CustomLog logs/access_log combined Лог ошибок (Error Log) Лог ошибок содержит сообщения, поступающие от Apache (ошибки, уведомления и т.п.). Этот лог очень полезен для поиска и устранения проблем, возникающих на стороне сервера. Совет: Если вы тестируете ваш сервер, то можете использовать командную строку для интерактивного просмотра логов. Введите ”tail –f /path/to/error_log”. Эта команда выведет несколько последних строк лога, а также продолжит показывать новые сообщения по мере их поступления. Тут возможностей для настройки не так много - кроме возможности указать, где находится файл лога, и какой уровень ошибок вы хотите отслеживать в логе, больше опций нет. Теперь давайте посмотрим на настройку лога в httpd.conf: ErrorLog logs/error_log Если вы хотите сохранять всю информацию об ошибках в один лог, то этой директивы хватит (даже для множества доменов). Однако вы можете специфицировать файл лога ошибок для каждого домена. Это делается в секциях <VirtualHost> примерно следующим образом: <VirtualHost 10.0.0.2> DocumentRoot "/home/sites/domain1/html/" ServerName domain1.com ErrorLog /home/sites/domain1/logs/error.log </VirtualHost> Если вы системный администратор и ответственны за контроль логов, то рекомендую вам использовать один файл. А если вы предоставляете хостинг для клиентов, то удобней задать отдельный лог ошибок для каждого клиента, чтобы каждый из них мог отслеживать свои ошибки. Уровень ошибок, попадающих в лог, устанавливается следующим образом: LogLevel warn В Apache определены следующие уровни ошибок: Уровень Описание emerg Экстренный – система не функционирует alert Ошибку необходимо немедленно исправить crit Критическая ошибка error Ошибка warn Предупреждение notice Уведомление (нормальное функционирование) info Информационное сообщение debug Сообщение отладки Контроль активности сайта В основном по умолчанию Apache генерирует три лога активности: лог доступа, агентов и лог ссылающихся страниц (рефереров). Они отслеживают доступ к сайту, браузеры, используемые для доступа, и ссылающиеся URL, с которых приходят ваши посетители. Довольно просто использовать комбинированный формат сообщения лога Apache (combined), который объединяет эти три лога в один лог-файл. Такой подход очень удобен, когда используется программа анализа трафика, так как большинство из этих программ легко функционируют, когда есть только один лог-файл на домен. Теперь давайте разберем код комбинированного формата сообщения лога: LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined Строка начинается с LogFormat и сообщает Apache, что вы определили тип файла лога, в данном случае - комбинированный. Сейчас давайте взглянем на символы, которые составляют определение формата сообщения. %h IP адрес клиента (удаленного хоста). %l Имя пользователя (от identd). %u userid удаленного пользователя (полезно при HTTP авторизации). %t Дата и время запроса. %r Строка запроса. %s Код статуса, отсылаемый сервером клиенту (201, 301, 404, 500, и т.д.). Символ > перед s показывает, что в лог записывается только последний статус. %b Количество отправленных байтов клиенту (HTTP заголовки не учитываются). %i Элементы, передаваемые в HTTP заголовках. Таким образом, добавляя Referer и User-Agent можно отслеживать ссылающиеся URL и типы браузеров. Прим. переводчика: Если запрошенная информация недоступна, то в логе она заменяется дефисом. Чтобы вставить в лог символ % необходимо использовать %%. Совет: Вы можете использовать больше HTTP заголовков. Полный список заголовков можно найти на www.w3.org. Для одного сайта достаточно записи по умолчанию: CustomLog logs/access_log combined А для множества сайтов есть несколько вариантов. Наиболее простой - это определить отдельный лог-файл для каждого домена. Для этого, как видно из примера ниже, необходимо использовать директивы лога внутри секции <VirtualHost> каждого домена. <VirtualHost 10.0.0.2> DocumentRoot "/home/sites/domain1/html/" ServerName domain1.com ErrorLog /home/sites/domain1/logs/error.log CustomLog /home/sites/domain1/logs/web.log </VirtualHost> <VirtualHost 10.0.0.3> DocumentRoot "/home/sites/domain2/html/" ServerName domain2.com ErrorLog /home/sites/domain2/logs/error.log CustomLog /home/sites/domain2/logs/web.log </VirtualHost> <VirtualHost 10.0.0.4> DocumentRoot "/home/sites/domain3/html/" ServerName domain3.com ErrorLog /home/sites/domain3/logs/error.log CustomLog /home/sites/domain3/logs/web.log </VirtualHost> Подробнее об организации виртуальных хостов можно прочитать в книге "Apache для профессионалов" (описание глав книги), которую можно заказать в Озоне. В этом примере у нас есть три домена с тремя уникальными веб-логами (использующие комбинированный формат, рассмотренный выше). Этот метод хорошо работает для большинства хостов. Однако могут быть ситуации, где такой подход может быть трудновыполнимым. В таких случаях Apache рекомендует использовать специальный лог-файл для одного большего виртуального хоста, а для генерации лог-файлов отдельных доменов использовать специальные инструменты. Для этого надо использовать тип формата лог-файла - сvh (common virtual host). Просто добавляя %v (виртуальный хост) в начало комбинированного формата лога, определенного ранее, мы можем собрать сообщения всех доменов в один лог-файл, а затем автоматически разбить его на отдельные лог-файлы. LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" cvh В этом случае мы не используем директиву CustomLog в секциях <VirtualHost>, а просто получаем один лог-файл, сгенерированный Apache. Программа, разбивающая этот файл, называется split_logfile и находится в каталоге src/support в исходниках Apache. Если у вас нет исходников Apache, то для этих целей можно скачать скрипт на Perl. Отдельные лог-файлы создаются из главного файла с именами виртуальных хостов и выглядят так: virtualhost.log. Ротация логов В завершении мы хотим рассмотреть механизм ротации логов. Сайты с большим трафиком генерируют большие лог-файлы, которые быстро заполняют свободное место на дисках серверов. Для управления этим процессом можно использовать ротацию логов. Есть много возможностей осуществления ротации логов и множество сторонних инструментов для этого. А так как мы рассматриваем стандартную конфигурацию Apache, будем использовать простую схему ротации логов. Ниже я дам ссылки на более гибкие методы ротации логов. Этот метод использует простой shell-скрипт для перемещения текущего веб-лога в архивный лог, сжатия архивного лога и хранения архивов за 12 месяцев. После этого производится перезапуск Apache с паузой для переключения лог-файлов. mv web11.tgz web12.tgz mv web10.tgz web11.tgz mv web9.tgz web10.tgz mv web8.tgz web9.tgz mv web7.tgz web8.tgz mv web6.tgz web7.tgz mv web5.tgz web6.tgz mv web4.tgz web5.tgz mv web3.tgz web4.tgz mv web2.tgz web3.tgz mv web1.tgz web2.tgz mv web.tgz web1.tgz mv web.log web.old /usr/sbin/apachectl graceful sleep 300 tar cvfz web.tgz web.old Этот код может быть скопирован в файл logrotate.sh, и помещен в каталог, где хранится файл web.log (файл лога). Только измените имена лог-файлов на ваши, а также поменяйте права на 755, чтобы файл смог исполняться. Такой подход хорошо работает для одного загруженного сайта. Если у вас более сложные требования для ротации логов, посмотрите следующие ссылки.
Ссылки по ротации логов
* cronolog * modperl
Автор: Blane Warrene Перевод: Сипягин Максим Оригинал документа (en)
Сообщение отредактировал шпунтик - 26.1.2009, 16:43
|
|
|
|
|
|
|
|