

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 모니터링 구성을 사용하여 Spark Kubernetes 운영자 및 Spark 작업 모니터링을 참조하세요.
<a name="spark-operator-monitoring-configuration"></a>

모니터링 구성을 사용하면 Spark 애플리케이션 및 운영자 로그의 로그 아카이빙을 Amazon S3 또는 Amazon CloudWatch에 쉽게 설정할 수 있습니다. 사용자는 하나 또는 둘 다를 선택할 수 있습니다. 이 작업을 수행하면 Spark 운영자 포드, 드라이버 및 실행기 포드에 로그 에이전트 사이드카가 추가되고 이후에 이러한 구성 요소의 로그가 구성된 싱크에 전달됩니다.

## 사전 조건
<a name="spark-operator-monitoring-configuration-prereqs"></a>

모니터링을 구성하기 전에 다음 설정 작업을 완료하세요.

1. (선택 사항) 이미 이전 버전의 Spark 운영자를 설치한 경우 *SparkApplication/ScheduledSparkApplication* CRD를 삭제합니다.

   ```
   kubectl delete crd scheduledsparkapplications.sparkoperator.k8s.io
   kubectl delete crd sparkapplications.sparkoperator.k8s.io
   ```

1. IAM에 운영자/작업 실행 역할이 아직 없는 경우 생성합니다.

1. 다음 명령을 실행하여 방금 생성한 운영자/작업 실행 역할의 신뢰 정책을 업데이트합니다.

   ```
   aws emr-containers update-role-trust-policy \ 
   --cluster-name cluster \
   --namespace namespace \
   --role-name iam_role_name_for_operator/job_execution_role
   ```

1. 운영자/작업 실행 역할의 IAM 역할 신뢰 정책을 다음과 같이 편집합니다.

   ```
   {
       "Effect": "Allow",
       "Principal": {
           "Federated": "${OIDC-provider}"
       },
       "Action": "sts:AssumeRoleWithWebIdentity",
       "Condition": {
           "StringLike": {
               "OIDC_PROVIDER:sub": "system:serviceaccount:${Namespace}:emr-containers-sa-*"
           }
       }
   }
   ```

1. 다음 권한을 사용하여 IAM에서 *monitoringConfiguration* 정책을 생성합니다.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "logs:DescribeLogStreams",
           "logs:CreateLogStream",
           "logs:CreateLogGroup",
           "logs:PutLogEvents"
         ],
         "Resource": [
           "arn:aws:logs:*:*:log-group:log_group_name",
           "arn:aws:logs:*:*:log-group:log_group_name:*"
         ],
         "Sid": "AllowLOGSDescribelogstreams"
       },
       {
         "Effect": "Allow",
         "Action": [
           "logs:DescribeLogGroups"
         ],
         "Resource": [
           "*"
         ],
         "Sid": "AllowLOGSDescribeloggroups"
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:PutObject",
           "s3:GetObject",
           "s3:ListBucket"
         ],
         "Resource": [
           "arn:aws:s3:::bucket_name",
           "arn:aws:s3:::bucket_name/*"
         ],
         "Sid": "AllowS3Putobject"
       }
     ]
   }
   ```

------

1. 위의 정책을 운영자/작업 실행 역할에 첨부하세요.

# Spark 운영자 로그
<a name="spark-operator-monitoring-configuration-logs"></a>

`helm install`을 수행할 때 다음과 같은 방법으로 모니터링 구성을 정의할 수 있습니다.

```
helm install spark-operator spark-operator \
--namespace namespace \
--set emrContainers.awsRegion=aws_region \
--set emrContainers.monitoringConfiguration.image=log_agent_image_url \
--set emrContainers.monitoringConfiguration.s3MonitoringConfiguration.logUri=S3_bucket_uri \
--set emrContainers.monitoringConfiguration.cloudWatchMonitoringConfiguration.logGroupName=log_group_name \
--set emrContainers.monitoringConfiguration.cloudWatchMonitoringConfiguration.logStreamNamePrefix=log_stream_prefix \
--set emrContainers.monitoringConfiguration.sideCarResources.limits.cpuLimit=500m \
--set emrContainers.monitoringConfiguration.sideCarResources.limits.memoryLimit=512Mi \
--set emrContainers.monitoringConfiguration.containerLogRotationConfiguration.rotationSize=2GB \
--set emrContainers.monitoringConfiguration.containerLogRotationConfiguration.maxFilesToKeep=10 \
--set webhook.enable=true \
--set emrContainers.operatorExecutionRoleArn=operator_execution_role_arn
```

**모니터링 구성**

**monitoringConfiguration** 아래에서 다음과 같은 구성 옵션을 사용할 수 있습니다.
+ **이미지**(선택 사항) - 에이전트 이미지 URL을 기록합니다. 제공되지 않으면 emrReleaseLabel로 가져옵니다.
+ **s3MonitoringConfiguration** – Amazon S3에 아카이브하려면 이 옵션을 설정합니다.
  + **logUri**(필수) - 로그를 저장할 Amazon S3 버킷 경로입니다.
  + 다음은 로그가 업로드된 후 Amazon S3 버킷 경로의 샘플 형식입니다. 첫 번째 예제에서는 로그 순환이 활성화되지 않았음을 보여줍니다.

    ```
    s3://${logUri}/${POD NAME}/operator/stdout.gz
    s3://${logUri}/${POD NAME}/operator/stderr.gz
    ```

    로그 순환은 기본적으로 활성화됩니다. 증분 인덱스가 있는 순환된 파일과 이전 샘플과 동일한 현재 파일을 모두 볼 수 있습니다.

    ```
    s3://${logUri}/${POD NAME}/operator/stdout_YYYYMMDD_index.gz
    s3://${logUri}/${POD NAME}/operator/stderr_YYYYMMDD_index.gz
    ```
+ **cloudWatchMonitoringConfiguration** – Amazon CloudWatch로의 전달을 설정하기 위한 구성 키입니다.
  + **logGroupName**(필수) - Amazon CloudWatch 로그를 전송할 로그 그룹의 이름입니다. 그룹이 없으면 그룹이 자동으로 생성됩니다.
  + **logStreamNamePrefix**(선택 사항) - 로그를 보낼 로그 스트림의 이름입니다. 기본값은 빈 문자열입니다. 의 형식 Amazon CloudWatch 은 다음과 같습니다.

    ```
    ${logStreamNamePrefix}/${POD NAME}/STDOUT or STDERR
    ```
+ **sideCarResources**(선택 사항) - 시작된 Fluentbit sidecar 컨테이너에서 리소스 한도를 설정하기 위한 구성 키입니다.
  + **memoryLimit**(선택 사항) - 메모리 제한입니다. 필요에 따라 조정합니다. 기본값은 512Mi입니다.
  + **cpuLimit**(선택 사항) - CPU 제한입니다. 필요에 따라 조정합니다. 기본값은 500m입니다.
+ **containerLogRotationConfiguration**(선택 사항) - 컨테이너 로그 로테이션 동작을 제어합니다. 기본적으로 활성화됩니다.
  + **rotationSize**(필수) - 로그 로테이션을 위한 파일 크기를 지정합니다. 가능한 값 범위는 2KB에서 2GB 사이입니다. rotationSize 파라미터의 숫자 단위 부분은 정수로 전달됩니다. 십진수는 지원되지 않으므로 로테이션 크기를 1.5GB(예: 1,500MB 값)로 지정할 수 있습니다. 기본값은 2GB입니다.
  + **maxFilesToKeep**(필수) - 로테이션을 수행한 후 컨테이너에서 보존할 최대 파일 수를 지정합니다. 최솟값은 1이고 최댓값은 50입니다. 기본값은 10입니다.

*monitoringConfiguration*을 구성한 후에는 Amazon S3 버킷 Amazon CloudWatch 또는 둘 다에서 Spark 운영자 포드 로그를 확인할 수 있어야 합니다. Amazon S3 버킷의 경우 첫 번째 로그 파일이 플러시될 때까지 2분 정도 기다려야 합니다.

로그인을 찾으려면 **CloudWatch** > **로그 그룹** > ***로그 그룹 이름*** > *포드 이름***/작업자/stderr**로 이동할 Amazon CloudWatch수 있습니다.

또는 **CloudWatch** > **로그 그룹** > ***로그 그룹 이름*** > *포드 이름***/작업자/stdout**으로 이동하면 됩니다.

# Spark 애플리케이션 로그
<a name="spark-operator-monitoring-application-logs"></a>

다음과 같은 방법으로 이 구성을 정의할 수 있습니다.

```
apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: SparkApplication
metadata:
  name: spark-pi
  namespace: namespace
spec:
  type: Scala
  mode: cluster
  imagePullPolicy: Always
  mainClass: org.apache.spark.examples.SparkPi
  mainApplicationFile: "local:///usr/lib/spark/examples/jars/spark-examples.jar"
  sparkVersion: "3.3.1"
  emrReleaseLabel: emr_release_label
  executionRoleArn: job_execution_role_arn
  restartPolicy:
    type: Never
  volumes:
    - name: "test-volume"
      hostPath:
        path: "/tmp"
        type: Directory
  driver:
    cores: 1
    coreLimit: "1200m"
    memory: "512m"
    labels:
      version: 3.3.1
    volumeMounts:
      - name: "test-volume"
        mountPath: "/tmp"
  executor:
    cores: 1
    instances: 1
    memory: "512m"
    labels:
      version: 3.3.1
    volumeMounts:
      - name: "test-volume"
        mountPath: "/tmp"
  monitoringConfiguration:
    image: "log_agent_image"
    s3MonitoringConfiguration:
      logUri: "S3_bucket_uri"
    cloudWatchMonitoringConfiguration:
      logGroupName: "log_group_name"
      logStreamNamePrefix: "log_stream_prefix"
    sideCarResources:
      limits:
        cpuLimit: "500m"
        memoryLimit: "250Mi"
    containerLogRotationConfiguration:
      rotationSize: "2GB"
      maxFilesToKeep: "10"
```

**monitoringConfiguration** 아래에서 다음과 같은 구성 옵션을 사용할 수 있습니다.
+ **이미지**(선택 사항) - 에이전트 이미지 URL을 기록합니다. 제공되지 않으면 emrReleaseLabel로 가져옵니다.
+ **s3MonitoringConfiguration** – Amazon S3에 아카이브하려면 이 옵션을 설정합니다.
  + **logUri**(필수) - 로그를 저장할 Amazon S3 버킷 경로입니다. 첫 번째 예제에서는 로그 순환이 활성화되지 않았음을 보여줍니다.

    ```
    s3://${logUri}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stdout.gz
    s3://${logUri}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stderr.gz
    ```

    로그 순환은 기본적으로 활성화됩니다. 로테이션된 파일(인덱스 증가)과 현재 파일(날짜 스탬프 없음)을 모두 사용할 수 있습니다.

    ```
    s3://${logUri}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stdout_YYYYMMDD_index.gz
    s3://${logUri}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stderr_YYYYMMDD_index.gz
    ```
+ **cloudWatchMonitoringConfiguration** – Amazon CloudWatch로의 전달을 설정하기 위한 구성 키입니다.
  + **logGroupName**(필수) - 로그를 보낼 CloudWatch 로그 그룹의 이름. 그룹이 없으면 그룹이 자동으로 생성됩니다.
  + **logStreamNamePrefix**(선택 사항) - 로그를 보낼 로그 스트림의 이름. 기본값은 빈 문자열입니다. CloudWatch의 형식은 다음과 같습니다.

    ```
    ${logStreamNamePrefix}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stdout
    ${logStreamNamePrefix}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stderr
    ```
+ **sideCarResources**(선택 사항) - 시작된 Fluentbit sidecar 컨테이너에서 리소스 한도를 설정하기 위한 구성 키입니다.
  + **memoryLimit**(선택 사항) - 메모리 제한입니다. 필요에 따라 조정합니다. 기본값은 250Mi입니다.
  + **cpuLimit** - CPU 제한입니다. 필요에 따라 조정합니다. 기본값은 500m입니다.
+ **containerLogRotationConfiguration**(선택 사항) - 컨테이너 로그 로테이션 동작을 제어합니다. 기본적으로 활성화됩니다.
  + **rotationSize**(필수) - 로그 로테이션을 위한 파일 크기를 지정합니다. 가능한 값 범위는 2KB에서 2GB 사이입니다. rotationSize 파라미터의 숫자 단위 부분은 정수로 전달됩니다. 십진수는 지원되지 않으므로 로테이션 크기를 1.5GB(예: 1,500MB 값)로 지정할 수 있습니다. 기본값은 2GB입니다.
  + **maxFilesToKeep**(필수) - 로테이션을 수행한 후 컨테이너에서 보존할 최대 파일 수를 지정합니다. 최소값은 1입니다. 최대값은 50입니다. 기본값은 10입니다.

monitoringConfiguration을 구성한 후 Amazon S3 버킷이나 CloudWatch 또는 둘 다에서 Spark 애플리케이션 드라이버와 실행기 로그를 확인할 수 있습니다. Amazon S3 버킷의 경우 첫 번째 로그 파일이 플러시될 때까지 2분 정도 기다려야 합니다. 예를 들어, Amazon S3에서 버킷 경로는 다음과 같이 나타납니다.

**Amazon S3** > **버킷** > ***버킷 이름*** > *Spark 애플리케이션 이름 - UUID* > *포드 이름* > **stderr.gz**

또는 다음과 같습니다.

**Amazon S3** > **버킷** > ***버킷 이름*** > *Spark 애플리케이션 이름 - UUID* > *포드 이름* > **stdout.gz**

CloudWatch에서 경로는 다음과 같습니다.

**CloudWatch** > **로그 그룹** > ***로그 그룹 이름*** > *Spark 애플리케이션 이름 - UUID*/*포드 이름***/stderr**

또는 다음과 같습니다.

**CloudWatch** > **로그 그룹** > ***로그 그룹 이름*** > *Spark 애플리케이션 이름 - UUID*/*포드 이름***/stdout**