Athena에서 Spark 애플리케이션 이벤트 로깅 - Amazon Athena

Athena에서 Spark 애플리케이션 이벤트 로깅

Athena 노트북 편집기에서는 표준 Jupyter, Spark 및 Python 로깅을 허용합니다. df.show()를 사용하여 PySpark DataFrame 콘텐츠를 표시하거나 print("Output")를 사용하여 셀 출력에 값을 표시할 수 있습니다. 계산에 대한 stdout, stderrresults 출력은 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 Log4j를 통해 이벤트를 기록하고 이 인터페이스의 로깅 수준을 상속합니다. 가능한 로그 수준 값은 DEBUG, ERROR, FATAL, INFO, WARN 또는 WARNING입니다. 로거에서 해당하는 명명된 함수를 사용하여 이러한 값을 생성할 수 있습니다.

참고

athena_user_logger 또는 athena_shared_logger 이름을 다시 바인딩하지 마세요. 그러면 나머지 세션 동안 로깅 객체가 CloudWatch에 쓸 수 없습니다.

다음 절차는 Amazon CloudWatch Logs에 Athena 노트북 이벤트를 로깅하는 방법을 보여줍니다.

Amazon CloudWatch Logs에 Athena 노트북 이벤트를 로깅하려면
  1. Amazon Athena에서 Apache Spark 시작하기에 따라 Athena에서 고유한 이름을 가진 Spark 지원 작업 그룹을 생성합니다. 이 자습서에서는 athena-spark-example 작업 그룹 이름을 사용합니다.

  2. 7단계: 자체 노트북 생성의 단계에 따라 노트북을 생성하고 새 세션을 시작합니다.

  3. Athena 노트북 편집기의 새 노트북 셀에 다음 명령을 입력합니다.

    athena_user_logger.info("Hello world.")
  4. 셀을 실행합니다.

  5. 다음 중 하나를 수행하여 현재 세션 ID를 검색합니다.

    • 셀 출력(예: ... session=72c24e73-2c24-8b22-14bd-443bdcd72de4)을 확인합니다.

    • 새 셀에서 매직 명령 %session_id를 실행합니다.

  6. 세션 ID를 저장합니다.

  7. 노트북 세션을 실행하는 데 사용 중인 것과 동일한 AWS 계정를 사용하여 https://console.aws.amazon.com/cloudwatch/ 에서 CloudWatch 콘솔을 엽니다.

  8. CloudWatch 콘솔 탐색 창에서 Log groups(로그 그룹)를 선택합니다.

  9. 로그 그룹 목록에서 다음 예와 같이 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
  10. 세션에 대한 로그 스트림 링크를 선택합니다.

  11. Log events(로그 이벤트) 페이지에서 Message(메시지) 열을 확인합니다.

    실행한 셀의 로그 이벤트는 다음과 유사합니다.

    AthenaForApacheSpark: 2022-01-01 12:00:00,000 INFO builtins: Hello world.
  12. Athena 노트북 편집기로 돌아갑니다.

  13. 새 셀에 다음 코드를 입력합니다. 이 코드는 변수를 CloudWatch에 기록합니다.

    x = 6 athena_user_logger.warn(x)
  14. 셀을 실행합니다.

  15. 동일한 로그 스트림에 대한 CloudWatch 콘솔 Log events(로그 이벤트) 페이지로 돌아갑니다.

  16. 이제 로그 스트림에는 다음과 같은 메시지와 로그 이벤트 항목이 포함되어 있습니다.

    AthenaForApacheSpark: 2022-01-01 12:00:00,000 WARN builtins: 6