[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Web - технологии / Серверы /

Логи в Apache


Каждому из нас хочется побыть "большим братом" и последить за своими посетителями. Это можно делать по-разному: поставить счетчик, например, HotLog, поставить особый скрипт, ну а некоторые делают это с помощью логов Apache. Да-да, вы не ослышались, Apache тоже ведет логи.

На практике необходимо понять значение всего двух директив: LogFormat и CustomLog. Есть еще директива ErrorLog, но лично я использую лог ошибок только для просмотра последних строчек, когда Apache не пускается. Все-таки скажу несколько слов о ErrorLog.

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

ErrorLog logs/error_log



Практически никак не настраивается, однако есть важная директива LogLevel. Она дает указания серверу писать или не писать в лог ошибки различной степени тяжести. Например, директива

LogLevel emerg



Заставит сервер жаловаться только на самые критические проблемы, когда сервер не запускается. Далее параметры по убывающей: alert, crit, error, warn, notice, info и, конечно же, мой любимый

LogLevel debug



При котором вам будет рассказано даже о том, что сервер все-таки открывает в данный момент файл конфигурации :)

Таким образом, если вам нужны логи ошибок, то в httpd.conf следует указать директиву ErrorLog с параметром "имя лога" (путь считается относительно ServerRoot) и LogLevel с параметром "степень точности". Далее все на вашей совести :)

Теперь о том, что считаю важным я: Combined Logs. Эти логи повествуют о том, кто, когда и зачем отправлял запросы к серверу. Правда, интересно? Здесь еще две директивы: LogFormat и CustomLog. Покопайтесь в каком-нибудь httpd.conf и вы обязательно увидите там что-нибудь типа

LogFormat "%h %l %u %t "%r" %>s %b" common CustomLog logs/access_log common



Хех, все понятно? Сейчас объясню что это значит. LogFormat принимает два параметра: описание формата лога и название этого формата. Как видите, лог, состоящий из "%h %l %u %t "%r" %>s %b" называется common. А что значат закорючки, читайте тут:

%h - IP клиента. Кстати, это запросто может быть и ип его прокси.

%l - это что-то непонятное, касающееся идентификации клиента по RFC 1413. Кстати, апач не пытается ее определить, если только директива IdentityCheck не установлена в On

%u - то, что было введено в качестве имени пользователя а HTTP-авторизации. То же самое, что и $HTTP_AUTH_USER :)

%t - время поступления запроса. В комментариях не нуждается.

%r - строка запроса клиента, например "GET /xxx.gif HTTP/1.1". Обычно заключается в кавычки, но поскольку кавычки - спецсимволы, они предваряются бэкслэшами - . Таким образом, то, что будет выглядеть в логе как строчка в кавычках, оформляется так: "%r"

%>s - код ответа сервера клиенту.

%b - размер ответа клиенту. В байтах.

%{Referer} - адрес страницы, откуда пришел посетитель.

%{User-agent} - тип браузера посетителя. Этот и предыдущий параметр тоже обычно указывают в кавычках, как и %r

Эти параметры можно комбинировать в любом порядке и в любом количестве. Захотите определять только IP посетителей - пишете так:

LogFormat "%h" iponly



Вот и определен новый формат лога. В общем, комбинируйте как хотите. Но логи эта директива не создает. Чтобы сервер начал писать лог, надо потребовать этого директивой CustomLog, которая принимает два параметра: имя файла лога и его тип. Таким образом, чтобы записывать IP клиентов, надо добавить еще и такую строчку:

CustomLog logs/iponly.log iponly



И только после этого лог начнет нормально вестись. Кстати, популярным считается стандарт "combined log", описывающийся так:

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



Как видите, довольно информативно. А теперь на минуту представьте себе, что ваш сервер обрабатывает около миллиона запросов в день. И вам охота вести несколько логов. Ну это обычное явление: сколько скажете раз CustomLog, столько логов и создастся, а ну как вам захочется всех поисковиков, ищущих robots.txt писать в отдельный лог? Ладно. Рассказываю.

Есть еще такая полезная директива SetEnvIf (или SetEnvIfNoCase - то же самое, но без учета больших/маленьких букв), она позволяет в зависимости от условия определять переменные среды. Например:

SetEnvIf Request_URI "^robots.txt$" crawler



После этого переменная env будет равняться "crawler". Но это еще не все! В зависимости от значения этой переменной вы можете делать запись в разные логи! Вот так:

CustomLog logs/crawlers combined env=crawler CustomLog logs/clients combined env=!crawler



Вот так, нашему апачу палец в рот не клади :) Не буду рассказывать почему robots.txt так странно написано, называется это регулярные выражения, а почитать про них можно либо в учебнике, либо в странице мануала перла по имени perlre. Вот так: man perlre. Под юниксом, конечно :)

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

CustomLog "|/usr/bin/gzip -c >> /var/log/access_log.gz" common



Все под юниксом :) Просто потому, что если у вас апач на винде, то логи вести незачем - врядли она у вас сервером работает %)

P.S. Большая часть этого материала - вольный перевод соотвествующих статей из Apache Manual. Он лежит здесь: http://httpd.apache.org.

P.P.S. Счастья вам и радости!

P.P.P.S. Ах, да... удобно, если надо что-то проверить в работе сервера, следить за логом в "реальном времени", вот так:

$ tail -f /etc/httpd/logs/logfile




Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Web - технологии / Серверы /

Сервер отвечает...
23-12-2010   

Коды состояний обычно генерируются Web-серверами, но иногда это могут делать и CGI-сценарии, CGI-сценарии генерируют собственные заголовки вместо тех, которые должен выдавать сервер. Коды состояний группируются следующим образом:... подробнее

Кол. просмотров: общее - 2660 сегодня - 1

Преобразование ссылок с помощью Apache
12-05-2010   

Допустим, у вас есть работающий веб-сайт, состоящий из большого количества статических html-страниц. Целое шагает хорошо, но вдруг в какой-то момент вы решаете усовершенствовать работу веб-сайта и добавляете динамические скрипты: в результате страничка вестей ныне доступна по ссылке http://www.site.com/cgi-bin/news.cgi вместо прежней http://www.site.com/news.html, а каталог, в котором хранились страницы с описанием российских регионов, радикально перекочевал в динамику... подробнее

Кол. просмотров: общее - 3003 сегодня - 1

Настройка Apache
12-05-2010   

Чтобы использовать Apache Configuration Tool (Инструмент настройки Apache) требуется запустить систему X Window под именем root. Запустить Apache Configuration Tool можно следующим способами... подробнее

Кол. просмотров: общее - 2705 сегодня - 1

Классификация статус-кодов HTTP
19-04-2010   

Классификация статус-кодов HTTP 1ХХ - Информационное. Запрос принят, процесс продолжается... подробнее

Кол. просмотров: общее - 2769 сегодня - 0

Установка IIS 7.0. IIS в Windows Vista
18-04-2010   

IIS 7.0 доступно и в Windows Vista почти со всеми устройствами IIS 7.0... подробнее

Кол. просмотров: общее - 2820 сегодня - 0



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects