Одна из многих частей головоломки сайта — это веб-журналы. Анализ трафика занимает центральное место на большинстве веб-сайтов, и ключ к получению максимальной отдачи от анализа трафика зависит от того, как вы настраиваете свои веб-журналы.
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 для их уровней журнала ошибок следующие:
Отслеживание активности на сайте
Часто по умолчанию Apache генерирует три журнала активности: доступ, агент и реферер. Они отслеживают доступ к вашему веб-сайту, браузеры, используемые для доступа к сайту, и ссылки на URL, с которых пришли посетители вашего сайта.
Сейчас принято использовать «комбинированный» формат журналов Apache, который объединяет все три этих журнала в один файл журнала. Это очень удобно, когда используется программное обеспечение для анализа трафика, поскольку большинство этих сторонних программ проще всего настраивать и планировать, когда имеешь дело только с одним файлом журнала на домен.
Давайте разберем код в объединенном формате журнала и посмотрим, что все это значит.
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat
начинает строку и просто сообщает Apache, что вы определяете тип файла журнала (или псевдоним), в данном случае объединенный. Теперь давайте посмотрим на загадочные символы, которые составляют это определение файла журнала.Чтобы просмотреть все доступные коды конфигурации для создания настраиваемого журнала, см . Документацию 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
.Логарифмические сайты
Для получения дополнительной информации о ротации журналов см .: