

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用监控配置监控 Flink Kubernetes Operator 和 Flink 作业
<a name="jobruns-flink-monitoring-configuration"></a>

监控配置使您可以轻松地将 Flink 应用程序和操作员日志的日志存档设置为 S3 and/or CloudWatch （您可以选择其中一个或两个）。这样做会向 JobManager 你的 TaskManager 和容器添加一个 FluentD 边车，然后将这些组件的日志转发到你配置的接收器。

**注意**  
必须为 Flink Operator 和 Flink 任务（服务账户）设置服务账户的 IAM 角色，才能使用此功能，因为它需要与其他 AWS 服务进行交互。您必须按照 [设置 Amazon EMR on EKS 的 Flink Kubernetes Operator](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 的轮换大小，例如值 1500MB。默认值为 2GB。
  + `maxFilesToKeep`（必需）：指定轮换后要在容器中保留的最大文件数。最小值为 1，最大值为 50。默认值为 10。

## Flink Operator 日志
<a name="jobruns-flink-monitoring-configuration-operator-logs"></a>

我们还可以使用 Helm 图表安装 `values.yaml` 文件中的以下选项，为 Operator 启用日志存档。您可以启用 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 的轮换大小，例如值 1500MB。默认值为 2GB。
  + `maxFilesToKeep`（必需）：指定轮换后要在容器中保留的最大文件数。最小值为 1，最大值为 50。默认值为 10。