

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Usar a configuração de monitoramento para monitorar o operador Spark Kubernetes e os trabalhos Spark
<a name="spark-operator-monitoring-configuration"></a>

A configuração de monitoramento permite configurar facilmente o arquivamento de logs da sua aplicação Spark e logs do operador no Amazon S3 ou no Amazon CloudWatch. Você pode escolher um ou os dois. Isso adiciona um sidecar do agente de log ao seu pod do operador Spark, driver e pods executores e, subsequentemente, encaminha os logs desses componentes para seus coletores configurados.

## Pré-requisitos
<a name="spark-operator-monitoring-configuration-prereqs"></a>

Antes de configurar o monitoramento, certifique-se de concluir as seguintes tarefas de configuração:

1. (Opcional) Se você instalou anteriormente uma versão mais antiga do operador Spark, exclua o *SparkApplicationScheduledSparkApplication/CRD*.

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

1. Crie uma função de operator/job execução no IAM se você ainda não tiver uma.

1. Execute o comando a seguir para atualizar a política de confiança da função de operator/job execução que você acabou de criar:

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

1. Edite a política de confiança da função do IAM da sua função de operator/job execução da seguinte forma:

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

1. Crie uma política *monitoringConfiguration* no IAM com as seguintes permissões:

------
#### [ 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. Anexe a política acima à sua função operator/job de execução.

# Logs do operador do Spark
<a name="spark-operator-monitoring-configuration-logs"></a>

É possível definir a configuração de monitoramento da seguinte maneira ao realizar `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
```

**Monitoramento de configuração**

A seguir, estão apresentadas as opções de configuração disponíveis em **monitoringConfiguration**.
+ **Imagem** (opcional): URL da imagem do agente de log. Será buscado emrReleaseLabel se não for fornecido.
+ **s3 MonitoringConfiguration** — Defina essa opção para arquivar no Amazon S3.
  + **logUri** (necessário): o caminho do bucket do Amazon S3 em que você deseja armazenar seus logs.
  + A seguir estão alguns exemplos de formatos para os caminhos do bucket do S3, após o upload dos logs. O primeiro exemplo mostra que a alternância de logs não está habilitada.

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

    A alternância de log está habilitada por padrão. Você pode ver tanto um arquivo com alternância, com um índice incremental, quanto um arquivo atual, que é igual ao exemplo anterior.

    ```
    s3://${logUri}/${POD NAME}/operator/stdout_YYYYMMDD_index.gz
    s3://${logUri}/${POD NAME}/operator/stderr_YYYYMMDD_index.gz
    ```
+ **cloudWatchMonitoringConfiguração** — A chave de configuração para a qual configurar o encaminhamento. Amazon CloudWatch
  + **logGroupName**(obrigatório) — Nome do grupo de Amazon CloudWatch registros para o qual você deseja enviar registros. O grupo é criado automaticamente, se não existir.
  + **logStreamNamePrefixo** (opcional) — Nome do fluxo de registros para o qual você deseja enviar os registros. O valor padrão é uma string vazia. O formato em Amazon CloudWatch é o seguinte:

    ```
    ${logStreamNamePrefix}/${POD NAME}/STDOUT or STDERR
    ```
+ **sideCarResources**(opcional) — A chave de configuração para definir limites de recursos no contêiner auxiliar Fluentd lançado.
  + **memoryLimit** (opcional): o limite de memória. Ajuste de acordo com suas necessidades. O padrão é de 512Mi.
  + **cpuLimit** (opcional): o limite da CPU. Ajuste de acordo com suas necessidades. O padrão é 500m.
+ **containerLogRotationConfiguração** (opcional) — controla o comportamento de rotação do log do contêiner. Ele é habilitado por padrão.
  + **rotationSize** (necessáriol): especifica o tamanho do arquivo para a alternância de log. O intervalo de valores possíveis é de 2 KB a 2 GB. A parcela numérica da unidade do parâmetro rotationSize é transferida como um número inteiro. Como não há suporte para valores decimais, você pode especificar um tamanho de rotação de 1,5 GB, por exemplo, com o valor 1.500 MB. O padrão é 2 GB.
  + **maxFilesToManter** (obrigatório) — Especifica o número máximo de arquivos a serem retidos no contêiner após a rotação. O valor mínimo é de 1 e o valor máximo é de 50. O padrão é 10.

Depois de configurar o *MonitoringConfiguration*, você deve ser capaz de verificar os registros do pod do operador do Spark em um bucket do Amazon S3 ou em ambos. Amazon CloudWatch Para um bucket do Amazon S3, você precisa esperar 2 minutos para que o primeiro arquivo de log seja liberado.

Para encontrar os logins Amazon CloudWatch, você pode navegar até o seguinte: **CloudWatch**> **Grupos de registros** > > ***Log group name**Pod name*****/operator/stderr**

Ou você pode navegar até: **CloudWatch**> **Grupos de registros** > > ***Log group name**Pod name*****/operator/stdout**

# Logs da aplicação do Spark
<a name="spark-operator-monitoring-application-logs"></a>

Você pode definir essa configuração da maneira apresentada a seguir.

```
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 seguir, estão apresentadas as opções de configuração disponíveis em **monitoringConfiguration**.
+ **Imagem** (opcional): URL da imagem do agente de log. Será buscado emrReleaseLabel se não for fornecido.
+ **s3 MonitoringConfiguration** — Defina essa opção para arquivar no Amazon S3.
  + **logUri** (necessário): o caminho do bucket do Amazon S3 em que você deseja armazenar seus logs. O primeiro exemplo mostra que a alternância de logs não está habilitada:

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

    A alternância de log está habilitada por padrão. Você pode usar tanto um arquivo com alternância (com índice incremental) quanto um arquivo atual (sem carimbo de data/hora).

    ```
    s3://${logUri}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stdout_YYYYMMDD_index.gz
    s3://${logUri}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stderr_YYYYMMDD_index.gz
    ```
+ **cloudWatchMonitoringConfiguração** — A chave de configuração para a qual configurar o encaminhamento. Amazon CloudWatch
  + **logGroupName**(obrigatório) — O nome do grupo de logs do Cloudwatch para o qual você deseja enviar registros. O grupo é criado automaticamente, se não existir.
  + **logStreamNamePrefixo** (opcional) — O nome do fluxo de registros para o qual você deseja enviar os registros. O valor padrão é uma string vazia. O formato em CloudWatch é o seguinte:

    ```
    ${logStreamNamePrefix}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stdout
    ${logStreamNamePrefix}/${APPLICATION NAME}-${APPLICATION UID}/${POD NAME}/stderr
    ```
+ **sideCarResources**(opcional) — A chave de configuração para definir limites de recursos no contêiner auxiliar Fluentd lançado.
  + **memoryLimit** (opcional): o limite de memória. Ajuste de acordo com suas necessidades. O padrão é 250Mi.
  + **cpuLimit**: o limite da CPU. Ajuste de acordo com suas necessidades. O padrão é 500m.
+ **containerLogRotationConfiguração** (opcional) — controla o comportamento de rotação do log do contêiner. Ele é habilitado por padrão.
  + **rotationSize** (necessáriol): especifica o tamanho do arquivo para a alternância de log. O intervalo de valores possíveis é de 2 KB a 2 GB. A parcela numérica da unidade do parâmetro rotationSize é transferida como um número inteiro. Como não há suporte para valores decimais, você pode especificar um tamanho de rotação de 1,5 GB, por exemplo, com o valor 1.500 MB. O padrão é 2 GB.
  + **maxFilesToManter** (obrigatório) — Especifica o número máximo de arquivos a serem retidos no contêiner após a rotação. O valor mínimo é 1. O valor máximo é 50. O padrão é 10.

Depois de configurar o MonitoringConfiguration, você deve ser capaz de verificar os registros do driver e do executor do aplicativo Spark em um bucket do Amazon S3 ou em ambos. CloudWatch Para um bucket do Amazon S3, você precisa esperar 2 minutos para que o primeiro arquivo de log seja liberado. Por exemplo, no Amazon S3, o caminho do bucket aparece da seguinte maneira:

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

Ou:

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

Em CloudWatch, o caminho aparece da seguinte forma:

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

Ou:

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