

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Uso de la configuración de supervisión para supervisar el operador de Spark Kubernetes y los trabajos de Spark
<a name="spark-operator-monitoring-configuration"></a>

La configuración de supervisión le permite configurar fácilmente el archivado de registros de sus aplicaciones y registros de operadores de Spark en Amazon S3 o Amazon CloudWatch. Puede elegir uno o ambos. Al hacerlo, se agrega un contenedor asociado de agentes de registro a los pods de operadores, controladores y ejecutores de Spark y, posteriormente, se reenvían los registros de estos componentes a los receptores configurados.

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

Antes de configurar la supervisión, asegúrese de completar las siguientes tareas de configuración:

1. (Opcional) Si anteriormente instalaste una versión anterior del operador Spark, elimina la *SparkApplication/ScheduledSparkApplication*CRD.

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

1. Cree un rol de operator/job ejecución en IAM si aún no lo tiene.

1. Ejecute el siguiente comando para actualizar la política de confianza del rol de operator/job ejecución que acaba de crear:

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

1. Edite la política de confianza del rol de IAM de su rol de operator/job ejecución de la siguiente manera:

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

1. Cree una política *monitoringConfiguration* en IAM con los siguientes permisos:

------
#### [ 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. Adjunte la política anterior a su función operator/job de ejecución.

# Registros del operador de Spark
<a name="spark-operator-monitoring-configuration-logs"></a>

Puede definir la configuración de supervisión de la siguiente manera cuando realice `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
```

**Monitorización de la configuración**

A continuación, se describen las opciones de configuración disponibles en **monitoringConfiguration**.
+ **Imagen** (opcional): URL de la imagen del agente de registro. Se procesará emrReleaseLabel si no se proporciona.
+ **s3 MonitoringConfiguration** — Configure esta opción para archivar en Amazon S3.
  + **logUri** (obligatorio): la ruta del bucket de Amazon S3 donde desea almacenar sus registros.
  + Los siguientes son ejemplos de formatos para las rutas de los buckets de Amazon S3, después de que se carguen los registros. El primer ejemplo muestra que la rotación de registros no está habilitada.

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

    La rotación de registros está habilitada de forma predeterminada. Puede ver tanto un archivo rotado, con un índice creciente, como un archivo actual, que es igual al del ejemplo anterior.

    ```
    s3://${logUri}/${POD NAME}/operator/stdout_YYYYMMDD_index.gz
    s3://${logUri}/${POD NAME}/operator/stderr_YYYYMMDD_index.gz
    ```
+ **cloudWatchMonitoringConfiguración**: la clave de configuración a la que se debe configurar el reenvío. Amazon CloudWatch
  + **logGroupName**(obligatorio): nombre del grupo de Amazon CloudWatch registros al que desea enviar los registros. Si el grupo no existe, se crea automáticamente.
  + **logStreamNamePrefijo** (opcional): nombre del flujo de registros al que desea enviar los registros. El valor predeterminado es una cadena vacía. El formato Amazon CloudWatch es el siguiente:

    ```
    ${logStreamNamePrefix}/${POD NAME}/STDOUT or STDERR
    ```
+ **sideCarResources**(opcional): la clave de configuración para establecer los límites de recursos en el contenedor sidecar Fluentd lanzado.
  + **memoryLimit** (opcional): el límite de memoria. Ajústelo según sus necesidades. El valor predeterminado es 512Mi.
  + **cpuLimit** (opcional): el límite de la CPU. Ajústelo según sus necesidades. El valor predeterminado es 500 m.
+ **containerLogRotationConfiguración** (opcional): controla el comportamiento de rotación del registro del contenedor. Está habilitada de forma predeterminada.
  + **rotationSize** (obligatorio): especifica el tamaño del archivo para la rotación del registro. El rango de valores posibles va de 2 KB a 2 GB. La parte de la unidad numérica del parámetro rotationSize se pasa como un número entero. Como no se admiten valores decimales, puede especificar un tamaño de rotación de 1,5 GB, por ejemplo, con el valor 1500 MB. El valor predeterminado es 2 GB.
  + **maxFilesToConservar** (obligatorio): especifica el número máximo de archivos que se deben conservar en el contenedor una vez realizada la rotación. El valor mínimo es 1 y el máximo, 50. El valor predeterminado es 10.

Tras configurar *MonitoringConfiguration*, deberías poder comprobar los registros de los pods de Spark Operator en un bucket de Amazon S3 o Amazon CloudWatch en ambos. Para un bucket de Amazon S3, debe esperar 2 minutos para poder descartar el primer archivo de registro.

**Para encontrar los registros Amazon CloudWatch, dirígete a lo siguiente: **CloudWatch**> **Grupos de registros** > > /operator/stderr ***Log group name****Pod name***

****También puede ir a: > Grupos de registros > > /operator/stdout **CloudWatch***Log group name****Pod name*******

# Registros de aplicaciones de Spark
<a name="spark-operator-monitoring-application-logs"></a>

Puede definir la configuración de la siguiente manera:

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

A continuación, se describen las opciones de configuración disponibles en **monitoringConfiguration**.
+ **Imagen** (opcional): URL de la imagen del agente de registro. Se recuperará si no se proporciona. emrReleaseLabel 
+ **s3 MonitoringConfiguration** — Configure esta opción para archivar en Amazon S3.
  + **logUri** (obligatorio): la ruta del bucket de Amazon S3 donde desea almacenar sus registros. El primer ejemplo muestra que la rotación de registros no está habilitada:

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

    El registro está habilitado de forma predeterminada. Puede utilizar tanto un archivo rotado (con índice creciente) como un archivo actual (uno sin la fecha).

    ```
    s3://${logUri}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stdout_YYYYMMDD_index.gz
    s3://${logUri}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stderr_YYYYMMDD_index.gz
    ```
+ **cloudWatchMonitoringConfiguración**: la clave de configuración a la que se debe configurar el reenvío. Amazon CloudWatch
  + **logGroupName**(obligatorio): el nombre del grupo de registros de Cloudwatch al que quieres enviar los registros. Si el grupo no existe, se crea automáticamente.
  + **logStreamNamePrefijo** (opcional): el nombre del flujo de registros al que quieres enviar los registros. El valor predeterminado es una cadena vacía. El formato CloudWatch es el siguiente:

    ```
    ${logStreamNamePrefix}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stdout
    ${logStreamNamePrefix}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stderr
    ```
+ **sideCarResources**(opcional): la clave de configuración para establecer los límites de recursos en el contenedor sidecar Fluentd lanzado.
  + **memoryLimit** (opcional): el límite de memoria. Ajústelo según sus necesidades. El valor predeterminado es 250Mi.
  + **cpuLimit**: el límite de la CPU. Ajústelo según sus necesidades. El valor predeterminado es 500 m.
+ **containerLogRotationConfiguración** (opcional): controla el comportamiento de rotación del registro del contenedor. Está habilitada de forma predeterminada.
  + **rotationSize** (obligatorio): especifica el tamaño del archivo para la rotación del registro. El rango de valores posibles va de 2 KB a 2 GB. La parte de la unidad numérica del parámetro rotationSize se pasa como un número entero. Como no se admiten valores decimales, puede especificar un tamaño de rotación de 1,5 GB, por ejemplo, con el valor 1500 MB. El valor predeterminado es 2 GB.
  + **maxFilesToConservar** (obligatorio): especifica el número máximo de archivos que se deben conservar en el contenedor una vez realizada la rotación. El valor mínimo es 1. El valor máximo es 50. El valor predeterminado es 10.

Tras configurar MonitoringConfiguration, deberías poder comprobar los registros del controlador y del ejecutor de la aplicación Spark en un bucket de Amazon S3 o en ambos. CloudWatch Para un bucket de Amazon S3, debe esperar 2 minutos para poder descartar el primer archivo de registro. Por ejemplo, en Amazon S3, la ruta del bucket es la siguiente:

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

O bien:

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

En CloudWatch, la ruta aparece de la siguiente manera:

**CloudWatch**> **Grupos de registros** > ***Log group name***>*Spark application name - UUID*/*Pod name***/stderr**

O bien:

**CloudWatch****> **Grupos de registros** > >/***Log group name***/stdout *Spark application name - UUID* *Pod name***