CoderCastrov logo
CoderCastrov
Парсер

Как добавить Google Logger в Scrapy на Python

Как добавить Google Logger в Scrapy на Python
просмотров
5 мин чтение
#Парсер

Узнайте, как лучше использовать журналы парсинга с помощью Google Logging

Image by kreatikar on Pixabay

Важно вести запись о проектах парсинга с помощью журналирования, чтобы мы могли знать, какие парсеры работают должным образом, а какие нет. Неудобно записывать журналы в файлы и пытаться анализировать обычный текст позже. Лучше отправлять журналы в облако, такое как Google Logging. Таким образом, мы можем иметь централизованное управление журналами и создавать мощные метрики мониторинга на основе журналов, которые затем можно использовать в приложениях визуализации, таких как Grafana.


Основная регистрация в Python

Регистрация в Python выполняется с помощью встроенного модуля logging. Мы можем выполнять регистрацию с помощью модуля logging напрямую, используя корневой регистратор. Однако рекомендуется сначала создать регистратор, а затем выполнять регистрацию с его помощью. Таким образом, журналы для разных приложений или модулей можно отличить по именам регистраторов.

Есть несколько моментов, которые следует отметить в этом простом примере:

  • Создается регистратор с пользовательским именем регистратора, которое может быть именем вашего приложения или просто именем модуля.
  • Создается потоковый обработчик и добавляется в регистратор. Это может показаться избыточным, потому что регистрация по умолчанию выполняется в консоль. Однако по умолчанию журналы отправляются в sys.stderr. В этом примере они изменены на sys.stdout, что может быть предпочтительным в некоторых случаях.
  • Необходимо установить уровень для регистратора и обработчика отдельно. Особенно уровень регистратора по умолчанию - warning. Он должен быть установлен таким же или ниже, чем у обработчика, чтобы журналы могли быть отправлены обработчику.

Запись логов в Google Cloud Logging на Python

Помимо записи логов в консоль или файл с помощью модуля logging, мы можем записывать логи в Google Cloud Logging в наших приложениях на Python. Таким образом, мы можем иметь централизованное управление логами и создавать мощные метрики мониторинга на основе логов, которые затем могут использоваться в приложениях для визуализации, таких как Grafana.

Чтобы отправлять логи в Google Logging на Python, нам нужно установить соответствующую клиентскую библиотеку google-cloud-logging. Рекомендуется устанавливать сторонние библиотеки в виртуальной среде, чтобы они не влияли на системные библиотеки:

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

После загрузки ключа служебной учетной записи нам нужно установить его путь в магическую переменную окружения GCP GOOGLE_APPLICATION_CREDENTIALS:

Теперь мы можем записывать логи в Google Logging в нашем приложении на Python:

Ключевые моменты приведенного выше фрагмента кода:

  • Нам не нужно аутентифицировать клиент здесь, потому что магическая переменная окружения GCP GOOGLE_APPLICATION_CREDENTIALS установлена для использования ключа служебной учетной записи.
  • С помощью метода setup_logging() к корневому регистратору присоединяется обработчик регистрации по умолчанию Stackdriver. Теперь, когда мы регистрируем что-либо с помощью встроенного модуля logging, с пользовательским регистратором или без него, логи будут отправляться в Google Logging также. Обратите внимание, что логи также будут выводиться на экран, потому что обработчик потока по умолчанию не затрагивается.
  • Мы можем создать пользовательский Google Logger, который регистрирует обычный текст с помощью log_text() или структурированные данные JSON с помощью log_struct() соответственно.

Когда код выше запускается, мы можем проверить логи в Проводнике логов в консоли GCP:

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

Отправка логов Scrapy в Google Logging

Теперь, когда мы знаем, как отправлять логи в Google Logging в общем, давайте посмотрим, как записывать логи Scrapy в Google Logging, что может быть немного сложно, потому что нам нужно понять, как работает логирование в Scrapy.

Мы будем использовать тот же простой проект Scrapy, который использовался в следующих двух постах:

Рекомендуется проверить эти два поста, если вы новичок в Scrapy.

Обычно у нас есть некоторые настройки на уровне проекта для проекта Scrapy в файле [<папка-проекта>/settings.py](https://github.com/lynnkwong/scrapy-google-logger/blob/main/scraping_proj/settings.py), такие как LOG_LEVEL, LOG_FORMAT, LOG_FILE и т. д. Чтобы получить доступ к этим настройкам для паука, нам нужно использовать метод класса from_crawler. Кроме того, чтобы сделать код повторно используемым, мы создаем новый базовый паук, который может быть унаследован другими пауками, поэтому настройки логирования не нужно устанавливать для каждого паука повторно. Пожалуйста, проверьте код ниже, вместе с комментариями. После него будет объяснение.

Ключевые моменты фрагмента кода выше:

  • Поскольку нам нужно получить доступ к переменной LOG_LEVEL в settings.py. Нам нужно использовать from_crawler, потому что это единственный способ получить доступ к настройкам проекта до создания паука.
  • Паук, созданный с помощью from_crawler, является конечным пауком, который будет запущен, и мы можем получить доступ к настройкам проекта здесь.
  • Обработчик Google Logging создается таким же образом, как показано выше, и добавляется в пользовательский логгер с именем паука в качестве имени. Если вы задаетесь вопросом, почему мы можем настроить логгер паука таким образом, исходный код Scrapy может быть очень полезен.

Проверьте здесь, если вам не ясно, как работает декоратор @property.

Правильно настроив Google Logging в BaseSpider, мы можем добавить его в пользовательские пауки, чтобы они могли наследовать настройки для логирования:

Теперь давайте запустим паука и проверим логи в Google Logs Explorer:

$ **scrapy crawl authors**

Внимание! Чтобы убедиться, что паук может успешно запуститься и логи могут быть успешно отправлены в Google Logging, убедитесь в следующем:

  • Переменная среды GOOGLE_APPLICATION_CREDENTIALS настроена так, чтобы указывать на файл ключа учетной записи службы.
  • Команда выполняется в виртуальной среде, где установлены как Scrapy, так и клиентская библиотека Google Logging.

Когда паук закончит скрапинг, мы можем проверить логи в Google Logs Explorer:


Ура! Мы успешно настроили наши пауки для отправки логов в Google Logging. Вы можете отправлять любую информацию, которая ценна для вашего проекта, в Google Logging. Наличие логов скрапинга в Google Logging полезно для анализа. Вы можете иметь централизованный контроль над логами и создавать панели мониторинга логов, чтобы внимательно следить за задачами скрапинга.

Код для проекта Scrapy можно найти в этом репозитории GitHub.


Связанные статьи: