

# 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 ワークグループはアプリケーションログをサービスマネージド S3 バケットに最長で 30 日間安全に保存します。

必要に応じて、サービスでマネージドログの暗号化に使用する 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 バケットへのログ配信を設定できます。

S3 ログ配信を AWS CLI から有効にするには、インタラクティブセッションの開始時に `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 ロググループへのログ配信を設定できます。

S3 ログ配信を AWS CLI から有効にするには、インタラクティブセッションの開始時に `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"
                ]
            }
        }
    }'
```