Loading...
X

Зачем и как анализировать логи веб-сервера


Что такое логи Apache

Файлы журналов веб-сервера Apache содержат самую полную информацию о посетителях веб-сайта и запросах, пришедших к серверу. Журналы веб-сервера представляют собой обычные текстовые файлы, в которых хранится информация о сделанных к серверу запросах, в том числе IP адрес, запрошенная страница, статус ответа, информация о ссылающейся страницы (реферер), количество переданных данных, пользовательский агент, дата и время.

Если всё работает нормально, то обычно необходимость в анализе логов отсутствует. К журналам веб-сервера мы обращаемся когда начинаются проблемы, либо для профилактики этих проблем.

С помощью логов Apache можно выловить битые ссылки — найти страницы, на которые ведёт ссылка, но которые отсутствуют на сайте; можно найти IP, User Agent и Referer пользователей, которые создают слишком большую нагрузку на веб-сайт или проявляются странную активность (в случае DoS атак и скликивания рекламы). Анализ журналов даст информацию о профиле посетителей: в какие часы и дни максимальная нагрузка на сервер, какое количество данных передаётся (такую информацию не даст ни один счётчик), из каких стран и городов посетители и прочее.

Кстати, если сравнивать анализ сторонних метрик (например, Яндекс.Метрики) и анализ журналов веб-сервера, то по факту это довольно разные вещи — в логах сервера данных может быть в разы больше, чем покажет сторонняя метрика, поскольку она собирает информацию только со страниц, которые содержат счётчик, из его поля зрения выпадают, например, работа сканеров по поиску скрытых файлов и папок на сервере, а также отправка данных методами HEAD и другими необычными. Метрики не показывают IP адреса пользователей. То есть метрики не могут заменить собой анализ логов если нужно найти источник проблемы. Точно также как логи не заменят сбор статистики с помощью сторонних метрик или установленного не сервере/сайте ПО, поскольку файлы журналов сервера обычно хранятся ограниченное время. Кстати, по этой причине при подозрении на серьёзные эксцессы (взлом сайта или веб сервера), нужно сделать копию файлов журналов, чтобы они не были удалены в процессе ротации.

В этой заметке я покажу несколько способов автоматизированного анализа файлов журналов Apache:

  • онлайн сервис
  • программа для Linux
  • как анализировать логи в Windows

Где взять логи веб-сервера

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

В файловом менеджере для вашего сайта поищите папку logs, у меня эта папка находится рядом с htdocs (в которой размещены файлы сайта). Скорее всего, для каждого сайта будут иметься отдельные лог-файлы.

Как можно увидеть на скриншоте, имеются файлы название которых начинается на access_log и на error_log.

access_log — это логи доступа, которые содержат все запросы, сделанные на сервер: как удачные запросы, так и завершившиеся ошибки. По умолчанию запросы переданные методом GET сохраняются полностью, а запросы переданные методом POST сохраняются только как адрес страницы, куда был сделан запрос — передаваемые данные не сохраняются (на самом деле, можно настроить чтобы они сохранялись, но это скажется на производительности веб-сервера и потребует слишком много места на диске).

error_log — эти файлы содержат только запросы, завершившиеся ошибками.

Таким образом, если вы хотите вручную исследовать журналы, то в первую очередь посмотрите error_log — сюда вынесены все проблемы. Если же вы хотите анализировать логи с помощью специальных программ и команд, то им скармливайте файл access_log — он содержит самую полную информацию, в том числе и об ошибках, которые продублированы в файл error_log.

Также вы можете увидеть архивы .gz — это просто логи за другие дни. Например, в моём случае журналы хранятся за 16 последних дней.

Чем меньше цифра, тем свежее логи, например, access_log.1.gz — это вчерашний лог, а access_log.15.gz — это журнал шестнадцатидневной давности.

Если у вас VPS, то расположение и название файлов зависит от дистрибутива Linux, а также от настроек хостов (виртуальных хостов). Например, по умолчанию в Debian и производных (Ubuntu, Linux Mint, Kali Linux) веб логи храняться в папке /var/log/apache2/, а в Arch Linux в папке /var/log/httpd/.

Онлайн сервис для анализа веб-логов Apache

Пример журнала:

Очевидно, что эти записи весьма объёмны, поскольку содержат сведения об отдельных запросах. Например, если пользователь открывает страницу вашего сайта, на который используется один файл стилей CSS, один JavaScript файл и пять картинок, то в общей сложности к серверу будет сделано восемь запросов (HTML код, CSS код, JavaScript код и 5 запросов для получения изображений). Вся эта информация сохраняется в журналах веб-сервера.

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

Пример такой программы — goaccess. Вообще-то, это программа для Linux — там она устанавливается одной командой. Но не спешите обламываться: во-первых, если немного заморочиться, то можно её установить и в Windows, а во-вторых, есть онлайн сервис, куда вы загружаете свои логи, а он вам выводит полный отчёт.


Начнём с онлайн сервиса, его адрес: https://suip.biz/ru/?act=goaccess (всё абсолютно бесплатно и без регистраций).

Данный онлай сервис извлекает всю возможную информацию и проводит анализ логов Apache.

Для каждого лога Apache выводится такая информация как:

  • сводные данные (количество запросов, количество неудачных запросов, общее количество посетителей, количество запрошенных файлов, объём переданных данных в Гигабайтах, количество ошибок «404 Страница не найдена» и прочее)
  • детальная информация о датах посещений и количестве хитов, посетителей и переданных данных за каждую дату
  • запрошенные файлы с возможностью сортировать список по частоте запросов или по количеству переданных данных
  • статистика запросов с возможностью сортировать список по частоте запросов или по количеству переданных данных
  • запросы, вызвавшие ошибку «404 Страница не найдена»
  • посетители сделавшие наибольшее количество запросов к серверу с информацией о стране и городе (с возможностью сортировки данных ко количеству переданной информации)
  • об операционных системах с разделением на версии
  • о веб-браузерах с разделением на версии
  • о распределении активности на сервере по часам
  • о страницах, с которых пришли посетители
  • о сайтах, с которых пришли посетители
  • поисковые слова с которых пришли из Google
  • HTTP коды статусов (200, 404 и другие)
  • расположение посетителей по странам и населённым пунктам

Поддерживаемые форматы логов:

  • Комбинированный формат логов
  • Комбинированный формат логов с Виртуальными хостами
  • Обычный формат логов
  • Обычный формат логов с Виртуальными хостами
  • Расширенный формат логов W3C
  • Родной формат логов Squid
  • Amazon CloudFront Web Distribution
  • Облачное хранилище Google
  • Amazon Elastic Load Balancing
  • Amazon Simple Storage Service (S3)

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

Как анализировать отчёт goaccess

Всё начинается с OVERALL ANALYZED REQUESTS — обзорная информация об анализе запросов.

В верхней строчки показаны даты в которых были записаны логи. Далее выводится:

  • Total Requests — общее количество запросов
  • Valid Requests — валидные (без ошибок) запросы
  • Failed Requests — запросы, завершившиеся ошибкой
  • Init. Proc. Time
  • Unique Visitors — уникальные посетители
  • Requested Files — сколько раз запрашивались файлы
  • Excl. IP Hits
  • Referrers — количество рефереров
  • Not Found — количество ошибок 404 «Страница не найдена»
  • Static Files — запросы к статичным файлам
  • Log Size — размер загруженного журнала
  • Tx. Amount — количество переданных данных

У меня за пять дней работы только одного веб-сайта передано более 40 Гигабайт данных! Бедный хостинг…

UNIQUE VISITORS PER DAY - INCLUDING SPIDERS — уникальные посетители в день, включая пауков

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

REQUESTED FILES (URLS) — запрошенные файлы

По умолчанию сортировка сделана по Хитам — показаны самые часто запрашиваемые файлы. Вы можете сделать сортировку по количеству передаваемых данных (по Tx. Amount).


Как можно увидеть, больше гигабайта ушло на какой-то шрифт. Почти гигабайт «съела» популярная статья. Если у вас проблемы: ограничение по количеству передаваемых данных, либо по излишней нагрузке на хостинг, то именно исходя из этих данных нужно проводить оптимизацию.

Кстати, если у вас проблемы с безопасностью — подозрение, чтобы сайт был взломан и на него залит бэкдор (шелл), то анализируя к каким файлам часто обращались можно попытаться найти бэкдор.

STATIC REQUESTS — запросы к статичным файлам (картинки, CSS таблицы, JavaScript файлы, просто файлы на сервере)

Здесь аналогично, вы можете посмотреть, какие файлы чаще всего запрашиваются:

И какие из них потребляют больше всего трафика (сортировка по Tx. Amount):

NOT FOUND URLS (404S) — запросы, которые завершились ошибкой

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

VISITOR HOSTNAMES AND IPS — имена хостов и IP адреса посетителей

На самом деле, имена хостов на скриншоте ниже отсутствуют — имеется только информация об IP, стране и городе посетителя.

Здесь вы можете найти IP адреса, которые создают слишком большую нагрузку на сервер. Если на сервере имеется какая-нибудь система кэширования или оптимизации, то самым популярным IP может быть адрес самого сервера — это нормально, не надо его блокировать!

Здесь вы можете определить IP, которые делают неоправданно много запросов: разные программы для просмотра сайтов офлайн, разные пользовательские парсеры или переклинившие боты — всё как на ладони, при необходимости их можно заблокировать по IP.

Можно сделать сортировку по количеству посещений:

Или по количеству переданных данных (на скриншоте видно, что основную нагрузку на себя взяла система кэширования — если бы её не было, то количество переданных данных было не 40 Гигабайт, а запредельным — больше на порядок или на два порядка):

OPERATING SYSTEMS — операционные системы

Статистика посещаемости по операционным системам.

Более подробно по версиям:

У меня довольно много посетителей с Linux:

BROWSERS — браузеры

Популярный на вашем сайте веб-браузеры с подробностью об используемых версиях.


TIME DISTRIBUTION — активность пользователей в разные часы

Показывает в какие часы сколько запросов было сделано и сколько данных отправлено.

Можно сделать сортировку по нагрузке на сервер.

У меня самая большая нагрузка в 8 вечера, в 3 часа дня и в 11 часов ночи.

REFERRERS URLS — ссылающиеся страницы

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

REFERRING SITES — ссылающиеся сайты

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

KEYPHRASES FROM GOOGLE'S SEARCH ENGINE — поисковые запросы по которым пришли из Google

В настоящее время Google (как и Яндекс) шифрует информацию о поисковом запросе по которому пришёл пользователь и не передаёт её сайту.

HTTP STATUS CODES — статусы ответов

TOP HTTP STATUS CODES SORTED BY HITS [, AVGTS, CUMTS, MAXTS]

Код статуса когда всё хорошо — 200. Он означает, что запрашиваемая страница найдена и успешно отправлена пользователю.

Разного рода перенаправления имеют статусы 3xx (Moved Temporarily (redirect)): 302, 304. По идее, при нормальной работе сайта их не должно быть много. Такие перенаправления (если вы их не устанавливали вручную), могут возникать, например, если пользователи приходят на адрес вида http://site и сразу же перебрасываются на https://site — то есть на HTTPS — разберитесь, правильно ли указана каноническая версия сайта. Аналогично с редиректами www.site.ru на site.ru — задайте каноническую версию сайта.

Проверьте, не являются ли редиректы зловредными — например, кто-то взломал ваш сайт и без вашего ведома перенаправляет часть пользователей (например, мобильный трафик) на вредоносные сайты с недобросовестной монетизацией.

В моём случае редиректов аномально много, но проблемы в этом нет — с помощью это следствия особенностей закрытия ссылок (борьба со спамерами).

Ошибки 4xx Client Errors возникают когда запрашиваемая страница не найдена (404 - Not Found) или когда закрыт доступ к разделу сайта (403 — Forbidden). Как я уже сказал, ошибка 404 будет неизбежно появляться из-за разных сканирований — проверьте, чтобы эта ошибка не возникала из-за неправильных/устаревших (например, из-за смены структуры сайта) ссылок.

Ошибка 403 — Forbidden (доступ запрещён) может возникнуть из-за того, что пользователь, например, хотел посмотреть содержимое папки листинг в которой закрыт.

Ошибки сервера 5xx Server Errors: 500 - Internal Server Error и 503 - Service Unavailable — в нормальных условиях вообще не должны возникать. Они появляется, например, из-за неправильно настроенного файла .htaccess, DoS атаки ан сервер. Проверьте, чтобы их было минимум, если их много, разберитесь с причиной возникновения.

GEO LOCATION — в каких странах ваши посетители

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

Есть детальная информация можно выполнить сортировку по различным условиям.

Как анализировать логи Apache в Windows

Как установить GoAccess в Windows

Программа GoAccess создана работать в Linux. Но с помощью Cygwin этот анализатор логов веб сервера можно запустить и в Windows.

Пара слов о Cygwin

Cygwin — это среда, набор программ Linux. Это не виртуальная машина и не полноценный Linux. Но с помощью Cygwin можно использовать очень многие утилиты, инструменты Linux прямо напрямую в Windows. Кстати, если вы хотите начать знакомство с командами Linux, но по каким-то причинам не можете использовать Linux даже в виртуальной машине, то Cygwin станет для вас настоящей находной. Кстати, в Cygwin есть клиент SSH с помощью которого можно без проблем подключаться к удалённым серверам. Вообще там есть большинство распространённых инструментов Linux кроме некоторых, требующих особых условий (например, драйвера или прямой доступ к железу).

Итак, Cygwin — это в любом случае полезная вещь. Особенно для веб-мастера.

Итак, переходим на официальный сайт Cygwin и скачиваем там установщик.

Запустите — установка достаточно простая, вначале просо нажимайте кнопку «Далее». Выберите любое зеркало:

Когда дойдёте до выбора пакетов, то здесь дополнительно нужно выбрать для установки следующие пакеты:

  • libGeoIP-devel
  • libncurses-devel
  • libncursesw10
  • gcc-core (несколько вариантов, выберите gcc-core: GNU Compiler Collection (C, OpenPM)
  • make (много вариантов, выберите из раздела Devel Default пакет make: The GNU version of 'make' utility)
  • automake (много версий, выберите самую последнюю)
  • gettext (много вариантов, выберите из раздела Text Default)
  • gettext-devel
  • automake wrapper (ищите по слову «automake», установите из раздела Devel Default пакет automake: Wrapper for multiple version of Automake)
  • git (много вариантов, выберите из раздела Devel Default пакет git: Distributed version control system)

Например, в поле поиска вставляем имя первого пакета libGeoIP-devel:

Находим его и кликаем на плюсик в квадрате, чтобы раскрыть подробную информацию:

Как видим, по умолчанию статус Skip — что означает, что пакет не предполагается для установки (пропускается). Один раз кликните по слову Skip, чтобы вместо него появился номер версии:

  

Повторите это для всех пакетов.

Завершите установку, дождитесь скачивания и установки компонентов Cygwin.

Оставляем галочки, чтобы был создан ярлык Cygwin.

Теперь для установки GoAccess открываем консоль Cygwin и последовательно вводим там команды.

Обратите внимание, что консоль имитирует командную строку Linux, то есть там не работает для вставки сочетание клавиш Ctrl+c (точнее говоря, работает, но имеет другое значение). Поэтому для вставки используйте сочетание клавиш Shift+Insert, либо вставляйте через контекстное меню, для этого наведите курсор на консоль, нажмите правую кнопку мыши и выберите там Paste.

git clone https://github.com/allinurl/goaccess.git
cd goaccess
autoreconf -fiv
./configure --enable-utf8 --enable-geoip=legacy
make
make install

Чтобы проверить, что всё прошло удачно, выполните команду:

goaccess

Если всё прошло хорошо, то будет показана справка по программе:

Cygwin живёт в своём мирке и у него своя собственная папка за пределы которой он не выходит. Разместите лог файл для анализа в папку C:\cygwin64\home\Имя_Пользователя\. В ней Имя_Пользователя замените на настоящее имя пользователя, например, у меня пользователя компьютера зовут Alex, тогда я размещаю лог файл в папку C:\cygwin64\home\Alex\.

Пример запуска GoAccess в Windows

После того, как файл помещён в нужную папку, возвращаемся в консоль Cygwin и выполняем там команду для перехода в домашнюю директорию пользователя:

cd ~

Также выполните команду для очистки от ненужных файлов:

rm -rf goaccess

Перед каждой работой GoAccess в Cygwin, выполняйте там команду (это важно!):

export LANG='en_US.UTF-8'

Следующей командой мы увидим, какие файлы имеются в текущей папке:

ls -l

Как можно увидеть, у меня там только один файл, который называется biglog — это и есть тот самый веб журнал, который я хочу анализировать.

Простейший запуск программы:

goaccess лог_файл

Где вместо лог_файл вставьте имя файла с веб логами. Например:

goaccess biglog

Программа задаёт вопрос, какой формат у моего файла.

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

Я выбираю NCSA Combined Log Format — подходит для большинства случаев работы с Apache.

Когда программа закончит свою работу, то она выведет результат:

Для перехода по разделам используйте клавишу TAB, для возврата к предыдущему разделу нажмите TAB+SHIFT, чтобы развернуть список нажмите курсорную клавишу вправо.

Если всё получилось, попробуйте также запуск программы со следующими опциями:

goaccess лог_файл --log-format=COMBINED -i -m

Эти опции задают формат файла лога (--log-format=COMBINED), поэтому программа его больше не спрашивает, включают подсветку активной панели (-i) и поддержку мыши (-m).

Вы также можете создать HTML файл, который можно открыть в веб-браузере — очень удобно для анализа тем, кто неуверенно себя чувствует в консоли. Для этого выполните команду вида:

goaccess ФАЙЛ_ЖУРНАЛА --log-format=COMBINED --output=file.html

В которой вместо ФАЙЛ_ЖУРНАЛА вставьте имя вашего файла с веб логами. Например, у меня этот файл называется biglog, тогда моя команда следующая:

goaccess biglog --log-format=COMBINED --output=file.html

Когда программа закончит свою работу, то в папке C:\cygwin64\home\Имя_Пользователя\ будет создан файл file.html, который можно открыть любым веб-браузером.

Если вы никуда не торопитесь (или небольшой файл лога, то можете добавить к этой команде опцию -d для преобразования IP адресов в имена хостов — дополнительная информация (хотя работает довольно медленно).

goaccess access_log.1 --log-format=COMBINED --output=file.html -d

Смотрите также:


Билеты на автобусы, паромы и поезда, в том числе стыковочные маршруты:

Авиабилеты на международные и местные направления по минимальным ценам:

Рекомендуется вам:


Buy Me a Coffee

Leave Your Observation

Ваш адрес email не будет опубликован. Обязательные поля помечены *

wp-puzzle.com logo