

# Athena에서 Spark 애플리케이션 이벤트 로깅
<a name="notebooks-spark-logging"></a>

Athena 노트북 편집기에서는 표준 Jupyter, Spark 및 Python 로깅을 허용합니다. `df.show()`를 사용하여 PySpark DataFrame 콘텐츠를 표시하거나 `print("Output")`를 사용하여 셀 출력에 값을 표시할 수 있습니다. 계산에 대한 `stdout`, `stderr` 및 `results` 출력은 Amazon S3의 쿼리 결과 버킷 위치에 기록됩니다.

## Spark 애플리케이션 이벤트를 Amazon CloudWatch에 로깅
<a name="notebooks-spark-logging-logging-spark-application-events-to-amazon-cloudwatch"></a>

Athena 세션에서는 사용 중인 계정의 [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)에 로그를 기록할 수도 있습니다.

### 로그 스트림 및 로그 그룹 이해
<a name="notebooks-spark-logging-understanding-log-streams-and-log-groups"></a>

CloudWatch에서는 로그 활동을 로그 스트림과 로그 그룹으로 구성합니다.

**로그 스트림** - CloudWatch 로그 스트림은 동일한 소스를 공유하는 일련의 로그 이벤트입니다. CloudWatch Logs에서 각 별도의 로그 소스가 별도의 로그 스트림을 구성합니다.

**로그 그룹** - CloudWatch Logs에서 로그 그룹은 동일한 보존 기간, 모니터링 및 액세스 제어 설정을 공유하는 로그 스트림의 그룹입니다.

하나의 로그 그룹이 가질 수 있는 로그 스트림의 수는 제한이 없습니다.

Athena에서 노트북 세션을 처음으로 시작하면 다음 예제와 같이 Spark 지원 작업 그룹의 이름을 사용하는 로그 그룹이 Athena의 CloudWatch에서 생성됩니다.

```
/aws-athena/workgroup-name
```

이 로그 그룹은 하나 이상의 로그 이벤트를 생성하는 세션의 실행기별로 하나의 로그 스트림을 수신합니다. 실행기는 노트북 세션이 Athena에서 요청할 수 있는 가장 작은 컴퓨팅 단위입니다. CloudWatch에서 로그 스트림의 이름은 세션 ID와 실행기 ID로 시작합니다.

CloudWatch 로그 그룹 및 로그 스트림에 대한 자세한 내용은 Amazon CloudWatch Logs 사용 설명서의 [로그 그룹 및 로그 스트림 작업](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)을 참조하세요.

### Athena for Spark에서 표준 로거 객체 사용
<a name="notebooks-spark-logging-using-standard-logger-objects-in-athena-for-spark"></a>

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와 공유되지 않습니다. `athena_shared_logger`를 호출하여 지원에 표시하려는 정보만 기록해야 합니다.

제공된 로거는 [Apache Log4j](https://logging.apache.org/log4j/)를 통해 이벤트를 기록하고 이 인터페이스의 로깅 수준을 상속합니다. 가능한 로그 수준 값은 `DEBUG`, `ERROR`, `FATAL`, `INFO`, `WARN` 또는 `WARNING`입니다. 로거에서 해당하는 명명된 함수를 사용하여 이러한 값을 생성할 수 있습니다.

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

### 예: 노트북 이벤트를 CloudWatch에 로깅
<a name="notebooks-spark-logging-example-logging-notebook-events-to-cloudwatch"></a>

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

**Amazon CloudWatch Logs에 Athena 노트북 이벤트를 로깅하려면**

1. [Amazon Athena에서 Apache Spark 시작하기](notebooks-spark-getting-started.md)에 따라 Athena에서 고유한 이름을 가진 Spark 지원 작업 그룹을 생성합니다. 이 자습서에서는 `athena-spark-example` 작업 그룹 이름을 사용합니다.

1. [7단계: 자체 노트북 생성](notebooks-spark-getting-started.md#notebooks-spark-getting-started-creating-your-own-notebook)의 단계에 따라 노트북을 생성하고 새 세션을 시작합니다.

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

   ```
   athena_user_logger.info("Hello world.")         
   ```

1. 셀을 실행합니다.

1. 다음 중 하나를 수행하여 현재 세션 ID를 검색합니다.
   + 셀 출력(예: `... session=72c24e73-2c24-8b22-14bd-443bdcd72de4`)을 확인합니다.
   + 새 셀에서 [매직](notebooks-spark-magics.md) 명령 `%session_id`를 실행합니다.

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

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

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

1. 로그 그룹 목록에서 다음 예와 같이 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
   ```

1. 세션에 대한 로그 스트림 링크를 선택합니다.

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

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

   ```
   AthenaForApacheSpark: 2022-01-01 12:00:00,000 INFO builtins: Hello world.
   ```

1. Athena 노트북 편집기로 돌아갑니다.

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

   ```
   x = 6
   athena_user_logger.warn(x)
   ```

1. 셀을 실행합니다.

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

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

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