Регистрация запросов с таймингом - PullRequest
3 голосов
/ 20 мая 2011

Каков наилучший способ для регистрации запросов http для веб-приложения, включая запросы ajax, чтобы я мог позже вернуться и запросить «Я хочу знать, сколько раз был сделан этот запрос, и сколько времени потребовалось для его завершения» в среднем "или" покажи мне 5 самых популярных запросов по времени "

Будете ли вы использовать отдельную базу данных из текущей производственной базы данных для регистрации этих вещей, чтобы предотвратить все эти вставки, вызывающие замедление ввода-вывода, или это в конечном итоге не окажет большого влияния?

Вы бы суммировали запросы, а затем передавали их в БД, или вы делали бы одну вставку для каждого запроса?

Есть ли лучший способ добавить этот запрос в журнал с указанием времени, помимо включения каждого обработчика запросов в логику приложения, например:

start = CurrentTime()
/* request handler code */
end = CurrentTime()
Insert(requestName, start, (end - start))

Ответы [ 3 ]

4 голосов
/ 28 мая 2011

Вы должны быть в состоянии использовать журналы вашего веб-сервера для этой цели.В журналах Apache и IIS записывается URL-адрес, строка запроса, код ответа и продолжительность.Если запросы AJAX получают данные через HTTP POST, вам нужно изменить конфигурацию веб-сервера, чтобы захватить эти данные, если это важно для вас.Тогда лучшим инструментом, который я нашел для анализа журналов, является Анализатор журналов Microsoft , который отлично работает с большими файлами с синтаксисом SQL для вычисления ответов на вопросы, которые вы задаете.

Однако, если вы намереваетесь развернуть свое собственное, используйте какую-то локальную регистрацию.И используйте каркас журналирования - такой как log4J - который достаточно умен, чтобы буферизовать записи на диск, чтобы минимизировать ввод-вывод, свернуть файлы журнала и удалить старые файлы.Это более масштабируемый подход для кластерных серверов, в противном случае каждый из них постоянно обращается к базе данных.Если вы хотите поместить данные в таблицу, сделайте ее пакетной, например, раз в час или в день.

2 голосов
/ 23 мая 2011

Выглядит как отличный вариант использования для Google Analytics (в частности, отслеживание событий ).

Если это не вариант, подумайте о масштабируемости заранее:

  1. Не входите в систему со страницы сервера, которую вы обслуживаете, так как это может в конечном итоге работать против кэширования.Используйте сценарий или изображение 1x1 для добавления параметров, и они работают в отдельном (не кэшированном) процессе.

  2. Избегайте ударов вашего жесткого диска, если вы в конечном итоге сделаете его DB-основан.Используйте хранилище на основе памяти для хранения статистики по мере их поступления и периодически сохраняйте ее содержимое в вашей базе данных.(Напомним, что Google Analytics был перегружен, когда Google первоначально открыл его.)

1 голос
/ 26 мая 2011

Если ваша цель состоит в том, чтобы просто отслеживать синхронизацию запросов и сохранять их в БД, но вы не хотите, чтобы вставки потенциально задерживали ваши запросы, тогда вам следует использовать БД, поддерживающую высокоскоростные вставки, такие как MongoDB .Если вы настроите строку подключения на строгий режим = выключен, тогда вставки будут в основном асинхронными.

Вот хорошая отправная точка:

NoSQ LMovement, LINQ и MongoDB

Если вы делаете это только в ASP.NET MVC, то вы можете объединить его с фильтром настраиваемых действий и извлечь его из кода контроллера.Я полагаю, что вы также можете добиться этого с помощью специального модуля ASP.NET и получать все запросы (даже не -ASP.NET) в IIS 7+.

Если NoSQL / MongoDB не ваша вещь, вы можетеиспользуйте SqlCommand.BeginExecuteNonQuery для вставок вместо того, чтобы делать это блокирующим вызовом.Если вы вставляете в ту же БД, что и рабочая, вы можете вызвать некоторое противоречие.

...