

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

# 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。ReleaseLabel 如果未提供，将通过 emr 获取。
+ **s3 MonitoringConfiguration** — 将此选项设置为存档到 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
    ```
+ **cloud WatchMonitoringConfiguration** — 用于设置转发的配置密钥Amazon CloudWatch。
  + **日志 GroupName**（必填）-您要向其发送日志的 Cloudwatch 日志组的名称。如果日志组不存在，则会自动创建。
  + **log StreamNamePrefix**（可选）-您要向其发送日志的日志流的名称。默认值是空字符串。中的格式如下 CloudWatch 所示：

    ```
    ${{{logStreamNamePrefix}}}/${{{APPLICATION NAME}}}-${{{APPLICATION UID}}}/${{{POD NAME}}}/stdout
    ${{{logStreamNamePrefix}}}/${{{APPLICATION NAME}}}-${{{APPLICATION UID}}}/${{{POD NAME}}}/stderr
    ```
+ s@@ **id** eCarResources（可选）— 用于在启动的 Fluentd sidecar 容器上设置资源限制的配置密钥。
  + **memoryLimit**（可选）：内存限制。根据自身需求进行调整。默认值为 250Mi。
  + **cpuLimit**：CPU 限制。根据自身需求进行调整。默认值为 500m。
+ **容器 LogRotationConfiguration**（可选）-控制容器日志的轮换行为。该功能默认已启用。
  + **rotationSize**（必需）：指定日志轮换的文件大小。可行值的范围从 2KB 到 2GB 不等。rotationSize 参数的数字单位部分以整数形式传递。由于不支持十进制值，您可以指定 1.5GB 的轮换大小，例如值 1500MB。默认值为 2GB。
  + **max FilesToKeep**（必填）— 指定轮换后要在容器中保留的最大文件数。最小值为 1。最大值为 50。默认值为 10。

配置 MonitoringConfiguration 后，您应该能够在 Amazon S3 存储桶或 CloudWatch 两者上查看您的 spark 应用程序驱动程序和执行器日志。对于 Amazon S3 存储桶，需要等待 2 分钟才能刷新第一个日志文件。例如，在 Amazon S3 中，存储桶路径如下所示：

**亚马逊 S3** **> **存储桶** > **{{Bucket name}}**> {{Spark application name - UUID}} > {{Pod Name}} > stderr.gz**

或：

**亚马逊 S3** **> **存储桶** > **{{Bucket name}}**> {{Spark application name - UUID}} > {{Pod Name}} > stdout.gz**

在中 CloudWatch，路径如下所示：

**CloudWatch**> **日志组** > **{{Log group name}}**> {{Pod name}}**/{{Spark application name - UUID}}/stderr**

或：

**CloudWatch**> **日志组** > **{{Log group name}}**> {{Pod name}}**/{{Spark application name - UUID}}/stdout**