Athena에서 Spark 애플리케이션 이벤트 로깅
Athena 노트북 편집기에서는 표준 Jupyter, Spark 및 Python 로깅을 허용합니다. df.show()
를 사용하여 PySpark DataFrame 콘텐츠를 표시하거나 print("Output")
를 사용하여 셀 출력에 값을 표시할 수 있습니다. 계산에 대한 stdout
, stderr
및 results
출력은 Amazon S3의 쿼리 결과 버킷 위치에 기록됩니다.
Spark 애플리케이션 이벤트를 Amazon CloudWatch에 로깅
Athena 세션에서는 사용 중인 계정의 Amazon CloudWatch에 로그를 기록할 수도 있습니다.
로그 스트림 및 로그 그룹 이해
CloudWatch에서는 로그 활동을 로그 스트림과 로그 그룹으로 구성합니다.
로그 스트림 - CloudWatch 로그 스트림은 동일한 소스를 공유하는 일련의 로그 이벤트입니다. CloudWatch Logs에서 각 별도의 로그 소스가 별도의 로그 스트림을 구성합니다.
로그 그룹 - CloudWatch Logs에서 로그 그룹은 동일한 보존 기간, 모니터링 및 액세스 제어 설정을 공유하는 로그 스트림의 그룹입니다.
하나의 로그 그룹이 가질 수 있는 로그 스트림의 수는 제한이 없습니다.
Athena에서 노트북 세션을 처음으로 시작하면 다음 예제와 같이 Spark 지원 작업 그룹의 이름을 사용하는 로그 그룹이 Athena의 CloudWatch에서 생성됩니다.
/aws-athena/workgroup-name
이 로그 그룹은 하나 이상의 로그 이벤트를 생성하는 세션의 실행기별로 하나의 로그 스트림을 수신합니다. 실행기는 노트북 세션이 Athena에서 요청할 수 있는 가장 작은 컴퓨팅 단위입니다. CloudWatch에서 로그 스트림의 이름은 세션 ID와 실행기 ID로 시작합니다.
CloudWatch 로그 그룹 및 로그 스트림에 대한 자세한 내용은 Amazon CloudWatch Logs 사용 설명서의 로그 그룹 및 로그 스트림 작업을 참조하세요.
Athena for Spark에서 표준 로거 객체 사용
Athena for Spark 세션에서는 다음 두 글로벌 표준 로거 객체를 사용하여 Amazon CloudWatch에 로그를 기록할 수 있습니다.
-
athena_user_logger - CloudWatch에만 로그를 전송합니다. 다음 예제와 같이 Spark 애플리케이션의 정보를 CloudWatch에 직접 기록하려는 경우 이 객체를 사용합니다.
athena_user_logger.info("CloudWatch log line.")
이 예에서는 다음과 같이 CloudWatch에 로그 이벤트를 기록합니다.
AthenaForApacheSpark: 2022-01-01 12:00:00,000 INFO builtins: CloudWatch log line.
-
athena_shared_logger - 지원을 위해 CloudWatch와 AWS 모두에 동일한 로그를 전송합니다. 다음 예제와 같이 이 객체를 사용하여 문제 해결을 위해 AWS 서비스 팀과 로그를 공유할 수 있습니다.
athena_shared_logger.info("Customer debug line.") var = [...some variable holding customer data...] athena_shared_logger.info(var)
이 예에서는
debug
행과var
변수 값을 CloudWatch Logs에 기록하고 각 행의 사본을 AWS Support로 보냅니다.참고
개인 정보 보호를 위해 계산 코드와 결과는 AWS와 공유되지 않습니다.
athena_shared_logger
를 호출하여 AWS Support에 표시하려는 정보만 기록해야 합니다.
제공된 로거는 Apache Log4jDEBUG
, ERROR
, FATAL
, INFO
, WARN
또는 WARNING
입니다. 로거에서 해당하는 명명된 함수를 사용하여 이러한 값을 생성할 수 있습니다.
참고
athena_user_logger
또는 athena_shared_logger
이름을 다시 바인딩하지 마세요. 그러면 나머지 세션 동안 로깅 객체가 CloudWatch에 쓸 수 없습니다.
다음 절차는 Amazon CloudWatch Logs에 Athena 노트북 이벤트를 로깅하는 방법을 보여줍니다.
Amazon CloudWatch Logs에 Athena 노트북 이벤트를 로깅하려면
-
Amazon Athena에서 Apache Spark 시작하기에 따라 Athena에서 고유한 이름을 가진 Spark 지원 작업 그룹을 생성합니다. 이 자습서에서는
athena-spark-example
작업 그룹 이름을 사용합니다. -
7단계: 자체 노트북 생성의 단계에 따라 노트북을 생성하고 새 세션을 시작합니다.
-
Athena 노트북 편집기의 새 노트북 셀에 다음 명령을 입력합니다.
athena_user_logger.info("Hello world.")
-
셀을 실행합니다.
-
다음 중 하나를 수행하여 현재 세션 ID를 검색합니다.
-
셀 출력(예:
... session=72c24e73-2c24-8b22-14bd-443bdcd72de4
)을 확인합니다. -
새 셀에서 매직 명령
%session_id
를 실행합니다.
-
-
세션 ID를 저장합니다.
-
노트북 세션을 실행하는 데 사용 중인 것과 동일한 AWS 계정를 사용하여 https://console.aws.amazon.com/cloudwatch/
에서 CloudWatch 콘솔을 엽니다. -
CloudWatch 콘솔 탐색 창에서 Log groups(로그 그룹)를 선택합니다.
-
로그 그룹 목록에서 다음 예와 같이 Spark 지원 Athena 작업 그룹의 이름이 있는 로그 그룹을 선택합니다.
/aws-athena/athena-spark-example
Log streams(로그 스트림) 섹션에는 작업 그룹에 대한 하나 이상의 로그 스트림 링크 목록이 포함되어 있습니다. 각 로그 스트림 이름에서는 세션 ID, 실행기 ID 및 고유 UUID가 슬래시 문자로 구분되어 있습니다.
예를 들어 세션 ID가
5ac22d11-9fd8-ded7-6542-0412133d3177
이고 실행기 ID가f8c22d11-9fd8-ab13-8aba-c4100bfba7e2
인 경우 로그 스트림의 이름은 다음 예와 비슷합니다.5ac22d11-9fd8-ded7-6542-0412133d3177/f8c22d11-9fd8-ab13-8aba-c4100bfba7e2/f012d7cb-cefd-40b1-90b9-67358f003d0b
-
세션에 대한 로그 스트림 링크를 선택합니다.
-
Log events(로그 이벤트) 페이지에서 Message(메시지) 열을 확인합니다.
실행한 셀의 로그 이벤트는 다음과 유사합니다.
AthenaForApacheSpark: 2022-01-01 12:00:00,000 INFO builtins: Hello world.
-
Athena 노트북 편집기로 돌아갑니다.
-
새 셀에 다음 코드를 입력합니다. 이 코드는 변수를 CloudWatch에 기록합니다.
x = 6 athena_user_logger.warn(x)
-
셀을 실행합니다.
-
동일한 로그 스트림에 대한 CloudWatch 콘솔 Log events(로그 이벤트) 페이지로 돌아갑니다.
-
이제 로그 스트림에는 다음과 같은 메시지와 로그 이벤트 항목이 포함되어 있습니다.
AthenaForApacheSpark: 2022-01-01 12:00:00,000 WARN builtins: 6