

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

# 모니터링 구성을 사용하여 Flink Kubernetes 연산자 및 Flink 작업 모니터링
<a name="jobruns-flink-monitoring-configuration"></a>

모니터링 구성을 사용하면 Flink 애플리케이션 및 운영자 로그의 로그 아카이브를 S3 및/또는 CloudWatch로 쉽게 설정할 수 있습니다(둘 중 하나 또는 둘 다 선택 가능). 이렇게 하면 JobManager 및 TaskManager 포드에 FluentD sidecar가 추가되고 이후에 이러한 구성 요소의 로그가 구성된 싱크로 전달됩니다.

**참고**  
이 기능을 사용하려면 다른 AWS 서비스와 상호 작용해야 하므로 Flink 운영자의 서비스 계정 및 Flink 작업(서비스 계정)에 대해 IAM 역할을 설정해야 합니다. [Amazon EMR on EKS에 대한 Flink Kubernetes 운영자 설정](jobruns-flink-kubernetes-operator-setup.md)에서 IRSA를 사용하여 설정해야 합니다.

## Flink 애플리케이션 로그
<a name="jobruns-flink-monitoring-configuration-application-logs"></a>

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

```
apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:
  name: basic-example
spec:
  image: FLINK IMAGE TAG
  imagePullPolicy: Always
  flinkVersion: v1_17
  flinkConfiguration:
    taskmanager.numberOfTaskSlots: "2"
  executionRoleArn: JOB EXECUTION ROLE
  jobManager:
    resource:
      memory: "2048m"
      cpu: 1
  taskManager:
    resource:
      memory: "2048m"
      cpu: 1
  job:
    jarURI: local:///opt/flink/examples/streaming/StateMachineExample.jar
  monitoringConfiguration:
    s3MonitoringConfiguration:
      logUri: S3 BUCKET
    cloudWatchMonitoringConfiguration:
      logGroupName: LOG GROUP NAME
      logStreamNamePrefix: LOG GROUP STREAM PREFIX
    sideCarResources:
      limits:
        cpuLimit: 500m
        memoryLimit: 250Mi
    containerLogRotationConfiguration:
        rotationSize: 2GB
        maxFilesToKeep: 10
```

유효한 구성 옵션은 다음과 같습니다.
+ `s3MonitoringConfiguration` - S3로의 전달을 설정하기 위한 구성 키
  + `logUri`(필수) - 로그를 저장할 S3 버킷 경로.
  + 로그가 업로드되고 나면 S3의 경로는 다음과 같습니다.
    + 로그 로테이션이 활성화되지 않았습니다.

      ```
      s3://${logUri}/${POD NAME}/STDOUT or STDERR.gz
      ```
    + 로그 로테이션이 활성화되었습니다. 로테이션된 파일과 현재 파일(날짜 스탬프가 없는 파일)을 모두 사용할 수 있습니다.

      ```
      s3://${logUri}/${POD NAME}/STDOUT or STDERR.gz
      ```

      다음 형식은 증가하는 숫자입니다.

      ```
      s3://${logUri}/${POD NAME}/stdout_YYYYMMDD_index.gz
      ```
  + 이 전달자를 사용하려면 다음 IAM 권한이 필요합니다.

    ```
    {
        "Effect": "Allow",
        "Action": [
            "s3:PutObject"
        ],
        "Resource": [
           "S3_BUCKET_URI/*",
           "S3_BUCKET_URI"
        ]
    }
    ```
+ `cloudWatchMonitoringConfiguration` - CloudWatch로의 전달을 설정하기 위한 구성 키.
  + `logGroupName`(필수) - 로그를 전송하려는 CloudWatch 로그 그룹의 이름(그룹이 없는 경우 자동으로 생성됨).
  + `logStreamNamePrefix`(선택 사항) - 로그를 보낼 로그 스트림의 이름입니다. 기본값은 빈 문자열입니다. 형식은 다음과 같습니다.

    ```
    ${logStreamNamePrefix}/${POD NAME}/STDOUT or STDERR
    ```
  + 이 전달자를 사용하려면 다음 IAM 권한이 필요합니다.

    ```
    {
        "Effect": "Allow",
        "Action": [
            "logs:CreateLogStream",
            "logs:CreateLogGroup",
            "logs:PutLogEvents"
        ],
        "Resource": [
            "arn:aws:logs:REGION:ACCOUNT-ID:log-group:{YOUR_LOG_GROUP_NAME}:*",
            "arn:aws:logs:REGION:ACCOUNT-ID:log-group:{YOUR_LOG_GROUP_NAME}"
        ]
    }
    ```
+ `sideCarResources`(선택 사항) - 시작된 Fluentbit sidecar 컨테이너에서 리소스 한도를 설정하기 위한 구성 키.
  + `memoryLimit`(선택 사항) - 기본값은 512Mi입니다. 필요에 따라 조정합니다.
  + `cpuLimit`(선택 사항) - 이 옵션에는 기본값이 없습니다. 필요에 따라 조정합니다.
+ `containerLogRotationConfiguration`(선택 사항) - 컨테이너 로그 로테이션 동작을 제어합니다. 기본적으로 활성화됩니다.
  + `rotationSize`(필수) - 로그 로테이션을 위한 파일 크기를 지정합니다. 가능한 값 범위는 2KB에서 2GB 사이입니다. rotationSize 파라미터의 숫자 단위 부분은 정수로 전달됩니다. 십진수는 지원되지 않으므로 로테이션 크기를 1.5GB(예: 1,500MB 값)로 지정할 수 있습니다. 기본값은 2GB입니다.
  + `maxFilesToKeep`(필수) - 로테이션을 수행한 후 컨테이너에서 보존할 최대 파일 수를 지정합니다. 최솟값은 1이고 최댓값은 50입니다. 기본값은 10입니다.

## Flink 운영자 로그
<a name="jobruns-flink-monitoring-configuration-operator-logs"></a>

또한 차트 Helm 설치에 관한 `values.yaml` 파일에서 다음 옵션을 사용하여 운영자를 위한 로그 아카이브를 활성화할 수 있습니다. S3, CloudWatch 또는 둘 다 활성화할 수 있습니다.

```
monitoringConfiguration: 
  s3MonitoringConfiguration:
    logUri: "S3-BUCKET"
    totalFileSize: "1G"
    uploadTimeout: "1m"
  cloudWatchMonitoringConfiguration:
    logGroupName: "flink-log-group"
    logStreamNamePrefix: "example-job-prefix-test-2"
  sideCarResources:
    limits:
      cpuLimit: 1
      memoryLimit: 800Mi
  memoryBufferLimit: 700M
```

`monitoringConfiguration` 아래에서 다음과 같은 구성 옵션을 사용할 수 있습니다.
+ `s3MonitoringConfiguration` - S3에 아카이브하려면 이 옵션을 설정합니다.
+ `logUri`(필수) - 로그를 저장할 S3 버킷 경로.
+ 다음은 로그가 업로드된 후의 S3 버킷 경로 형식입니다.
  + 로그 로테이션이 활성화되지 않았습니다.

    ```
    s3://${logUri}/${POD NAME}/OPERATOR or WEBHOOK/STDOUT or STDERR.gz
    ```
  + 로그 로테이션이 활성화되었습니다. 로테이션된 파일과 현재 파일(날짜 스탬프가 없는 파일)을 모두 사용할 수 있습니다.

    ```
    s3://${logUri}/${POD NAME}/OPERATOR or WEBHOOK/STDOUT or STDERR.gz
    ```

    다음 형식 인덱스는 증가하는 숫자입니다.

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

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