СтартФоткиЖелезкиПрограммыШпаргалкиРадиоКонтактСоглашение

Причина

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

Решение

Решением может стать своё маленькое хранилище данных для анализа логов сервера access.log и error.log. Для этого достаточно любого языка программирования (в данном случае php) и базы данных SQLite. Для удобства работы с базой можно использовать инструмент https://sqlitebrowser.org

В общем виде вся процедура работы с данными состоит из следующих этапов:

- создание схемы базы данных с объектами для хранения и управления
- процедура доступа к веб серверу через FTP и копирование лог файлов
- чтение лог файлов и запись в базу данных для последующей очистки и обработки
- очистка, трансформация и уплотнение данных в удобную форму для отчёта
- построение отчётов и анализ результатов

Дальнейшее описание решения будет ссылаться на результат, который можно скачать тут.

Обработка лог файлов может быть запущена в консоли php -f /path_to/etl-access_log-sample.php  и php -f /path_to/etl-error_log-sample.php
Отчёт sample-etl/report/report.html генерирует скрипт php -f /path_to/report-sample.php

Схема базы данных

Будем работать с реляционной моделью, так как в ней можно быстро найти ответы на интересующие нас вопросы.

Где:
- серая таблица UTL_JOB_STATUS необходима для управления и историзации процессов ETL (extract transform load). Например, она не даст дважды запустить процесс и в ней будут находиться все ошибки sql и php
- синии таблицы представляют собой стейдж, т.е. временное хранение данных логов: STG_ACCESS_LOG и STG_ERROR_LOG
- желтые таблицы - это измерения (dimensions): DIM_HTTP_STATUS, DIM_MESSAGE, DIM_REFERRER, DIM_USER_AGENT, DIM_REQUEST, DIM_REQUEST_V_ACT, DIM_REQUEST_V_SCD
- зелёные таблицы - это агрегаты, т.е. сжатые данные. Структура агрегатов строится исходя из вопросов, на которые нужно ответить. FCT_ERROR_DD, FCT_ACCESS_USER_AGENT_DD, FCT_ACCESS_REQUEST_REF_HH

Временное хранение данных

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

Скрипты из примера реализации etl-utilities-sqlite-php/sample-etl/etl-error_log-sample.php и etl-utilities-sqlite-php/sample-etl/etl-error_log-sample.php устанавливают соединение с FTP сервером, забирают файлы логов и записывают данные в соответствующие таблицы.
На этом этапе проще преобразовать IP адреса в цифровую форму. Если подключить источники данных с ISP (internet service provider) и локализацией города или страны, то можно относительно быстро построить ссылки к этим измерениям.

Адрес IP является частью персональной информации, в общем и большинстве случаев, пользы в чистом виде не несёт. Поэтому, после агрегации данных, таблицы временного хранения можно очистить. В результате для набора измерений, а также, если необходимо, для городов и стран, можно хранить цифру - количество IP адресов.

В случае, если необходимо подсчитать количество запросов/страниц/файлов с одтельного IP, то можно организовать измерение с группами. Например, 1-10 запросов, 10-100 и т.д. и считать, сколько IP адресов находится в каждой такой группе.

Очистка и трансформация данных

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

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

Отчёт

Визуальное представление построено с помощью инструмента Bluff tools http://bluff.jcoglan.com/api.html

Для отчёта достаточно таблиц результатов выборки, для чего используются запросы

sample-etl/sql/RPT_ACCESS_USER_VS_BOT.sql,
sample-etl/sql/RPT_ACCESS_ANNOYING_BOT.sql,
sample-etl/sql/RPT_ACCESS_USER_ACTIVE.sql,
sample-etl/sql/RPT_ACCESS_USAGE_HH.sql,
sample-etl/sql/RPT_ACCESS_TOP_REFERRER_REQ.sql и
sample-etl/sql/RPT_ERROR_LAST.sql

Отчёты отображают задуманный результат, теперь можно его интерпретировать.

Анализ результата

Первый график Traffic Users vs Bots.

Показывает, сколько трафика выкачивают с сервера боты и пользователи. В среднем 1 мегабайт в день потребляют боты. Это относительно не много.

Второй результат Annoying Bots.

Показывает самых назойливых ботов. Чаще всего наш сайт посещают роботы яндекса и майкрософта. При этом у яндекса меньший спектр IP адресов и меньше запросов на не существующие страницы: Bad Req./Day - страницы с кодом 404.
Боты майкрософта разнообразны и назойливее яндекса.
Детальный анализ в таблице стейджа показывает, например, что файл robots.txt в день с одного и того же IP адреса запрашивается многократно.

Результатом анализа может служить ограничение доступа роботам.

- Проектам, которые себя называют поисковым индексом, бесплатно собирают ссылки и потом их продают, закрываем доступ.
- В архив интернета без надобности можно не попадать, закрываем доступ.
- Роботов майкрософта и яндекса попросим страницы читать с периодом 5 секунд.

User-agent: ia_archiver
Disallow: /
User-agent: archive.org_bot
Disallow: /
User-agent: MJ12bot
Disallow: /
User-agent: AhrefsBot
Disallow: /
User-agent: dotbot
Disallow: /
User-agent: bingbot
Crawl-delay: 5
User-agent: Yandex
Crawl-delay: 5

Активность пользователей Daily User Activity.

График показывает агрегированные данные по неделям.
User/D - среднее количество посетителей в день, Page/User/D - среднее количество страниц в день на посетителя, File/User/D - среднее количество файлов в день на посетителя.
В среднем имеется 12 посетителей в день с тенденцией роста.
На одного посетителя приходится 2-3 страницы.
Запрашиваемых файлов больше, что логично, т.к. на страницу приходится по несколько картинок и скриптов.

Ссылающиеся сайты Top Referrer.

График показывает количество запросов частых посетителей. Гугл отправляет к нам 1,6 раз в день, прямых ссылок 7,6 в день, остальные не представляют интереса. Возникает предположение, что поиск гугл работает эффективнее, так как сайт опрашивается роботами умеренно, а поисковик присылает больше пользователей, чем другие.

Почасовая активность Hourly Activity.

Данные агрегированы за последние 12 дней. Т.е. это среднее количество страниц и файлов, которые запрашиваются не роботами по часам в сутках. Каждый час в среднем 2 посетителя открывают страницу.

Таблица Error Log показывает последние ошибки. Они происходят редко, но их исправление добавит надёжности и устойчивости сайту.

Вывод

Результат исследования активности сайтов приводит к выводу о непосещаемости многих информационных сайтов в интернете. Поисковые и другие роботы забирают всю информацию и хранят её у себя на серверах. В результатах поиска появляется не только ссылка на ваш ресурс, но и кусок текста, относящийся к поиску. Часто можно сразу увидеть номер телефона и адрес.

Таким образом, часто нет необходимости переходить на сам сайт. Собственно, в этом и состоит суть поисковых ресурсов, иначе никто и не узнает о вас и о сайте.

Этот вывод привёл к идее создания сервиса получения быстрого отчёта активности сайта, загрузив его лог.