

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Utilizzo della configurazione di monitoraggio per monitorare l'operatore Spark Kubernetes e i job Spark
<a name="spark-operator-monitoring-configuration"></a>

La configurazione di monitoraggio consente di configurare facilmente l'archiviazione dei log dell'applicazione Spark e dei log degli operatori su Amazon S3 o su. Amazon CloudWatch Puoi sceglierne uno o entrambi. In questo modo viene aggiunto un sidecar log Agent ai pod Spark Operator, Driver ed Executor e successivamente inoltra i log di questi componenti ai sink configurati.

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

Prima di configurare il monitoraggio, assicurati di completare le seguenti attività di configurazione:

1. (Facoltativo) Se in precedenza hai installato una versione precedente dell'operatore Spark, elimina il *SparkApplicationScheduledSparkApplication/CRD*.

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

1. Crea un ruolo di operator/job esecuzione in IAM se non ne hai già uno.

1. Esegui il comando seguente per aggiornare la politica di fiducia del ruolo di operator/job esecuzione che hai appena creato:

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

1. Modifica la policy di fiducia dei ruoli IAM del tuo ruolo di operator/job esecuzione nel modo seguente:

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

1. Crea una policy di *MonitoringConfiguration* in IAM con le seguenti autorizzazioni:

------
#### [ 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. Allega la politica di cui sopra al tuo ruolo di esecuzione operator/job .

# Registri degli operatori Spark
<a name="spark-operator-monitoring-configuration-logs"></a>

Puoi definire la configurazione del monitoraggio nel modo seguente quando esegui: `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
```

**Configurazione del monitoraggio**

Di seguito sono riportate le opzioni di configurazione disponibili in **MonitoringConfiguration**.
+ **Immagine** (opzionale): URL dell'immagine dell'agente di registro. Verrà recuperato entro emrReleaseLabel se non fornito.
+ **s3 MonitoringConfiguration** — Imposta questa opzione per l'archiviazione su Amazon S3.
  + **logURI** — (obbligatorio) — Il percorso del bucket Amazon S3 in cui desideri archiviare i log.
  + Di seguito sono riportati alcuni esempi di formati per i percorsi dei bucket di Amazon S3, dopo il caricamento dei log. Il primo esempio mostra che la rotazione dei log non è abilitata.

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

    La rotazione del registro è abilitata per impostazione predefinita. È possibile visualizzare sia un file ruotato, con un indice incrementale, sia un file corrente, che è lo stesso dell'esempio precedente.

    ```
    s3://${logUri}/${POD NAME}/operator/stdout_YYYYMMDD_index.gz
    s3://${logUri}/${POD NAME}/operator/stderr_YYYYMMDD_index.gz
    ```
+ **cloudWatchMonitoringConfigurazione**: la chiave di configurazione a cui impostare l'inoltro. Amazon CloudWatch
  + **logGroupName**(obbligatorio): nome del gruppo di Amazon CloudWatch log a cui si desidera inviare i log. Se non esiste, il gruppo viene creato in automatico.
  + **logStreamNamePrefisso** (opzionale): nome del flusso di log a cui si desidera inviare i log. Il valore predefinito è una stringa vuota. Il formato in Amazon CloudWatch è il seguente:

    ```
    ${logStreamNamePrefix}/${POD NAME}/STDOUT or STDERR
    ```
+ **sideCarResources**(opzionale) — La chiave di configurazione per impostare i limiti delle risorse sul contenitore sidecar Fluentd lanciato.
  + **memoryLimit (opzionale): il limite** di memoria. Regola secondo necessità. Il valore predefinito è 512Mi.
  + **CPULimit** (opzionale) — Il limite della CPU. Regola secondo necessità. L'impostazione predefinita è 500 m.
+ **containerLogRotationConfigurazione** (opzionale): controlla il comportamento di rotazione del registro del contenitore. È abilitato per impostazione predefinita.
  + **rotationSize** (obbligatorio): specifica la dimensione del file per la rotazione del registro. L'intervallo di valori possibili è compreso tra 2 KB e 2 GB. La parte relativa all'unità numerica del parametro rotationSize viene trasmessa come numero intero. Poiché i valori decimali non sono supportati, puoi specificare una dimensione di rotazione di 1,5 GB, ad esempio, con il valore 1.500 MB. Il valore predefinito è 2 GB.
  + **maxFilesToKeep** (obbligatorio): specifica il numero massimo di file da conservare nel contenitore dopo la rotazione. Il valore minimo è 1, quello massimo è 50. Il valore predefinito è 10.

Dopo aver configurato *MonitoringConfiguration*, dovresti essere in grado di controllare i log dei pod dell'operatore Spark su un bucket Amazon S3 o su entrambi. Amazon CloudWatch Per un bucket Amazon S3, devi attendere 2 minuti prima che il primo file di log venga svuotato.

****Per trovare i log in Amazon CloudWatch, puoi accedere a quanto segue: **CloudWatch**> Gruppi di log > > /operator/stderr ***Log group name****Pod name*****

****Oppure puoi accedere a: > Gruppi di log > > /operator/stdout **CloudWatch***Log group name****Pod name*******

# Registri delle applicazioni Spark
<a name="spark-operator-monitoring-application-logs"></a>

Puoi definire questa configurazione nel modo seguente.

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

**Di seguito sono riportate le opzioni di configurazione disponibili in MonitoringConfiguration.**
+ **Immagine** (opzionale): URL dell'immagine dell'agente di registro. Verrà recuperato entro emrReleaseLabel se non fornito.
+ **s3 MonitoringConfiguration** — Imposta questa opzione per l'archiviazione su Amazon S3.
  + **logURI** (obbligatorio): il percorso del bucket Amazon S3 in cui desideri archiviare i log. Il primo esempio mostra che la rotazione dei log non è abilitata:

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

    La rotazione dei log è abilitata per impostazione predefinita. È possibile utilizzare sia un file ruotato (con indice incrementale) sia un file corrente (uno senza il timbro della data).

    ```
    s3://${logUri}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stdout_YYYYMMDD_index.gz
    s3://${logUri}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stderr_YYYYMMDD_index.gz
    ```
+ **cloudWatchMonitoringConfigurazione**: la chiave di configurazione a cui impostare l'inoltro. Amazon CloudWatch
  + **logGroupName**(obbligatorio) — Il nome del gruppo di log di Cloudwatch a cui desideri inviare i log. Il gruppo viene creato automaticamente se non esiste.
  + **logStreamNamePrefisso** (opzionale): il nome del flusso di log a cui si desidera inviare i log. Il valore predefinito è una stringa vuota. Il formato in CloudWatch è il seguente:

    ```
    ${logStreamNamePrefix}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stdout
    ${logStreamNamePrefix}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stderr
    ```
+ **sideCarResources**(opzionale) — La chiave di configurazione per impostare i limiti delle risorse sul contenitore sidecar Fluentd lanciato.
  + **memoryLimit (opzionale): il limite** di memoria. Regola secondo necessità. L'impostazione predefinita è 250 Mi.
  + **CPULimit: il limite** della CPU. Regola secondo necessità. L'impostazione predefinita è 500 m.
+ **containerLogRotationConfigurazione** (opzionale): controlla il comportamento di rotazione del registro del contenitore. È abilitato per impostazione predefinita.
  + **rotationSize** (obbligatorio): specifica la dimensione del file per la rotazione del registro. L'intervallo di valori possibili è compreso tra 2 KB e 2 GB. La parte relativa all'unità numerica del parametro rotationSize viene trasmessa come numero intero. Poiché i valori decimali non sono supportati, puoi specificare una dimensione di rotazione di 1,5 GB, ad esempio, con il valore 1.500 MB. Il valore predefinito è 2 GB.
  + **maxFilesToKeep** (obbligatorio): specifica il numero massimo di file da conservare nel contenitore dopo la rotazione. Il valore minimo è 1. Il valore massimo è 50. Il valore predefinito è 10.

Dopo aver configurato MonitoringConfiguration, dovresti essere in grado di controllare i log del driver dell'applicazione Spark e dell'executor su un bucket Amazon S3 o su entrambi. CloudWatch Per un bucket Amazon S3, devi attendere 2 minuti prima che il primo file di log venga svuotato. Ad esempio, in Amazon S3, il percorso del bucket appare come segue:

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

O:

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

In CloudWatch, il percorso appare come segue:

**CloudWatch**> **Gruppi di log** > ***Log group name***>*Spark application name - UUID*/*Pod name***/stderr**

O:

**CloudWatch****> **Gruppi di log** > >/***Log group name***/stdout *Spark application name - UUID* *Pod name***