

# Apache Spark 세션에 대한 로깅 및 모니터링
<a name="notebooks-spark-logging-monitoring"></a>

릴리스 Apache Spark 버전 3.5 이상에서는 관리형, Amazon S3 또는 CloudWatch 로깅을 로깅 옵션으로 지정할 수 있습니다.

다음 표에서는 관리형 로깅 및 S3 로깅을 사용할 때 해당 옵션을 선택하는 경우 예상할 수 있는 로그 위치와 UI 가용성을 나열합니다.


****  

| 옵션 | 이벤트 로그 | 컨테이너 로그 | 애플리케이션 UI | 
| --- | --- | --- | --- | 
| 관리형 로깅(기본값) | 관리형 S3 버킷에 저장됨 | 관리형 S3 버킷에 저장됨 | 지원됨 | 
| 관리형 로깅 및 S3 버킷 모두 | 두 장소에 모두 저장됨 | S3 버킷에 저장됨 | 지원됨 | 
| Amazon S3 버킷 | S3 버킷에 저장됨 | S3 버킷에 저장됨 | 지원되지 않음1 | 

1 관리형 로깅 옵션을 선택한 상태로 유지하는 것이 좋습니다. 그렇지 않으면 기본 제공 애플리케이션 UI를 사용할 수 없습니다.

## 관리형 로깅
<a name="notebooks-spark-logging-monitoring-managed"></a>

기본적으로 Athena Spark 작업 그룹은 애플리케이션 로그를 최대 30일 동안 서비스 관리형 S3 버킷에 안전하게 저장합니다.

선택적으로 서비스가 관리형 로그를 암호화하는 데 사용할 KMS 키(키 ID, ARN, 별칭 또는 별칭 ARN)를 제공할 수 있습니다.

```
aws athena start-session \
  --work-group "WORKGROUP" \
  --monitoring-configuration '{
    "ManagedLoggingConfiguration": {
        "Enabled": true,
        "KmsKey": "KMS_KEY"
    },
  }'
  --engine-configuration ''
```

**참고**  
관리형 로깅을 끄면 Athena가 사용자를 대신하여 세션 문제를 해결할 수 없습니다. 예제: Amazon SageMaker AI Studio 노트북에서 또는 `GetResourceDashboard` API를 사용하여 Spark-UI에 액세스하지 않습니다.

AWS CLI에서 이 옵션을 끄려면 대화형 세션을 시작할 때 `ManagedLoggingConfiguration` 구성을 사용합니다.

```
aws athena start-session \
  --work-group "WORKGROUP" \
  --monitoring-configuration '{
    "ManagedLoggingConfiguration": {
      "Enabled": false
    },
  }'
  --engine-configuration ''
```

### 관리형 로깅에 필요한 권한
<a name="notebooks-spark-logging-monitoring-managed-permissions"></a>

KMS 키를 제공한 경우 실행 역할에 대한 권한 정책에 다음 권한이 필요합니다.

```
{
    "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
    ],
    "Resource": "*",
    "Effect": "Allow"
}
```

## Amazon S3 로깅
<a name="notebooks-spark-logging-monitoring-s3"></a>

Amazon S3 버킷으로 로그 전송을 구성할 수 있습니다.

AWS CLI에서 S3 로그 전송을 활성화하려면 대화형 세션을 시작할 때 `S3LoggingConfiguration` 구성을 사용합니다.

```
aws athena start-session \
  --work-group "WORKGROUP" \
  --monitoring-configuration '{
    "S3LoggingConfiguration": {
      "Enabled":true,
      "LogLocation": "s3://bucket/",
    },
  }'
  --engine-configuration ''
```

선택적으로 서비스가 S3 로그를 암호화하는 데 사용할 KMS 키(키 ID, ARN, 별칭 또는 별칭 ARN)를 제공할 수 있습니다.

```
aws athena start-session \
  --work-group "WORKGROUP" \
  --monitoring-configuration '{
    "S3LoggingConfiguration": {
      "Enabled":true,
      "LogLocation": "s3://bucket/",
      "KmsKey": "KMS_KEY"
    },
  }'
  --engine-configuration ''
```

### Amazon S3에 로그를 전송하는 데 필요한 권한
<a name="notebooks-spark-logging-monitoring-s3-permissions"></a>

세션에서 Amazon S3 버킷으로 로그 데이터를 전송하려면 먼저 실행 역할에 대한 권한 정책에 다음 권한을 포함합니다.

```
{
    "Action": "s3:*",
    "Resource": "*",
    "Effect": "Allow"
}
```

KMS 키를 제공한 경우 실행 역할에 대한 권한 정책에 다음 권한도 필요합니다.

```
{
    "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
    ],
    "Resource": "*",
    "Effect": "Allow"
}
```

kms 키와 버킷이 동일한 계정에서 생성되지 않은 경우 KMS는 S3 서비스 위탁자를 허용해야 합니다.

```
{
  "Effect": "Allow",
  "Principal": { "Service": "s3.amazonaws.com" },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:GenerateDataKey*"
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "aws:SourceAccount": "ACCOUNT_HAVING_KMS_KEY"
    }
  }
}
```

## CloudWatch 로깅
<a name="notebooks-spark-logging-monitoring-cloudwatch"></a>

CloudWatch 로그 그룹으로 로그 전송을 구성할 수 있습니다.

AWS CLI에서 S3 로그 전송을 활성화하려면 대화형 세션을 시작할 때 `CloudWatchLoggingConfiguration` 구성을 사용합니다.

```
aws athena start-session \
  --work-group "WORKGROUP" \
  --monitoring-configuration '{
    "CloudWatchLoggingConfiguration": {
      "Enabled": true,
      "LogGroup": "/aws/athena/sessions/${workgroup}",
      "LogStreamNamePrefix": "session-"
    }
  }'
  --engine-configuration ''
```

모든 로그는 기본적으로 전송되지만 선택적으로 포함할 로그 유형을 지정할 수 있습니다.

```
aws athena start-session \
  --work-group "WORKGROUP" \
  --monitoring-configuration '{
    "CloudWatchLoggingConfiguration": {
      "Enabled": true,
      "LogGroup": "/aws/athena/sessions/${workgroup}",
      "LogStreamNamePrefix": "session-",
      "LogTypes": {
          "SPARK_DRIVER": [
              "STDOUT",
              "STDERR"
          ],
          "SPARK_EXECUTOR": [
              "STDOUT",
              "STDERR"
          ]
       }
    }
  }'
  --engine-configuration ''
```

### CloudWatch에 로그를 전송하는 데 필요한 권한
<a name="notebooks-spark-logging-monitoring-cloudwatch-permissions"></a>

세션에서 CloudWatch 로그 그룹으로 로그 데이터를 전송하려면 먼저 실행 역할에 대한 권한 정책에 다음 권한을 포함합니다.

```
{
    "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams"
    ],
    "Resource": "*",
    "Effect": "Allow"
}
```

그리고 KMS 키 리소스 정책에 다음 권한을 포함합니다.

```
{
  "Effect": "Allow",
  "Principal": {
    "Service": "logs.<region>.amazonaws.com"
  },
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:DescribeKey"
  ],
  "Resource": "*"
}
```

## 작업 그룹에서 로깅 기본값 구성
<a name="notebooks-spark-logging-monitoring-workgroup-defaults"></a>

또한 작업 그룹 수준에서 기본 로깅 옵션을 지정할 수 있습니다.

작업 그룹에 대한 AWS CLI에서 기본 로깅 옵션을 지정하려면 새 작업 그룹을 생성할 때 `monitoring-configuration` 구성을 사용합니다.

```
aws athena create-work-group \
  --region "REGION" \
  --name "WORKGROUP_NAME" \
  --monitoring-configuration '{
      "CloudWatchLoggingConfiguration": {
          "Enabled": true,
          "LogGroup": "/aws/athena/sessions/${workgroup}",
          "LogStreamNamePrefix": "session-",
          "LogTypes": {
              "SPARK_DRIVER": [
                  "STDOUT",
                  "STDERR"
              ],
              "SPARK_EXECUTOR": [
                  "STDOUT",
                  "STDERR"
              ]
          }
        },
        "ManagedLoggingConfiguration": {
            "Enabled": true,
            "KmsKey": "KMS_KEY"
        },
        "S3LoggingConfiguration": {
            "Enabled": true,
            "KmsKey": "KMS_KEY"
            "LogLocation": "s3://bucket/",
            "LogTypes": {
                "SPARK_DRIVER": [
                    "STDOUT",
                    "STDERR"
                ],
                "SPARK_EXECUTOR": [
                    "STDOUT",
                    "STDERR"
                ]
            }
        }
    }'
```

작업 그룹에 대한 AWS CLI에서 기본 로깅 옵션을 수정하려면 작업 그룹을 업데이트할 때 `monitoring-configuration` 구성을 사용합니다. 변경 사항은 이후 새로운 대화형 세션에 적용됩니다.

```
aws athena update-work-group \
  --region "REGION" \
  --work-group "WORKGROUP_NAME" 
  --monitoring-configuration '{
      "CloudWatchLoggingConfiguration": {
          "Enabled": true,
          "LogGroup": "/aws/athena/sessions/${workgroup}",
          "LogStreamNamePrefix": "session-",
          "LogTypes": {
              "SPARK_DRIVER": [
                  "STDOUT",
                  "STDERR"
              ],
              "SPARK_EXECUTOR": [
                  "STDOUT",
                  "STDERR"
              ]
          }
        },
        "ManagedLoggingConfiguration": {
            "Enabled": true,
            "KmsKey": "KMS_KEY"
        },
        "S3LoggingConfiguration": {
            "Enabled": true,
            "KmsKey": "KMS_KEY"
            "LogLocation": "s3://bucket/",
            "LogTypes": {
                "SPARK_DRIVER": [
                    "STDOUT",
                    "STDERR"
                ],
                "SPARK_EXECUTOR": [
                    "STDOUT",
                    "STDERR"
                ]
            }
        }
    }'
```