Вентили управляют потоком

В эту базовую структуру сервера можно добавлять т. н. вентили - компоненты, которые отслеживают или фильтруют поток информации на различные компоненты сервера. Вентили доступа к лог-файлам, например, записывают в лог файл запросы, которые обрабатывает сервер, и здесь удобно то, что область действия запросов, записываемых в лог, зависит от уровня, на котором они находятся в иерархии компонентов. Например, вентиль доступа к лог-файлу, помещенный в движок, запишет все запросы к этому движку. Вентиль логирования, помещенный в хост, запишет все запросы к этому хосту, а (ну вы поняли идею) вентиль логирования, помещенный в контекст, запишет только запросы к данному web-приложению. Вентили логирования показаны красными стрелками.
Давайте рассмотрим несложный пример вентиля для доступа к лог-файлу:
<Valve className=”org .apache.catalina.valves.AccessLogValve” directory=”logs” prefix=”localhost_access_log.” suffix=”.txt”
Шестерка и семерка
На нашем уроке мы пользуемся Tomcat 6, потому что эта версия находится в репозиториях CentOS, но сейчас все силы брошены на Tomcat 7, разрабатываемую с середины 2010 года. По сравнению с 6-й версией, в 7-й реализованы более свежие версии спецификаций сервлета и JSP. Также большее внимание уделено обнаружению и предотвращению утечек памяти (Tomcat долго ругали за утечки памяти при перезагрузке web-приложений). Есть поддержка, чтобы включить внешний контент прямо в web-приложение, и повышена безопасность приложений Manager и Host Manager.
pattern=”common” resolveHosts=”false”/>
Атрибуты prefix [префикс] и suffix [суффикс] задают начальную и конечную части имени лог файла. Для получения полного имени файла Tomcat помещает между ними дату. Поэтому полное имя может быть, например, таким: localhost_access_log.20130318. txt. Атрибут pattern [шаблон] задает структуру данных, записываемых в лог файл. Шаблон “common” - это общий формат записи, который также используется в Apache и многих других web серверах. Это шаблон по умолчанию, и существует множество сторонних утилит для анализа и генерации отчетов по лог файлам, записанным в этом формате. Формат записи можно указать и детально, с помощью обозначений, называемых идентификаторами шаблонов. Их довольно много, но чтобы вы просто поняли идею, взгляните на строку pattern=”%a %t”
Она запишет в лог IP адрес клиента, а также дату и время.
Если вы еще настроены следовать за мной, добавьте вентиль доступа к лог файлу в /etc/tomcat6/server.xml. Это довольно легко, так как там уже есть один - он просто закомментирован (чтобы найти его, просто поищите AccessLog Valve). Обратите внимание на расположение вентиля. Он находится внутри одного и единственного хоста <Host> с именем “localhost”, поэтому будет записывать в лог только обращения к этому сайту. Удалите символы комментария, сохраните файл и перезапустите сервер:
# service tomcat6 restart Теперь проверьте, существует ли лог файл. Он должен быть в каталоге /var/log/tomcat6. Изначально он будет пустым, поэтому воспользуйтесь обычным приемом сис. админа и запустите на нем команду “tail f”, чтобы просматривать его содержимое в реальном времени. Попробуйте зайти на сайт (сгодится любая страница - хоть главная, хоть с документацией) и проверьте, появляются ли в лог файле строки. Вот пример того, что можно увидеть. Эта строка также иллюстрирует общий формат записи лог файла:
0:0:0:0:0:0:0:1 [23/Mar/2013:20:47:08 +0000] “GET /RELEASE NOTES.txt HTTP/1.1” 200 8669
Обратите внимание на адрес обратной петли в формате IPv6 в первом поле. (Сейчас Linux предпочитает по возможности разрешать имена в адреса IPv6, а не в IPv4.) Вы также увидите временную отметку запроса, первую строку запроса (из которой можно понять, какой ресурс запрашивался), код ответа HTTP (200 означает «успешно») и число байт, возвращенных в коде ответа HTTP, которое в данном случае соответствует размеру файла RELEASENOTES.txt.