

# AWS Glue 작업 실행 인사이트를 사용한 모니터링
<a name="monitor-job-insights"></a>

AWS Glue 작업 실행 인사이트는 작업 디버깅 및 AWS Glue 작업의 최적화를 간소화해 주는 AWS Glue의 기능입니다. AWS Glue는 AWS Glue 작업을 모니터링할 수 있도록 [Spark UI](https://docs.aws.amazon.com/glue/latest/dg/monitor-spark-ui.html)와 [CloudWatch 로그 및 지표](https://docs.aws.amazon.com/glue/latest/dg/monitor-cloudwatch.html)를 제공합니다. 이 기능을 사용하면 AWS Glue 작업의 실행에 대해 다음과 같은 정보를 확인할 수 있습니다.
+ 실패가 발생한 AWS Glue 작업 스크립트의 행 번호
+ 작업 실패가 발생하기 직전에 Spark 쿼리 계획에서 마지막으로 실행된 Spark 작업
+ 실패와 관련된 Spark 예외 이벤트의 시간순으로 된 로그 스트림
+ 근본 원인 분석 및 문제 해결을 위한 권장 작업(예: 스크립트 튜닝)
+ 일반적인 Spark 이벤트(Spark 작업과 관련된 로그 메시지)와 근본 원인 해결을 위한 권장 작업

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

## 요구 사항
<a name="monitor-job-insights-requirements"></a>

AWS Glue 작업 실행 인사이트 기능은 AWS Glue 버전 2.0 이상에서 사용할 수 있습니다. 기존 작업의 [마이그레이션 가이드](https://docs.aws.amazon.com/glue/latest/dg/migrating-version-30.html)에 따라 이전 버전의 AWS Glue에서 업그레이드할 수 있습니다.

## AWS Glue ETL 작업에 대해 작업 실행 인사이트 활성화
<a name="monitor-job-insights-enable"></a>

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

### AWS Glue Studio
<a name="monitor-job-insights-requirements"></a>

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

![\[AWS Glue Studio에서 작업 실행 인사이트 활성화.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/monitor-job-run-insights-1.png)


### 명령줄
<a name="monitor-job-insights-enable-cli"></a>

CLI를 통해 작업을 생성할 때는 새로 추가된 단일 [작업 파라미터](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html) `--enable-job-insights = true`를 사용하여 작업 실행을 시작할 수 있습니다.

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

## CloudWatch에서 작업 실행 인사이트 로그 스트림에 액세스
<a name="monitor-job-insights-access"></a>

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

1. *예외 분석 로그 스트림*: `<job-run-id>-job-insights-rca-driver`. 이 스트림은 다음과 같은 정보를 제공합니다.
   + 실패의 원인이 된 AWS Glue 작업 스크립트의 행 번호.
   + Spark 쿼리 계획(DAG)에서 마지막으로 실행된 Spark 작업.
   + Spark 드라이버 및 실행기의 예외와 관련 있는 시간순 이벤트. 필요한 경우 전체 오류 메시지, 실패한 Spark 작업과 해당 실행기 ID(특정 실행기의 로그 스트림을 살펴보는 데 사용)와 같은 세부 정보를 볼 수 있습니다.

1. *규칙 기반 인사이트 스트림*: 
   + 근본 원인 분석 및 오류 수정을 위한 권장 사항(예: 특정 작업 파라미터를 사용하여 성능 최적화).
   + 근본 원인 분석의 기반이 되는 관련 있는 Spark 이벤트 및 권장 작업.

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

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

![\[로그 스트림 링크가 표시된 Job Run Details(작업 실행 세부 정보) 페이지.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/monitor-job-run-insights-2.png)


## AWS Glue 작업 실행 인사이트의 예
<a name="monitor-job-insights-example"></a>

이 섹션에서는 작업 실행 인사이트 기능을 사용하여 실패한 작업의 문제를 해결하는 방법을 예를 통해 살펴봅니다. 이 예제에서는 사용자가 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 로그 스트림.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/monitor-job-run-insights-3.png)

1. `job-insights-rule-driver` 로그 스트림:
   + *근본 원인 분석 및 권장 사항*: 스크립트에서 결함이 되는 행 번호와 마지막으로 실행된 행 번호 외에도 이 로그 스트림에서는 근본 원인 분석과 권장 사항(AWS Glue 작업에서 추가 Python 모듈을 사용하려면 AWS Glue 문서에 따라 필요한 작업 파라미터를 설정할 것)을 볼 수 있습니다.
   + *기본 이벤트*: 이 로그 스트림에서는 근본 원인을 유추할 수 있도록, 서비스 정의 규칙을 사용하여 평가된 Spark 예외 이벤트를 볼 수 있으며 권장 사항을 제공합니다.  
![\[job-insights-rule-driver 로그 스트림.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/monitor-job-run-insights-4.png)