Конкурс инструкций

Access-логи сайта для seo: автоматический анализ и отправка отчетов в Telegram

В данной статье описан пошаговый мануал по скачиванию логов с сервера, их объединении и парсинге с помощью Python, а также формирование необходимых отчетов с последующей отправкой в Telegram. Подробные комментарии приведены в коде соответствующих скриптов.

В предыдущей статье “Набор Python-скриптов для автоматизации seo задач” я уже затрагивал тему анализа access-логов сайта в целях seo-оптимизации. В данной статье не будет подробного описания, что такое логи и для чего их анализировать. В качестве теории приведу несколько ссылок на ресурсы, которые встречал за последнее время:

Данный подход будет полезен для изучения логов больших сайтов (от 1 млн. строк). Преимущества подхода: делаем свой бесплатный инструмент с кастомными отчетами.

Работа над логами будет проходить в несколько этапов:

  1. Скачивание отчетов и их разархивирование
  2. Обработка log-файлов, формирование csv для последующего анализа. Построение отчетов
  3. Настройка cron
  4. Отправка отчетов в Telegram (Отправка по команде. Отправка по расписанию)

Каждый этап вынесен в отдельный скрипт, который отрабатывает в установленное время на выделенном сервере по cron.

Скачивание отчетов и их разархивирование

Логи анализируемого сайта в моем случае хранятся на выделенном сервере в виде gz архивов.

Представление логов на сервере

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

Задача данного скрипта каждый день в 23:55 скачивать с сервера и разархивировать логи за последние 7 дней.

Список разархивированных логов

Ссылка на скрипт – download_unzip_logs.py

Обработка log-файлов, формирование csv для последующего анализа. Построение отчетов.

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

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

В результате работы данного скрипта получаем csv файл с распарсенными логами (в моем случае анализируемый файл получился 644 MB) и набор сохраненных отчетов, которые будем использовать в дальнейшем для отправки.

Примеры отчетов

Посещение всего сайта по дням YandexBot

Посещение страниц определенного раздела со статус-кодом 200 по дням YandexBot

Общее распределение статус кодов по выбранному списку ботов

Распределение статус кодов 4xx-5xx YandexBot за весь период

Ссылка на скрипт – create_log_files.py

Настройка cron

Для ежедневного обновления файлов и отчетов настраиваем работу скриптов по cron. Настройки cron для 2-х предыдущих скриптов:

SHELL=/bin/bash #PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin PATH=/home/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin 55 20 * * * /home/v.medvedev/Logs/download_unzip_logs.py > /tmp/out_log 2>&1 30 1 * * * /home/v.medvedev/Logs/create_log_files.py > /tmp/out_log 2>&1

На данном этапе важно задать PATH вашего виртуального окружения и правильно определить время, в которое будут отрабатывать скрипты. Предварительно необходимо сделать скрипты исполняемыми.

P.S:

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

Отправка отчетов в Telegram

Для отправки отчетов будем использовать библиотеку pyTelegramBotAPI. Для работы будет достаточно примеров из документации. Ниже указаны два варианта отправки сформированных отчетов:

  • Отправка по команде
  • Отправка по расписанию

Предварительно для работы потребуется создать telegram бота и получить токен. Для этого используем BotFather и команду «/newbot».

Материалы по теме:

Отправка по команде

В скрипте бот слушает текстовые команды в бесконечном цикле и в ответ отправляет отчеты в чат по id. Чтобы узнать id чата, после запуска скрипта и отправки стартового сообщения, выведите ответ командой:

print(message.chat.id)

Для работы бота будем использовать обработчик текстовых сообщений. Внутри функции get_text_messages пропишем if-else условия для обработки необходимых команд.

В финале запустим скрипт на сервере в фоновом режиме:

nohup python3 -u send_telegram.py > nohup.out

Ссылка на скрипт – send_telegram.py

Отправка по расписанию

В дополнение к отправке отчета по требованию можно настроить отправку важных отчетов по расписанию. Для этого будем использовать библиотеку schedule. Для отправки воспользуемся командой:

schedule.every().day.at('07:00').do(send_text)

Скрипт также запускаем в фоне.

nohup python3 -u schedule_send_telegram.py > nohup.out

Ссылка на скрипт – schedule_send_telegram.py

Варианты расширения функционала

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

Также можно расширить функционал скрипта следующими возможностями:

1. Добавление информации о визитах с помощью API-метрики. Чтобы скачать данные из метрики полностью, можно воспользоваться скриптом.

Примеры отчетов:

  • Визиты ботов на трафиковые/не трафиковые страницы
  • Распределение количества визитов в зависимости от трафика.

2. Установка на сервере консольной версии Screaming Frog SEO Spider и парсинг сайта по расписанию/разово. Аналогично п.1 добавляем информацию к имеющимся данным, строим интересующие отчеты о:

  • Не посещаемых страницах ботом
  • Посещаемых ботами страницах, но не найденных в структуре

3. Проверка поисковых ботов обратным DNS запросом.

А чтобы добавили вы?

0
2 комментария
Сергей Ерхов

Владислав , зачем это ?

Ведь есть джетоктопус.

Также в статье лучше рассказать как использовать полученные данные , а не то, как их получить 

Ответить
Развернуть ветку
Влад Медведев
Автор

Согласен, инструменты есть, особенно платные. Но в данном случае интересно было решить задачу своими силами. 

Ответить
Развернуть ветку
-1 комментариев
Раскрывать всегда