

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Verwenden der Überwachungskonfiguration zur Überwachung des Spark-Kubernetes-Operators und der Spark-Jobs
<a name="spark-operator-monitoring-configuration"></a>

Mit der Überwachungskonfiguration können Sie ganz einfach die Protokollarchivierung Ihrer Spark-Anwendung und Ihrer Bedienerprotokolle in Amazon S3 oder auf einrichten Amazon CloudWatch. Sie können eines oder beide auswählen. Dadurch wird ein Log-Agent-Sidecar zu Ihren Spark-Operator-Pods, -Treibern und Executor-Pods hinzugefügt und anschließend werden die Logs dieser Komponenten an Ihre konfigurierten Senken weitergeleitet.

## Voraussetzungen
<a name="spark-operator-monitoring-configuration-prereqs"></a>

Bevor Sie die Überwachung konfigurieren, stellen Sie sicher, dass Sie die folgenden Einrichtungsaufgaben abgeschlossen haben:

1. (Optional) Wenn Sie zuvor eine ältere Version des Spark-Operators installiert haben, löschen Sie die ScheduledSparkApplication CRD *SparkApplication/*.

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

1. Erstellen Sie eine operator/job Ausführungsrolle in IAM, falls Sie noch keine haben.

1. Führen Sie den folgenden Befehl aus, um die Vertrauensrichtlinie der gerade erstellten operator/job Ausführungsrolle zu aktualisieren:

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

1. Bearbeiten Sie die IAM-Rollen-Vertrauensrichtlinie Ihrer operator/job Ausführungsrolle wie folgt:

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

1. Erstellen Sie in *IAM eine MonitoringConfiguration-Richtlinie* mit den folgenden Berechtigungen:

------
#### [ 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. Fügen Sie die obige Richtlinie Ihrer Ausführungsrolle hinzu. operator/job 

# Spark-Operator-Protokolle
<a name="spark-operator-monitoring-configuration-logs"></a>

Dabei können Sie die Überwachungskonfiguration auf folgende Weise definieren`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
```

**Konfiguration der Überwachung**

Im Folgenden sind die verfügbaren Konfigurationsoptionen unter **MonitoringConfiguration** aufgeführt.
+ **Bild** (optional) — Die Bild-URL des Agenten protokollieren. Wird abgerufen, emrReleaseLabel falls nicht angegeben.
+ **s3 MonitoringConfiguration** — Stellen Sie diese Option ein, um auf Amazon S3 zu archivieren.
  + **logURI** — (erforderlich) — Der Amazon S3 S3-Bucket-Pfad, in dem Sie Ihre Protokolle speichern möchten.
  + Im Folgenden finden Sie Beispielformate für die Amazon S3 S3-Bucket-Pfade, nachdem die Protokolle hochgeladen wurden. Das erste Beispiel zeigt, dass keine Protokollrotation aktiviert ist.

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

    Die Protokollrotation ist standardmäßig aktiviert. Sie können sowohl eine rotierte Datei mit einem inkrementierenden Index als auch eine aktuelle Datei sehen, die mit dem vorherigen Beispiel identisch ist.

    ```
    s3://${logUri}/${POD NAME}/operator/stdout_YYYYMMDD_index.gz
    s3://${logUri}/${POD NAME}/operator/stderr_YYYYMMDD_index.gz
    ```
+ **cloudWatchMonitoringKonfiguration** — Der Konfigurationsschlüssel, zu dem die Weiterleitung eingerichtet werden soll Amazon CloudWatch.
  + **logGroupName**(erforderlich) — Name der Amazon CloudWatch Protokollgruppe, an die Sie Protokolle senden möchten. Die Gruppe wird automatisch erstellt, wenn sie noch nicht vorhanden ist.
  + **logStreamNamePräfix** (optional) — Name des Log-Streams, in den Sie Logs senden möchten. Der Standardwert ist eine leere Zeichenfolge. Das Format in Amazon CloudWatch lautet wie folgt:

    ```
    ${logStreamNamePrefix}/${POD NAME}/STDOUT or STDERR
    ```
+ **sideCarResources**(optional) — Der Konfigurationsschlüssel zum Festlegen von Ressourcenlimits für den gestarteten Fluentd-Sidecar-Container.
  + **memoryLimit (optional) — Das Speicherlimit**. Passen Sie ihn entsprechend Ihren Anforderungen an. Der Standardwert ist 512 Mi.
  + **cpuLimit** (optional) — Das CPU-Limit. Passen Sie ihn entsprechend Ihren Anforderungen an. Die Standardeinstellung ist 500 m.
+ **containerLogRotationKonfiguration** (optional) — Steuert das Rotationsverhalten des Container-Logs. Sie ist standardmäßig aktiviert.
  + **RotationSize** (erforderlich) — Gibt die Dateigröße für die Protokollrotation an. Der Bereich der möglichen Werte ist von 2 KB bis 2 GB. Die numerische Einheit des rotationSize-Parameters wird als Ganzzahl übergeben. Da Dezimalwerte nicht unterstützt werden, können Sie mit dem Wert 1 500 MB beispielsweise eine Rotationsgröße von 1,5 GB angeben. Der Standardwert ist 2 GB.
  + **maxFilesToKeep** (erforderlich) — Gibt die maximale Anzahl von Dateien an, die nach der Rotation im Container aufbewahrt werden sollen. Der kleinste Wert ist 1 und der größte Wert ist 50. Der Standardwert ist 10.

Nach der Konfiguration der *MonitoringConfiguration* sollten Sie in der Lage sein, die Spot-Logs des Spark-Operators in einem Amazon S3 S3-Bucket oder Amazon CloudWatch in beiden zu überprüfen. Bei einem Amazon S3 S3-Bucket müssen Sie 2 Minuten warten, bis die erste Protokolldatei geleert wurde.

**Um die Logs zu finden Amazon CloudWatch, können Sie wie folgt navigieren: **CloudWatch**> **Protokollgruppen > > ***Log group name***/operator/stderr** *Pod name***

****Oder Sie können zu: **CloudWatch**> Protokollgruppen > > /operator/stdout navigieren ***Log group name****Pod name*****

# Spark-Anwendungsprotokolle
<a name="spark-operator-monitoring-application-logs"></a>

Sie können diese Konfiguration folgendermaßen definieren.

```
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"
```

Im Folgenden sind die verfügbaren Konfigurationsoptionen unter **MonitoringConfiguration** aufgeführt.
+ **Bild** (optional) — Die Bild-URL des Agenten protokollieren. Wird abgerufen, emrReleaseLabel falls nicht angegeben.
+ **s3 MonitoringConfiguration** — Stellen Sie diese Option ein, um auf Amazon S3 zu archivieren.
  + **logURI** (erforderlich) — Der Amazon S3 S3-Bucket-Pfad, in dem Sie Ihre Protokolle speichern möchten. Das erste Beispiel zeigt, dass keine Protokollrotation aktiviert ist:

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

    Die Protokollrotation ist standardmäßig aktiviert. Sie können sowohl eine rotierte Datei (mit inkrementierendem Index) als auch eine aktuelle Datei (eine Datei ohne Datumsstempel) verwenden.

    ```
    s3://${logUri}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stdout_YYYYMMDD_index.gz
    s3://${logUri}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stderr_YYYYMMDD_index.gz
    ```
+ **cloudWatchMonitoringKonfiguration** — Der Konfigurationsschlüssel, zu dem die Weiterleitung eingerichtet werden soll Amazon CloudWatch.
  + **logGroupName**(erforderlich) — Der Name der Cloudwatch-Protokollgruppe, an die Sie Protokolle senden möchten. Die Gruppe wird automatisch erstellt, falls sie nicht existiert.
  + **logStreamNamePräfix** (optional) — Der Name des Log-Streams, in den Sie Logs senden möchten. Der Standardwert ist eine leere Zeichenfolge. Das Format in CloudWatch lautet wie folgt:

    ```
    ${logStreamNamePrefix}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stdout
    ${logStreamNamePrefix}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stderr
    ```
+ **sideCarResources**(optional) — Der Konfigurationsschlüssel zum Festlegen von Ressourcenlimits für den gestarteten Fluentd-Sidecar-Container.
  + **memoryLimit (optional) — Das Speicherlimit**. Passen Sie ihn entsprechend Ihren Anforderungen an. Die Standardeinstellung ist 250 Mi.
  + **cpuLimit — Das CPU-Limit**. Passen Sie ihn entsprechend Ihren Anforderungen an. Die Standardeinstellung ist 500 m.
+ **containerLogRotationKonfiguration** (optional) — Steuert das Rotationsverhalten des Container-Logs. Sie ist standardmäßig aktiviert.
  + **RotationSize** (erforderlich) — Gibt die Dateigröße für die Protokollrotation an. Der Bereich der möglichen Werte ist von 2 KB bis 2 GB. Die numerische Einheit des rotationSize-Parameters wird als Ganzzahl übergeben. Da Dezimalwerte nicht unterstützt werden, können Sie mit dem Wert 1 500 MB beispielsweise eine Rotationsgröße von 1,5 GB angeben. Der Standardwert ist 2 GB.
  + **maxFilesToKeep** (erforderlich) — Gibt die maximale Anzahl von Dateien an, die nach der Rotation im Container aufbewahrt werden sollen. Der minimale Wert beträgt 1. Der Höchstwert ist 50. Der Standardwert ist 10.

Nach der Konfiguration von MonitoringConfiguration sollten Sie in der Lage sein, Ihre Spark-Anwendungstreiber- und Executor-Protokolle in einem Amazon S3 S3-Bucket oder in beiden zu überprüfen. CloudWatch Bei einem Amazon S3 S3-Bucket müssen Sie 2 Minuten warten, bis die erste Protokolldatei geleert ist. In Amazon S3 sieht der Bucket-Pfad beispielsweise wie folgt aus:

**Amazon S3** **> **Eimer** > > ***Bucket name***> *Spark application name - UUID* *Pod Name* > stderr.gz**

Oder:

**Amazon S3** **> **Eimer** > > ***Bucket name***> *Spark application name - UUID* *Pod Name* > stdout.gz**

 CloudWatchIn sieht der Pfad wie folgt aus:

**CloudWatch**> **Protokollgruppen** > ***Log group name***>*Spark application name - UUID*/*Pod name***/stderr**

Oder:

**CloudWatch****> **Protokollgruppen** > >/***Log group name***/stdout *Spark application name - UUID* *Pod name***