

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.

# Supervisión del operador de Flink Kubernetes y de los trabajos de Flink
<a name="jobruns-flink-monitoring"></a>

En esta sección, se describen varias formas en las que puede supervisar sus trabajos de Flink con Amazon EMR en EKS. Estas incluyen la integración de Flink con el Amazon Managed Service para Prometheus, el uso del *panel web de Flink*, que proporciona el estado y las métricas de los trabajos, o el uso de una configuración de monitorización para enviar datos de registro a Amazon S3 y Amazon CloudWatch.

**Topics**
+ [Uso de Amazon Managed Service para Prometheus para supervisar los trabajos de Flink](jobruns-flink-monitoring-prometheus.md)
+ [Uso de la IU de Flink para supervisar los trabajos de Flink](jobruns-flink-monitoring-ui.md)
+ [Uso de la configuración de supervisión para supervisar el operador de Flink Kubernetes y los trabajos de Flink](jobruns-flink-monitoring-configuration.md)

# Uso de Amazon Managed Service para Prometheus para supervisar los trabajos de Flink
<a name="jobruns-flink-monitoring-prometheus"></a>

Puede integrar Apache Flink a Amazon Managed Service para Prometheus (portal de administración). Amazon Managed Service para Prometheus admite la ingesta de métricas de Amazon Managed Service para servidores de Prometheus en clústeres que se ejecuten en Amazon EKS. Amazon Managed Service para Prometheus funciona junto con un servidor de Prometheus que ya se esté ejecutando en su clúster de Amazon EKS. Al ejecutar la integración de Amazon Managed Service para Prometheus con el operador de Flink de Amazon EMR, un servidor de Prometheus se implementará y configurará automáticamente para que se integre con Amazon Managed Service para Prometheus.

1. [ Cree un espacio de trabajo de Amazon Managed Service para Prometheus](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-onboard-create-workspace.html). Este espacio de trabajo sirve como punto de conexión de ingestión. Más adelante necesitará la URL de escritura remota.

1. Configure roles de IAM para cuentas de servicio.

   Para este método de incorporación, utilice roles de IAM para las cuentas de servicio del clúster de Amazon EKS en el que se ejecuta el servidor de Prometheus. Estos roles también se denominan *roles de servicio*.

   Si aún no tiene los roles, [configure los roles de servicio para la ingesta de métricas de los clústeres de Amazon EKS.](https://docs.aws.amazon.com/prometheus/latest/userguide/set-up-irsa.html)

   Antes de continuar, cree un rol de IAM llamado `amp-iamproxy-ingest-role`.

1. Instale el operador de Flink de Amazon EMR con Amazon Managed Service para Prometheus.

Ahora que dispone de un espacio de trabajo de Amazon Managed Service para Prometheus, tiene un rol de IAM dedicado para Amazon Managed Service para Prometheus y cuenta con los permisos necesarios, puede instalar el operador de Flink de Amazon EMR.

Cree un archivo `enable-amp.yaml`. Este archivo te permite usar una configuración personalizada para anular la configuración de Amazon Managed Service para Prometheus. Asegúrese de utilizar sus propios roles.

```
kube-prometheus-stack:
    prometheus:
    serviceAccount:
        create: true
        name: "amp-iamproxy-ingest-service-account"
        annotations:
            eks.amazonaws.com/role-arn: "arn:aws:iam::<AWS_ACCOUNT_ID>:role/amp-iamproxy-ingest-role"
    remoteWrite:
        - url: <AMAZON_MANAGED_PROMETHEUS_REMOTE_WRITE_URL>
        sigv4:
            region: <AWS_REGION>
        queueConfig:
            maxSamplesPerSend: 1000
            maxShards: 200
            capacity: 2500
```

Utilice el comando [https://helm.sh/docs/helm/helm_install/](https://helm.sh/docs/helm/helm_install/) para pasar las anulaciones al gráfico de `flink-kubernetes-operator`.

```
helm upgrade -n <namespace> flink-kubernetes-operator \
   oci://public.ecr.aws/emr-on-eks/flink-kubernetes-operator \
   --set prometheus.enabled=true
   -f enable-amp.yaml
```

El comando instala automáticamente un informador de Prometheus en el operador del puerto 9999. Cualquier futuro `FlinkDeployment` también expone un puerto `metrics` en 9249.
+ Las métricas del operador de Flink aparecen en Prometheus con la etiqueta `flink_k8soperator_`.
+ Las métricas de Flink TaskManager aparecen en Prometheus con la etiqueta `flink_taskmanager_`.
+ Las métricas de Flink JobManager aparecen en Prometheus con la etiqueta `flink_jobmanager_`.

# Uso de la IU de Flink para supervisar los trabajos de Flink
<a name="jobruns-flink-monitoring-ui"></a>

Para supervisar el estado y el rendimiento de una aplicación de Flink en ejecución, utilice el *panel web de Flink*. Este panel proporciona información sobre el estado del trabajo, el número TaskManagers, las métricas y los registros del trabajo. También le permite ver y modificar la configuración del trabajo de Flink e interactuar con el clúster de Flink al enviar o cancelar trabajos.

Para acceder al panel web de Flink de una aplicación de Flink en ejecución en Kubernetes:

1. Utilice el `kubectl port-forward` comando para reenviar un puerto local al puerto en el que se ejecuta el panel web de Flink en los pods de TaskManager la aplicación Flink. De forma predeterminada, este puerto es 8081. *deployment-name*Sustitúyalo por el nombre de la implementación de la aplicación Flink que aparece arriba.

   ```
   kubectl get deployments -n namespace
   ```

   Ejemplo de código de salida:

   ```
   kubectl get deployments -n flink-namespace
   NAME                        READY   UP-TO-DATE   AVAILABLE  AGE
   basic-example               1/1       1            1           11m
   flink-kubernetes-operator   1/1       1            1           21h
   ```

   ```
   kubectl port-forward deployments/deployment-name 8081 -n namespace
   ```

1. Si desea utilizar un puerto diferente de forma local, utilice el parámetro:8081*local-port*.

   ```
   kubectl port-forward -n flink deployments/basic-example 8080:8081
   ```

1. En un navegador web, vaya a `http://localhost:8081` (o `http://localhost:local-port` si utilizó un puerto local personalizado) para acceder al panel web de Flink. Este panel muestra información sobre la aplicación Flink en ejecución, como el estado del trabajo, el número y las métricas y los registros del TaskManagers trabajo.  
![\[Ejemplo de interfaz de usuario del panel de Flink\]](http://docs.aws.amazon.com/es_es/emr/latest/EMR-on-EKS-DevelopmentGuide/images/sample-flink-dashboard-ui.png)

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

La configuración de monitoreo le permite configurar fácilmente el archivado de registros de su aplicación Flink y los registros del operador en S3 and/or CloudWatch (puede elegir uno o ambos). Al hacerlo, se añade un sidecar FluentD a los módulos TaskManager y, posteriormente, se JobManager reenvían los registros de estos componentes a los sumideros configurados.

**nota**  
Debe configurar los roles de IAM para la cuenta de servicio de su operador de Flink y su trabajo de Flink (cuentas de servicio) para poder utilizar esta característica, ya que requiere interactuar con otros Servicios de AWS. Debe configurarlo con las IRSA en [Configuración del operador de Kubernetes de Flink para Amazon EMR en EKS](jobruns-flink-kubernetes-operator-setup.md).

## Registros de aplicaciones de Flink
<a name="jobruns-flink-monitoring-configuration-application-logs"></a>

Puede definir la configuración de la siguiente manera:

```
apiVersion: flink.apache.org/v1beta1
kind: FlinkDeployment
metadata:
  name: basic-example
spec:
  image: FLINK IMAGE TAG
  imagePullPolicy: Always
  flinkVersion: v1_17
  flinkConfiguration:
    taskmanager.numberOfTaskSlots: "2"
  executionRoleArn: JOB EXECUTION ROLE
  jobManager:
    resource:
      memory: "2048m"
      cpu: 1
  taskManager:
    resource:
      memory: "2048m"
      cpu: 1
  job:
    jarURI: local:///opt/flink/examples/streaming/StateMachineExample.jar
  monitoringConfiguration:
    s3MonitoringConfiguration:
      logUri: S3 BUCKET
    cloudWatchMonitoringConfiguration:
      logGroupName: LOG GROUP NAME
      logStreamNamePrefix: LOG GROUP STREAM PREFIX
    sideCarResources:
      limits:
        cpuLimit: 500m
        memoryLimit: 250Mi
    containerLogRotationConfiguration:
        rotationSize: 2GB
        maxFilesToKeep: 10
```

Las siguientes son opciones de configuración.
+ `s3MonitoringConfiguration`: clave de configuración para configurar el reenvío a S3
  + `logUri` (obligatorio): la ruta del bucket de S3 donde desea almacenar sus registros.
  + Una vez cargados los registros, la ruta en S3 tendrá el siguiente aspecto.
    + La rotación de los registros no está habilitada:

      ```
      s3://${logUri}/${POD NAME}/STDOUT or STDERR.gz
      ```
    + La rotación de los registros está habilitada. Puede utilizar tanto un archivo rotado como un archivo actual (uno sin la fecha).

      ```
      s3://${logUri}/${POD NAME}/STDOUT or STDERR.gz
      ```

      El siguiente formato es un número creciente.

      ```
      s3://${logUri}/${POD NAME}/stdout_YYYYMMDD_index.gz
      ```
  + Los siguientes permisos de IAM son necesarios para utilizar este reenviador.

    ```
    {
        "Effect": "Allow",
        "Action": [
            "s3:PutObject"
        ],
        "Resource": [
           "S3_BUCKET_URI/*",
           "S3_BUCKET_URI"
        ]
    }
    ```
+ `cloudWatchMonitoringConfiguration`— clave de configuración para configurar el reenvío. CloudWatch
  + `logGroupName`(obligatorio): nombre del grupo de CloudWatch registros al que desea enviar los registros (crea automáticamente el grupo si no existe).
  + `logStreamNamePrefix` (opcional): nombre del flujo de registro al que quiere enviar registros. El valor predeterminado es una cadena vacía. El formato es el siguiente:

    ```
    ${logStreamNamePrefix}/${POD NAME}/STDOUT or STDERR
    ```
  + Los siguientes permisos de IAM son necesarios para utilizar este reenviador.

    ```
    {
        "Effect": "Allow",
        "Action": [
            "logs:CreateLogStream",
            "logs:CreateLogGroup",
            "logs:PutLogEvents"
        ],
        "Resource": [
            "arn:aws:logs:REGION:ACCOUNT-ID:log-group:{YOUR_LOG_GROUP_NAME}:*",
            "arn:aws:logs:REGION:ACCOUNT-ID:log-group:{YOUR_LOG_GROUP_NAME}"
        ]
    }
    ```
+ `sideCarResources` (opcional): la clave de configuración para establecer los límites de recursos en el contenedor asociado de Fluentbit lanzado.
  + `memoryLimit` (opcional): el valor predeterminado es 512 Mi. Ajústelo según sus necesidades.
  + `cpuLimit` (opcional): esta opción no tiene un valor predeterminado. Ajústelo según sus necesidades.
+ `containerLogRotationConfiguration` (opcional): controla el comportamiento de la rotación del registro de 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.
  + `maxFilesToKeep` (obligatorio): especifica el número máximo de archivos que deben retenerse en el contenedor una vez hecha la rotación. El valor mínimo es 1 y el máximo, 50. El valor predeterminado es 10.

## Registros del operador de Flink
<a name="jobruns-flink-monitoring-configuration-operator-logs"></a>

También podemos habilitar el archivado de registros para el operador al utilizar las siguientes opciones en el archivo `values.yaml` en la instalación del gráfico de Helm. Puede activar S3 o ambas opciones. CloudWatch

```
monitoringConfiguration: 
  s3MonitoringConfiguration:
    logUri: "S3-BUCKET"
    totalFileSize: "1G"
    uploadTimeout: "1m"
  cloudWatchMonitoringConfiguration:
    logGroupName: "flink-log-group"
    logStreamNamePrefix: "example-job-prefix-test-2"
  sideCarResources:
    limits:
      cpuLimit: 1
      memoryLimit: 800Mi
  memoryBufferLimit: 700M
```

A continuación se describen las opciones de configuración disponibles de `monitoringConfiguration`.
+ `s3MonitoringConfiguration`: configure esta opción para archivar en S3.
+ `logUri` (obligatorio): la ruta del bucket de S3 donde desea almacenar sus registros.
+ Los siguientes son formatos de cómo se verían las rutas del bucket de S3 una vez cargados los registros.
  + La rotación de los registros no está habilitada.

    ```
    s3://${logUri}/${POD NAME}/OPERATOR or WEBHOOK/STDOUT or STDERR.gz
    ```
  + La rotación de los registros está habilitada. Puede utilizar tanto un archivo rotado como un archivo actual (uno sin la fecha).

    ```
    s3://${logUri}/${POD NAME}/OPERATOR or WEBHOOK/STDOUT or STDERR.gz
    ```

    El siguiente índice de formato es un número creciente.

    ```
    s3://${logUri}/${POD NAME}/OPERATOR or WEBHOOK/stdout_YYYYMMDD_index.gz
    ```
+ `cloudWatchMonitoringConfiguration`— la clave de configuración a la que se debe configurar el reenvío. CloudWatch
  + `logGroupName`(obligatorio): nombre del grupo de CloudWatch registros al que desea enviar los registros. Si el grupo no existe, se crea automáticamente.
  + `logStreamNamePrefix` (opcional): nombre del flujo de registro al que quiere enviar registros. El valor predeterminado es una cadena vacía. El formato 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 asociado de Fluentbit lanzado.
  + `memoryLimit` (opcional): el límite de memoria. Ajústelo según sus necesidades. El valor predeterminado es 512Mi.
  + `cpuLimit`: el límite de la CPU. Ajústelo según sus necesidades. Sin valor predeterminado.
+ `containerLogRotationConfiguration` (opcional): controla el comportamiento de la rotación de los registro de 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.
  + `maxFilesToKeep` (obligatorio): especifica el número máximo de archivos que deben retenerse en el contenedor una vez hecha la rotación. El valor mínimo es 1 y el máximo, 50. El valor predeterminado es 10.