문제 개요
Python의 boto3 라이브러리를 사용하여 AWS Glue 데이터 카탈로그에 등록된 특정 크롤러(또는 여러 크롤러)의 지표(metrics)를 조회하는 방법을 알아보겠습니다.
예시 – crawler_for_s3_file_job이라는 이름의 크롤러에 대한 지표를 조회합니다.
문제 해결 접근 방식
1단계 – boto3와 botocore 예외 처리 모듈을 임포트하여 발생할 수 있는 오류를 처리합니다.
2단계 – crawler_names는 필수 파라미터입니다. 리스트(list) 형태이므로 한 번에 하나 또는 여러 개의 크롤러 이름을 전달하여 지표를 조회할 수 있습니다.
3단계 – boto3 라이브러리로 AWS 세션을 생성합니다. 기본 프로필(default profile)에 region_name이 설정되어 있지 않다면, 세션 생성 시 명시적으로 리전 이름을 전달해야 합니다.
4단계 – AWS Glue 서비스를 위한 클라이언트를 생성합니다.
5단계 – get_crawler_metrics 함수를 호출하고, CrawlerNameList 파라미터에 crawler_names를 전달합니다.
6단계 – 함수는 해당 크롤러들의 지표 정보를 반환합니다.
7단계 – 작업 확인 중 문제가 발생하면 일반 예외(generic exception)를 처리합니다.
예제 코드
다음 코드를 사용하여 지정한 크롤러의 지표를 조회할 수 있습니다.
import boto3
from botocore.exceptions import ClientError
def retrieves_metrics_of_a_crawler(crawler_names:list):
session = boto3.session.Session()
glue_client = session.client('glue')
try:
crawler_details = glue_client.get_crawler_metrics(CrawlerNameList = crawler_names)
return crawler_details
except ClientError as e:
raise Exception("boto3 client error in retrieves_metrics_of_a_crawler: " + e.__str__())
except Exception as e:
raise Exception("Unexpected error in retrieves_metrics_of_a_crawler: " + e.__str__())
print(retrieves_metrics_of_a_crawler(["crawler_for_s3_file_job"]))실행 결과
{'CrawlerMetricsList': [{'CrawlerName': 'crawler_for_s3_file_job',
'TimeLeftSeconds': 0.0, 'StillEstimating': False, 'LastRuntimeSeconds':
79.673, 'MedianRuntimeSeconds': 79.673, 'TablesCreated': 1,
'TablesUpdated': 0, 'TablesDeleted': 0}], 'ResponseMetadata':
{'RequestId': '680cf4ca-********0abe', 'HTTPStatusCode': 200,
'HTTPHeaders': {'date': 'Sun, 28 Feb 2021 11:38:08 GMT', 'content-type':
'application/x-amz-json-1.1', 'content-length': '216', 'connection':
'keep-alive', 'x-amzn-requestid': '680cf4ca-******************0abe'},
'RetryAttempts': 0}}결과 분석
응답 결과에는 다음과 같은 유용한 지표들이 포함됩니다.
- CrawlerName – 조회된 크롤러의 이름
- LastRuntimeSeconds – 마지막 실행에 소요된 시간(초)
- MedianRuntimeSeconds – 실행 시간의 중앙값(초)
- StillEstimating – 크롤러가 현재 테이블 추정 작업 중인지 여부
- TimeLeftSeconds – 실행 완료까지 남은 예상 시간(초)
- TablesCreated / TablesUpdated / TablesDeleted – 생성, 업데이트, 삭제된 테이블 수
여러 크롤러의 지표를 동시에 확인하고 싶다면, 리스트에 크롤러 이름을 여러 개 담아 전달하기만 하면 됩니다. 이를 통해 대규모 데이터 카탈로그 환경에서도 크롤러의 성능과 상태를 손쉽게 모니터링할 수 있습니다.