Цель и задачи проекта

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

Исходные данные, их обработка и хранение

“Сырые” данные содержатся в текстовых строках журналов доступа. Данные должны быть выделены из журналов и выгружены в SQL-базу данных.

Образец журнала посещений

[21/Jun/2014:00:00:14 +0400] test_host_name.ru xxx.xxx.xxx.xxx "GET /api/settings HTTP/1.1" 200 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)" "uid=2851403290065" "-" [proxy (-) : 127.0.0.1:8080 0.017 200 ] 197 385 0.017
[21/Jun/2014:00:00:14 +0400] test_host_name.ru xxx.xxx.xxx.xxx "GET /barlist HTTP/1.1" 302 "-" "Opera/9.80 (Windows NT 6.1; MRA 8.0 (build 6019)) Presto/2.12.388 Version/12.16" "uid=675491403076418" "-" [proxy (-) : - - - ] 981 356 0.000

Вытягивание и хранение данных

Из каждой строки журнала выделяется и помещается в базу данных следующая информация:

  • Оригинальная строка журнала для проверочных целей.
  • Дата, время и часовой пояс. Хорошо бы, чтобы в БД время уже хранилось в родном для базы формате, чтобы отбор записей по времени можно было проводить на уровне движка БД.
  • IP-адрес.
  • Запрос от браузера. На текущем этапе разбирать адрес запрашиваемой страницы не нужно, но в потенциал такую возможность лучше заложить. Нужно прикинуть, много ли у клиента сложных параметров.
  • Браузер пользователя. Классификация браузеров, ОС и их версий по аналогии с Google Analytics.
  • Версия браузера.
  • ОС пользователя.
  • Версия ОС.
  • ID пользователя.

Реализация “вытягивателя”

Модуль по выделению данных и выгрузке в базу данных может быть реализован на любом *nix-дружеском языке. Модуль должен работать как обособленный компонент, который может запускаться через командную строку с набором параметров, получать исходные журналы доступа, разбирать их и выгружать в базу данных. Предстоит специфицировать, каким образом модуль получает исходные данные, например, копирует сжатые архивы из указанного места через cp/scp/http/ftp или подключается по ssh к веб-серверу заказчика, сжимает там свежие журналы и копирует их посредством scp.

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

Тесты разбора строк?

База данных

В качестве базы данных должен использоваться свободный программный продукт с открытым исходным кодом. Тип базы данных: SQL. Предлагаемый продукт: MariaDB/MySQL (Предложения/комментарии?)

Предстоит продумать структуру таблиц и индексов.

Железо и сервер

В зависимости от потребностей и возможностей заказчика сервер (база данных, модуль для парсинга, модуль для построения отчётов) может быть реализован несколькими способами:

Геокодирование IP-адресов

https://github.com/fiorix/freegeoip (есть открытый API до 10K запросов в час).

Отчёт (черновик)

Статичный ежемесячный отчёт

Отчёт предоставляется в форматах Word и PDF по заданным показателям (см. перечень показателей в разделе “Цели и задачи”) по заранее определённым временным периодам. Отчёт предоставляется ежемесячно.

Интерактивный ежемесячный отчёт

Отчёт в формате веб-страницы с возможностью экспорта в Word и PDF. Пользователь может самостоятельно выбирать временные периоды для отображения (за месяц, последовательность дней), фильтровать данные в отчёте (например, какова статистика по браузерам только среди пользователей из Москвы, или сравнение посещаемости между ядром и неядром). Интерактивность и динамическое построение графиков и таблиц реализуется на основе платформы Shiny (см. [галерею примеров][http://shiny.rstudio.com/gallery/]). Данные в отчёте обновляются раз в месяц.

Интерактивный оперативный отчёт

Аналог интерактивного ежемесячного отчёта, но данные обновляются с задержкой не более 3-х часов. Сервер с отчётом работает в VPS-облаке. Требуется дополнительная настройка сервера клиента для организации автоматического доступа к логам снаружи.

Отчёт Стоимость разработки (т.руб.) Время выполнения (раб.дней) Поддержка (т.р./мес)
Статичный ежемесячный 12 6 2,5
Интерактивный ежемесячный 26 11 3
Интерактивный оперативный 42 15 5

Цены могут быть откорректированы

Прочее

Заказчик получает неисключительное право на использование всего исходного кода, разработанного в рамках проекта.

Поддержка включает в себя только обновление данных, обеспечение функционирования на уровне, достигнутом при первоначальной разработке и оплату аренды оборудования (где необходимо). Доработка сервиса и/или адаптация к изменениям конфигурации веб-сервера заказчика оплачиваются отдельно (почасовая оплата или дополнительная договорённость).