Маршрутизация Python регистрации сообщений в Cloudwatch в AWS Glue - PullRequest
0 голосов
/ 22 февраля 2020

Я написал библиотеку Python (pyspark), которую я использую в своих скриптах AWS Glue. Библиотека Python регистрирует, используя обычный метод import logger; log = logging.getLogger(__name__); log.info(message).

Я бы хотел, чтобы эти журналы появлялись в Cloudwatch при выполнении моей работы по склеиванию. Как я могу направить эти Python журналы в Cloudwatch?

1 Ответ

1 голос
/ 22 февраля 2020

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

Один из способов сделать это - использовать обработчик Cloudwatch, предоставляемый watchtower, который вы импортируете в Glue в виде zip-файла обычным образом .


import logging

from watchtower import CloudWatchLogHandler

from awsglue.utils import getResolvedOptions
args = getResolvedOptions(sys.argv, ['JOB_NAME'])

# This will be used to make sure the log stream is prefixed with the job ID
# meaning it appears when you click 'see logs' in the Glue web UI.
job_run_id = args['JOB_RUN_ID']
lsn = f"{job_run_id}_custom"

# Need to set your default region so that boto3 create a log client in the right region
os.environ["AWS_DEFAULT_REGION"] = "eu-west-1"

cw = CloudWatchLogHandler(log_group="/aws-glue/jobs/logs-v2", stream_name=lsn)

# Demo of how to route logs made by requests (via urllib3) to cloudwatch
import requests
rlog = logging.getLogger("urllib3")
rlog.setLevel(logging.DEBUG)

rlog.handlers = []
rlog.addHandler(cw)

r  = requests.get('https://www.bbc.co.uk/news')

# The logs generated by urllib3 will now appear in Cloudwatch
...