

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用監控組態來監控 Flink Kubernetes Operator 和 Flink 任務
<a name="jobruns-flink-monitoring-configuration"></a>

監控組態可讓您輕鬆地將 Flink 應用程式和 Operator 日誌的日誌封存設定為 S3 和/或 CloudWatch (您可以選擇其中一個或兩者)。這樣做可將 FluentD 附屬項新增到 JobManager 和 TaskManager Pod，隨後將這些元件的日誌轉發到您設定的接收器。

**注意**  
必須為 Flink Oerator 和 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 附屬容器上設定資源限制的組態金鑰。
  + `memoryLimit` (選用) - 預設值為 512Mi。根據需要進行調整。
  + `cpuLimit` (選用) - 此選項沒有預設值。根據需要進行調整。
+ `containerLogRotationConfiguration` (選用) - 控制容器日誌輪換行為。依預設會啟用此功能。
  + `rotationSize` (必要) - 指定日誌輪換的檔案大小。可能的值範圍為 2KB 至 2GB。rotationSize 參數的數值單位部分會以整數形式傳遞。由於不支援小數值，因此可以使用值 1500MB 來指定 1.5GB 的輪換大小。預設值為 2GB。
  + `maxFilesToKeep` (必要) — 指定輪換發生後，要在容器中保留的檔案數上限。下限值是 1，上限值是 50。預設為 10。

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

也可以使用 Helm Chart 安裝中 `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 附屬容器上設定資源限制的組態金鑰。
  + `memoryLimit` (選用) - 記憶體限制。根據需要進行調整。預設值為 512Mi。
  + `cpuLimit` - CPU 限制。根據需要進行調整。無預設值。
+ `containerLogRotationConfiguration` (選用) - 控制容器日誌輪換行為。依預設會啟用此功能。
  + `rotationSize` (必要) - 指定日誌輪換的檔案大小。可能的值範圍為 2KB 至 2GB。rotationSize 參數的數值單位部分會以整數形式傳遞。由於不支援小數值，因此可以使用值 1500MB 來指定 1.5GB 的輪換大小。預設值為 2GB。
  + `maxFilesToKeep` (必要) — 指定輪換發生後，要在容器中保留的檔案數上限。下限值是 1，上限值是 50。預設為 10。