В данной статье описан пошаговый мануал по скачиванию логов с сервера, их объединении и парсинге с помощью Python, а также формирование необходимых отчетов с последующей отправкой в Telegram. Подробные комментарии приведены в коде соответствующих скриптов.В предыдущей статье “Набор Python-скриптов для автоматизации seo задач” я уже затрагивал тему анализа access-логов сайта в целях seo-оптимизации. В данной статье не будет подробного описания, что такое логи и для чего их анализировать. В качестве теории приведу несколько ссылок на ресурсы, которые встречал за последнее время:Анализ логов сайта с помощью Power BI: пошаговая инструкцияподборка статей Log Analyzer на сайте https://jetoctopus.comАнализ логов сервераДанный подход будет полезен для изучения логов больших сайтов (от 1 млн. строк). Преимущества подхода: делаем свой бесплатный инструмент с кастомными отчетами.Работа над логами будет проходить в несколько этапов:Скачивание отчетов и их разархивированиеОбработка log-файлов, формирование csv для последующего анализа. Построение отчетовНастройка cronОтправка отчетов в Telegram (Отправка по команде. Отправка по расписанию)Каждый этап вынесен в отдельный скрипт, который отрабатывает в установленное время на выделенном сервере по cron. Ссылка на проект https://github.com/zilista/access_logs_analitics.git Скачивание отчетов и их разархивированиеЛоги анализируемого сайта в моем случае хранятся на выделенном сервере в виде 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».Материалы по теме:https://mastergroosha.github.io/telegram-tutorial/docs/lesson_01/https://habr.com/ru/post/448310/https://habr.com/ru/post/462905/Отправка по командеВ скрипте бот слушает текстовые команды в бесконечном цикле и в ответ отправляет отчеты в чат по 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 запросом.А чтобы добавили вы?#selectel_инструкция
Владислав , зачем это ?
Ведь есть джетоктопус.
Также в статье лучше рассказать как использовать полученные данные , а не то, как их получить
Согласен, инструменты есть, особенно платные. Но в данном случае интересно было решить задачу своими силами.