Анализ журналов Web-серверов. Синтаксический анализ и фильтрация

При оценке новых методов повышения эффективности Web требуется особое внимание уделять сбору данных о рабочих нагрузках компонентов Web. Однако журналы Web-серверов могут содержать ошибки и несоответствия, которые осложняют анализ данных. Кроме того, результаты анализа любого серверного журнала могут быть недостаточно репрезентативны, чтобы оцепить по ним ожидаемую производительность других серверов. Анализ множества журналов различных Web-сайтов помогает отделить общие тенденции, связанные с производительностью, от характеристик трафика, свойственных конкретному сайту. На первый взгляд, выполнение одного и того же анализа для множества серверных журналов не труднее, чем анализ одного журнала. Однако Web-серверы ведут журналы в различных форматах с разным количеством и типами полей, о чем говорилось в главе 9 (раздел 9.3). Часы различных серверов обычно не синхронизированы друг с другом, что приводит к разночтению меток времени из различных журналов. Кроме того, синтаксис полей может варьироваться от одного сайта к другому. Преобразование серверных журналов к универсальному формату — эффективный способ скрыть эти детали от программного обеспечения, осуществляющего анализ данных.

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

Хотя большинство нолей и записей выводятся корректно, изредка могут возникать проблемы, связанные с конкретной реализацией Web-сервера. Некоторые Web-серверы порождают несколько процессов для одновременной обработки HTTP-запросов, о чем говорилось в главе 4 (раздел 4.4). Эти процессы конкурируют при записи данных в журнал сервера. Если сервер не осуществляет специальных мер, некоторые записи могут накладываться друг на друга. Несмотря на возможные ошибки, сервер может разрешить процессам осуществлять занись независимо, чтобы избежать затрат, связанных с координацией операций заниси. Корректное формирование серверных журналов не обязательно является существенно важным при обработке HTTP-запросов. Даже если сервер пытается упорядочить операции регистрации в журнале, ошибки при реализации могут привести к появлению спорадических ошибок. Аналогично, в ряде случаев сервер может не присваивать значений всем без исключения нолям в записи, что способно привести к ошибочному результату. Как следствие, большие серверные журналы часто содержат ошибки. Программа, осуществляющая синтаксический анализ журналов, должна нроверять заниси на наличие ошибок.

Записи, которые приводят к ошибкам в ходе синтаксического анализа, могут быть просмотрены вручную, или же нрограмма может автоматически пропускать занись и переходить к следующей. В некоторых случаях более тщательное изучение записи может выявить источник проблемы. Например, URL может содержать символ новой строки (ctrl-M), который приводит к ошибочному обнаружению конца строки синтаксическим анализатором. Запись может быть исправлена путем удаления символа новой строки. Другая проблема связапа с длиной URL. URL может иметь неограниченно большую длину. В связи с этим любое предположение о максимальной длине URL может оказаться неверным; на практике иногда встречаются URL длиной более 4000 символов. В некоторых языках программирования процедуры стандартного ввода/вывода подразумевают, что память для каждой входной переменной выделяется заранее (например, функция scanf() в языке программирования С). Если длина URL превышает ожидаемую, процедура синтаксического анализа осуществит запись за пределы выделеииого пространства памяти, что приведет к повреждению других данных в памяти. Ошибки подобного рода особенно трудно обнаружить и исправить. Чтобы не допустить возникновения таких проблем, программа может выделять пространство для каждой строки в процессе синтаксического анализа записи. Альтернативой является наличие в программе отдельной процедуры для обработки длинных URL в случае их обнаружения.

Другая практическая проблема связана с различием формата полей меток времени в различных серверных журналах. При анализе набора реальных серверных журналов нами было выявлено не менее 14 различных способов представления даты и времени. Создание программы для синтаксического анализа и интерпретации различных форматов — хлопотное дело. Кроме того, такая программа, скорее всего, будет иметь внутренние ошибки. Очепь полезно иметь отдельную библиотеку процедур для синтаксического анализа и преобразования нолей меток времени в серверных журналах. Такие процедуры могут быть тщательно отлажены и многократно использоваться множеством различных приложений. Кроме того, процедура может преобразовывать метку времени к универсальному представлению времени, соответствующему, например, количеству секунд, прошедших с полуночи 1 января 1970 г. (представление времени в UNIX). Это позволит остальным программам игнорировать различия в представлении времени в различных журналах. Однако это не решает проблем, связанных с различием показаний часов для различных Web-серверов, которые создают эти журналы. На практике довольно трудно установить соотношение значений времени между различными журналами. Кроме того, назначение меток времени в журнале может быть различным для различных серверов, о чем говорилось ранее в главе 9 (раздел 9.3.1).

После синтаксического анализа заниси и нроверки сиитаксических ошибок, каждое поле просматривается на предмет семантических ошибок. Каждому нолю должен соответствовать определенный диапазон значений. Например, коды ответов HTTP должпы представлять собой трехзначные целые числа, начинающиеся с 1, 2, 3, 4 или 5, а все метки времени должны лежать внутри интервала времени, соответствующего времени существования журнала. Записи с неправильными нолями могут бьггь просмотрены вручную и удалены. Тщательный контроль ошибок также упрощает процесс написания и отладки программ для анализа измеренных данных. Помимо этого, операции над журналами в универсальном формате позволяют таким программам игнорировать различия в исходном представлении каждого серверного журнала. Например, для анализа может быть использована усеченная версия журнала, содержащая имя клиента (IP-адрес), запрашиваемый URI, код ответа и время запроса.

Источник: Web-протоколы. Теория и практика. — M.: ЗАО «Издательство БИНОМ», 2002 г. – 592 c.: ил.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100