Тонкая настройка лог-файла Apache

Установка и настройка веб-серверов и серверов приложений

Тонкая настройка лог-файла Apache

Сообщение Костик » 20 фев 2008, 00:53

pache_log.gif
Как известно, каждый веб-сервер умеет записывать в лог-файл все обращения посетителей, сохраняя эту информацию для последующего анализа веб-мастером. Несколько менее известно, что, помимо стандартных access- и error-логов, Apache умеет вести и разные другие, причем с помощью достаточно простых команд их можно сделать наиболее приспособленными для отображения именно той информации, которая вам нужна...

При установке Apache в его файле конфигурации можно найти несколько команд, описывающих как стандартные, так и некоторые дополнительные логи. В первую очередь, это директивы LogFormat и CustomLog.

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

Код: Выделить всёРазвернуть
LogFormat "%{Referer}i -> %U" referer


которая описывает формат лога с названием "referer". Если вы затем укажете серверу "задействовать" этот лог, указав, например,

Код: Выделить всёРазвернуть
CustomLog /var/log/httpd/referer_log referer


то сервер создаст файл /var/log/httpd/referer_log и будет туда записывать, откуда посетитель пришел и какой документ смотрел, в соответствии с описанным вами форматом лога.


Referer-лог - штука полезная, но, попытавшись его включить, вы, скорее всего, будете разочарованы: там появится большая куча записей, у которых вместо referer'a будет указан прочерк (если эта переменная не была передана), и еще большее количество записей, где в качестве referer'ов будут указаны страницы вашего же сайта. Не говоря уже о том, что будут указаны, среди прочего, и обращения к картинкам, файлам CSS и прочим "служебным" вещам, которые веб-мастера, как правило, не сильно интересуют. Значительно интереснее попытаться создать лог, в который бы записывались "честные" внешние ссылки на ваш сайт - это поможет, например, более грамотно работать с рекламой: вы сможете наглядно увидеть, на каких сайтах реклама вашего ресурса более эффективна.

Форматы логов, указанные в настройках по умолчанию, как правило, не очень удобны в "реальной жизни"

Для этого очень удобно использовать директиву SetEnvIf, которая устанавливает какую-то переменную окружения при выполнении указанных вами условий. Эта директива принимает три параметра: атрибут, который будет проверяться; регулярное выражение, которое будет использоваться как условие проверки; переменную, которую надо установить, если условие выполнено. Например, условие

Код: Выделить всёРазвернуть
SetEnvIf Request_URI ".*/img/.*" no_image


присвоит значение 1 переменной no_image, если в пути запрошенного документа находится директория ./img/.

Директива SetEnvIf устанавливает переменные среды в зависимости от указанных вами условий

В качестве проверяемых атрибутов может использоваться любой заголовок, передаваемый браузером (например, Referer), или же переменные среды, используемые сервером Apache. Наиболее полезными из них являются Request_URI (URLihttp://photoshop.vipcentr.ru " class="glossary-indicator">i, который был запрошен посетителем), Remote_Host (имя хоста, с которого пришел запрос - появляется, только если включена директива HostNameLookups), Remote_Addr (IP-адресi браузера посетителя) и Request_Method (метод запроса - например, POST или GET).

Можно проверять самые разные параметры и в зависимости от результатов проверки выполнять те или иные действия

Значение 1 присваивается переменной автоматически, но вы можете присвоить ей любое другое значение, просто указав, скажем, no_image=15. Кроме того, можно "за один заход" присвоить значения нескольким переменным, указав дополнительные имена в качестве четвертого, пятого и так далее параметров.

Теперь, вооружившись этой полезной директивой SetEnvIf, постараемся определить те записи, которые мы не хотим видеть в логе. Прежде всего, уберем пустые значения referer'a:

Код: Выделить всёРазвернуть
SetEnvIf Referer "^$" no_referer


После этого уберем записи, где в качестве referer'a указан наш собственный сайт:

Код: Выделить всёРазвернуть
SetEnvIf Referer ".*mysite\.ru.*" no_referer


И, наконец, "прибьем" ненужные служебные запросы:

Код: Выделить всёРазвернуть
SetEnvIf Request_URI ".*/img/.*" no_referer
SetEnvIf Request_URI ".*/css/.*" no_referer


Разумеется, если вам требуется исключить еще какие-то записи, то вы можете это легко сделать, просто указав дополнительные проверки. Установка нескольких переменных в одной директиве SetEnvIf может оказаться полезной, если вы хотите настроить не один, а несколько разных логов, в которых используются одинаковые проверки. Например, в обычном access-логе намного удобнее тоже убрать служебные запросы, иначе в дополнение к каждой записи о просмотре пользователем страницы вы получите еще несколько записей о просмотре логотипа, картинки-разделителя и так далее.

SetEnvIf по умолчанию устанавливает значение 1, но можно также установить любое другое значение, а также одновременно установить значение нескольких переменных

И теперь все, что нам осталось сделать - это "объяснить" серверу, что в лог надо писать только те обращения, которые не привели к установке переменной no_referer. Делается это очень просто - достаточно в директиве CustomLog указать необходимое условие:

Код: Выделить всёРазвернуть
CustomLog /var/log/httpd/referer_log referer env=!no_referer


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

C помощью директивы SetEnvIf можно отобрать те запросы, которые будут записываться в лог

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

  • %a - IP-адрес браузера посетителя;
  • %b - количество байт, переданных в ответ на запрос;
  • %f - путь файловой системы к запрошенному документу (может отличаться от запрошенного URL!);
  • %r - первая строка запроса (включает метод, запрошенный адрес и так далее);
  • %t - дата и время запроса;
  • %T - время, требуемое на выполнение запроса;
  • %U - запрашиваемый адрес (недостатком является "отбрасывание" переменных, которые идут после знака вопроса);
  • %v - имя сервера, обрабатывающего запрос (берется из директивы ServerName).

Кроме того, в описании формата можно использовать конструкцию %{header}i, которая подставит значение требуемого заголовка запроса (например, в стандартном формате referer-лога используется %{Referer}i, кроме того, довольно часто может быть полезен идентификатор браузера пользователя - %{User-Agent}i). Аналогично, можно включить в лог и значение какой-то переменной окружения, указав %{env_variable}e (естественно, что вместо "env_variable" надо указать имя требуемой переменной).

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

Если по каким-то причинам вам не нравится формат даты, выдаваемой с помощью указания %t, то можно задать свой собственный, указав %{time}t. Здесь вместо "time" надо указать требуемый формат даты - как и с форматом логов, указывая формат даты можно использовать множество переменных, но чаще всего используются

  • %A и %a - полное и сокращенное название дня недели
  • %B и %b - полное и сокращенное название месяца
  • %d - число (без первых нулей)
  • %H - часы в 24-х часовом формате
  • %M - минуты
  • %m - номер месяца
  • %S - секунды
  • %w - порядковый номер дня недели (воскресенье - 0)
  • %Y - год (четыре цифры)

Вот и все. Теперь, осталось только отредактировать файл httpd.conf, запустить

Код: Выделить всёРазвернуть
/usr/local/apache/bin/apachectl configtest


чтобы убедиться, что вы не написали в конфигурации ничего, что сервер посчитал бы оскорбительным, и перезапустить сервер с помощью

Код: Выделить всёРазвернуть
/usr/local/apache/bin/apachectl restart


Удачи!

Всегда запускайте утилиту apachectl с параметром configtest перед перезапуском сервера - она предупредит вас в том случае, если вы допустили ошибку в файле конфигурации!

Первоисточник - hostinfo.ru
FreeBSD 9.2 and Fedora 18 user
Аватара пользователя
Костик
Активный участник
 
Сообщения: 1944
Зарегистрирован: 03 сен 2007, 02:15

Re: Тонкая настройка лог-файла Apache

Сообщение zk » 20 фев 2008, 01:01

Неплохая заметка.

Название уже поправил.
Смысл графика не понятен.

Пути и команды всё же наверное стоит поправить для нашей Windows-действительности...
zk
Администратор
 
Сообщения: 1972
Зарегистрирован: 02 сен 2007, 16:04
Домен: vfose.ru

Web Log Explorer Professional Edition v3.4.Build.0383

Сообщение Костик » 06 дек 2015, 20:38

Вот собсна говаря еще софтинка для работы с логами :roll:

Финальная версия анализатора log-файлов сервера Web Log Explorer.
Позволяет анализировать log-файлы, которые ведет сервер с целью анализа посещаемости вашего сайта. Узнать можно очень многое, от количества посетителей до версии операционной системы.Может работать как с логами находящимися на локальной машине, так и с находящимися на сервере. Проще говоря, программа предоставляет примерно туже информацию, что и многочисленные системы сбора статистики типа HotLOG и SpyLOG, но на порядок точнее.Гибкая система фильтров дает возможность выполнять глубокий анализ деятельности посетителей.
lllog.jpg

Скачать Web Log Explorer Professional Edition v3.4.Build.0383 11390 KB


Последний раз поднималось Костик 06 дек 2015, 20:38.
FreeBSD 9.2 and Fedora 18 user
Аватара пользователя
Костик
Активный участник
 
Сообщения: 1944
Зарегистрирован: 03 сен 2007, 02:15


Вернуться в Веб серверы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron