AWS Glue 작업 실행 인사이트를 사용한 모니터링 - AWS Glue

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS Glue 작업 실행 인사이트를 사용한 모니터링

AWS Glue 작업 실행 인사이트는 작업 디버깅 및 AWS Glue 작업의 최적화를 간소화해 주는 AWS Glue의 기능입니다. AWS Glue는 AWS Glue 작업을 모니터링할 수 있도록 Spark UICloudWatch 로그 및 지표를 제공합니다. 이 기능을 사용하면 AWS Glue 작업의 실행에 대해 다음과 같은 정보를 확인할 수 있습니다.

  • 실패가 발생한 AWS Glue 작업 스크립트의 행 번호

  • 작업 실패가 발생하기 직전에 Spark 쿼리 계획에서 마지막으로 실행된 Spark 작업

  • 실패와 관련된 Spark 예외 이벤트의 시간순으로 된 로그 스트림

  • 근본 원인 분석 및 문제 해결을 위한 권장 작업(예: 스크립트 튜닝)

  • 일반적인 Spark 이벤트(Spark 작업과 관련된 로그 메시지)와 근본 원인 해결을 위한 권장 작업

이러한 인사이트는 AWS Glue 작업의 CloudWatch 로그에 추가된 2가지 로그 스트림을 사용하여 확인할 수 있습니다.

요구 사항

AWS Glue 작업 실행 인사이트 기능은 AWS Glue 버전 2.0, 3.0, 4.0에서 사용할 수 있습니다. 기존 작업의 마이그레이션 가이드에 따라 이전 버전의 AWS Glue에서 업그레이드할 수 있습니다.

AWS Glue ETL 작업에 대해 작업 실행 인사이트 활성화

작업 실행 인사이트는 AWS Glue Studio 또는 CLI를 통해 활성화할 수 있습니다.

AWS Glue Studio

AWS Glue Studio를 통해 작업을 생성할 때는 Job Details(작업 세부 정보) 탭에서 작업 실행 인사이트를 활성화 또는 비활성화할 수 있습니다. 작업 인사이트 생성 상자가 선택되어 있는지 확인합니다.

AWS Glue Studio에서 작업 실행 인사이트 활성화.

명령줄

CLI를 통해 작업을 생성할 때는 새로 추가된 단일 작업 파라미터 --enable-job-insights = true를 사용하여 작업 실행을 시작할 수 있습니다.

기본적으로 작업 실행 인사이트 로그 스트림은 AWS Glue 연속 로깅에서 사용되는 것과 동일한 기본 로그 그룹인 /aws-glue/jobs/logs-v2/ 아래에 생성됩니다. 연속 로깅에 사용된 것과 동일한 인수 세트를 사용하여 사용자 지정 로그 그룹 이름, 로그 필터 및 로그 그룹 구성을 설정할 수 있습니다. 자세한 내용은 Enabling Continuous Logging for AWS Glue Jobs(작업에 대해 연속 로깅 활성화)를 참조하세요.

CloudWatch에서 작업 실행 인사이트 로그 스트림에 액세스

작업 실행 인사이트 기능이 활성화된 상태에서 작업 실행이 실패할 경우 2가지 로그 스트림이 생성될 수 있습니다. 작업이 성공적으로 완료되면 2가지 스트림 모두 생성되지 않습니다.

  1. 예외 분석 로그 스트림: <job-run-id>-job-insights-rca-driver. 이 스트림은 다음과 같은 정보를 제공합니다.

    • 실패의 원인이 된 AWS Glue 작업 스크립트의 행 번호.

    • Spark 쿼리 계획(DAG)에서 마지막으로 실행된 Spark 작업.

    • Spark 드라이버 및 실행기의 예외와 관련 있는 시간순 이벤트. 필요한 경우 전체 오류 메시지, 실패한 Spark 작업과 해당 실행기 ID(특정 실행기의 로그 스트림을 살펴보는 데 사용)와 같은 세부 정보를 볼 수 있습니다.

  2. 규칙 기반 인사이트 스트림:

    • 근본 원인 분석 및 오류 수정을 위한 권장 사항(예: 특정 작업 파라미터를 사용하여 성능 최적화).

    • 근본 원인 분석의 기반이 되는 관련 있는 Spark 이벤트 및 권장 작업.

참고

첫 번째 스트림은 실패한 작업 실행의 예외 Spark 이벤트가 있는 경우에만 생성되고, 두 번째 스트림은 실패한 작업 실행에 대한 인사이트가 있는 경우에만 생성됩니다. 예를 들어, 작업이 성공적으로 완료되었다면 2가지 스트림 모두 생성되지 않고, 작업이 실패했으나 실패 시나리오와 일치하는 서비스 정의 규칙이 없는 경우에는 첫 번째 스트림만 생성됩니다.

작업이 AWS Glue Studio에서 생성되었다면 Job Run Details(작업 실행 세부 정보) 탭 아래의 Job run insights(작업 실행 인사이트)에 위 스트림의 링크가 각각 ‘Concise and consolidated error logs’(간결하고 통합된 오류 로그) 및 ‘Error analysis and guidance’(오류 분석 및 가이드)로 표시됩니다.

로그 스트림 링크가 표시된 Job Run Details(작업 실행 세부 정보) 페이지.

AWS Glue 작업 실행 인사이트의 예

이 섹션에서는 작업 실행 인사이트 기능을 사용하여 실패한 작업의 문제를 해결하는 방법을 예를 통해 살펴봅니다. 이 예제에서는 사용자가 AWS Glue 작업에서 데이터에 대한 기계 학습 모델을 분석 및 빌드하는 데 필요한 모듈(tensorflow)을 가져오지 않았습니다.

import sys from awsglue.transforms import * from awsglue.utils import getResolvedOptions from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job from pyspark.sql.types import * from pyspark.sql.functions import udf,col args = getResolvedOptions(sys.argv, ['JOB_NAME']) sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session job = Job(glueContext) job.init(args['JOB_NAME'], args) data_set_1 = [1, 2, 3, 4] data_set_2 = [5, 6, 7, 8] scoresDf = spark.createDataFrame(data_set_1, IntegerType()) def data_multiplier_func(factor, data_vector): import tensorflow as tf with tf.compat.v1.Session() as sess: x1 = tf.constant(factor) x2 = tf.constant(data_vector) result = tf.multiply(x1, x2) return sess.run(result).tolist() data_multiplier_udf = udf(lambda x:data_multiplier_func(x, data_set_2), ArrayType(IntegerType(),False)) factoredDf = scoresDf.withColumn("final_value", data_multiplier_udf(col("value"))) print(factoredDf.collect())

작업 실행 인사이트 기능이 없다면 작업이 실패해도 Spark에 의해 발생된 다음과 같은 메시지만 볼 수 있습니다.

An error occurred while calling o111.collectToPython. Traceback (most recent call last):

이 메시지는 명확하지 않으므로 디버깅에 큰 도움이 되지 않습니다. 작업 실행 인사이트 기능은 다음과 같은 2가지 CloudWatch 로그 스트림을 통해 추가 인사이트를 제공합니다.

  1. job-insights-rca-driver 로그 스트림:

    • 예외 이벤트: 이 로그 스트림에서 Spark 드라이버 및 여러 분산 작업자로부터 수집된, 실패와 관련 있는 Spark 예외 이벤트를 볼 수 있습니다. 이러한 이벤트를 검토하면 여러 AWS Glue 작업자에 분산된 Spark 작업, 실행기 및 단계에서 결함 있는 코드가 실행되는 과정에서 예외가 전파된 상황을 시간순으로 살펴볼 수 있습니다.

    • 행 번호: 이 로그 스트림에서 누락된 Python 모듈 가져오기를 호출하여 실패의 원인이 된 것이 21번 행이고 스크립트에서 마지막으로 실행된 Spark 작업 collect()의 호출은 24번 행인 것을 알 수 있습니다.

    job-insights-rca-driver 로그 스트림.
  2. job-insights-rule-driver 로그 스트림:

    • 근본 원인 분석 및 권장 사항: 스크립트에서 결함이 되는 행 번호와 마지막으로 실행된 행 번호 외에도 이 로그 스트림에서는 근본 원인 분석과 권장 사항(AWS Glue 작업에서 추가 Python 모듈을 사용하려면 AWS Glue 문서에 따라 필요한 작업 파라미터를 설정할 것)을 볼 수 있습니다.

    • 기본 이벤트: 이 로그 스트림에서는 근본 원인을 유추할 수 있도록, 서비스 정의 규칙을 사용하여 평가된 Spark 예외 이벤트를 볼 수 있으며 권장 사항을 제공합니다.

    job-insights-rule-driver 로그 스트림.