Статьи

Настройка веб-журналов в Apache

Одна из многих частей головоломки сайта — это веб-журналы. Анализ трафика занимает центральное место на большинстве веб-сайтов, и ключ к получению максимальной отдачи от анализа трафика зависит от того, как вы настраиваете свои веб-журналы.

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

Примечание автора: хотя большая часть этой статьи обсуждает параметры конфигурации для любой операционной системы, поддерживаемой Apache, часть содержимого будет зависеть от Unix / Linux (* nix), которая теперь включает Macintosh OS X и лежащее в основе ядро ​​Unix.

Для одного сайта Apache в значительной степени настроен для входа в систему по умолчанию. Исходный файл httpd.conf (находится в /etc/httpd/conf/httpd.conf в большинстве случаев) должен содержать раздел журналов, который выглядит примерно так (Apache 2.0.x), с описательными комментариями для каждого элемента. Ваша папка журналов по умолчанию находится в /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 

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 
Журналы ошибок

Журнал ошибок содержит сообщения, отправленные Apache для ошибок, обнаруженных в ходе работы. Этот журнал очень полезен для устранения неполадок Apache на стороне сервера.

Совет по журналу Apache: Если вы отслеживаете ошибки или тестируете свой сервер, вы можете использовать командную строку для интерактивного просмотра записей журнала. Откройте сеанс оболочки и введите "tail –f /path/to/error_log" . Это покажет вам последние несколько записей в файле, а также продолжать показывать новые записи по мере их появления.

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

1299_apachelogstable1

Отслеживание активности на сайте

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

Сейчас принято использовать «комбинированный» формат журналов Apache, который объединяет все три этих журнала в один файл журнала. Это очень удобно, когда используется программное обеспечение для анализа трафика, поскольку большинство этих сторонних программ проще всего настраивать и планировать, когда имеешь дело только с одним файлом журнала на домен.

Давайте разберем код в объединенном формате журнала и посмотрим, что все это значит.

 LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined 
  LogFormat начинает строку и просто сообщает Apache, что вы определяете тип файла журнала (или псевдоним), в данном случае объединенный.  Теперь давайте посмотрим на загадочные символы, которые составляют это определение файла журнала.

1299_apachelogstable2

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

Совет по журналу Apache: Вы можете получить больше из заголовка HTTP, если хотите. Полный список и определение данных в заголовке можно найти в Консорциуме World Wide Web .

Для одного веб-сайта достаточно записи по умолчанию:

 CustomLog logs/access_log combined 

Однако для регистрации нескольких сайтов у вас есть несколько вариантов. Наиболее распространенным является определение отдельных файлов журнала для каждого домена. Это видно из приведенного ниже примера, снова используя директиву log в контейнере <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 рекомендует специальный отдельный файл журнала для больших виртуальных хост-сред и предоставляет инструмент для создания отдельных журналов для отдельного домена.

Мы назовем этот тип журнала форматом cvh, что означает «общий виртуальный хост». Просто добавив% v (что означает виртуальный хост) в начало определенного ранее комбинированного формата журнала и присвоив ему новый псевдоним cvh, мы можем скомпилировать все домены в один файл журнала, а затем автоматически разделить их на отдельные файлы журнала. для обработки пакетом анализа трафика.

 LogFormat "%v %h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" cvh 

В этом случае мы не делаем никаких записей CustomLog в контейнерах <VirtualHost> и просто имеем один файл журнала, сгенерированный Apache. Программа, созданная Apache с именем split_logfile , включена в каталог src / support ваших исходников Apache. Если вы не скомпилировали из исходного кода или у вас нет исходных текстов, вы можете получить скрипт Perl .

Отдельные файлы журнала, созданные из вашего основного файла журнала, будут именоваться для каждого домена (виртуального хоста) и выглядеть следующим образом: virtualhost.log.

Вращение журнала

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

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

В этом примере используется рудиментарный сценарий оболочки для перемещения текущего веб-журнала в архив архива, сжатие старого файла и сохранение архива в течение 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 (или как вы его называете, например, access_log и т. Д.). Просто убедитесь, что изменили имена файлов журналов, а также chmod (измените права доступа к файлу) на 755, чтобы он стал исполняемым.

Это прекрасно работает для одного занятого сайта. Если у вас есть более сложные требования к ротации журналов, обязательно посетите некоторые из следующих сайтов. Кроме того, многие дистрибутивы Linux теперь включают ротацию журналов. Например, Red Hat 9 поставляется с logrotate.d , демоном ротации журналов, который легко настраивается. Чтобы узнать больше, в вашей системе Linux с установленным logrotate.d введите man logrotate .

Логарифмические сайты

Для получения дополнительной информации о ротации журналов см .: