

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.

# Soluciones de observabilidad
<a name="AMG_solutions"></a>

Puede utilizar Amazon Managed Grafana para supervisar sistemas o aplicaciones. AWS proporciona soluciones que le ayudan a crear una configuración de monitoreo básica para diferentes tipos de sistemas informáticos. Estas soluciones utilizan Amazon Managed Service para Prometheus y Amazon Managed Grafana para supervisar las soluciones de Amazon EKS que le proporcionan información sobre su aplicación o servicio.

Existen soluciones para supervisar la **infraestructura de Amazon EKS**, una aplicación de **máquina virtual Java (JVM)** que se ejecuta en Amazon EKS y una **aplicación de Apache Kafka** que se ejecuta en JVM en Amazon EKS.

**Topics**
+ [Supervisión de Amazon EKS](solution-eks.md)
+ [Supervisión de aplicaciones de JVM](solution-jvm.md)
+ [Supervisión de la aplicación de Kafka](solution-kafka.md)

# Solución para supervisar la infraestructura de Amazon EKS con Amazon Managed Grafana
<a name="solution-eks"></a>

La supervisión de la infraestructura de Amazon Elastic Kubernetes Service es uno de los escenarios más comunes en los que se utiliza Amazon Managed Grafana. En esta página se describe una plantilla que le proporciona una solución para este escenario. La solución se puede instalar mediante [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) o con [Terraform](https://www.terraform.io/).

Esta solución configura:
+ Su espacio de trabajo de Amazon Managed Service para Prometheus para almacenar métricas del clúster de Amazon EKS y crear un recopilador administrado para reunir las métricas e insertarlas en ese espacio de trabajo. Para obtener más información, consulta [Ingesta métricas con recopiladores AWS gestionados](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector.html).
+ Recopilación de registros de su clúster de Amazon EKS mediante un CloudWatch agente. Los registros se almacenan en CloudWatch Grafana gestionada por Amazon y son consultados por ellos. Para obtener más información, consulte [Logging for Amazon EKS](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/kubernetes-eks-logging.html)
+ Su espacio de trabajo de Amazon Managed Grafana puede extraer esos registros y métricas, y crear paneles y alertas que lo ayuden a supervisar su clúster.

Al aplicar esta solución, se crearán paneles y alertas que:
+ Evalúen el estado general del clúster de Amazon EKS.
+ Muestren el estado y el rendimiento del plano de control de Amazon EKS.
+ Muestren el estado y el rendimiento del plano de datos de Amazon EKS.
+ Muestren información sobre las cargas de trabajo de Amazon EKS en los espacios de nombres de Kubernetes.
+ Muestren el uso de los recursos en los espacios de nombres, incluido el uso de CPU, memoria, disco y red.

## Acerca de esta solución
<a name="solution-eks-about"></a>

Esta solución configura un espacio de trabajo de Amazon Managed Grafana para proporcionar métricas para su clúster de Amazon EKS. Las métricas se utilizan para generar paneles y alertas.

Las métricas lo ayudan a operar los clústeres de Amazon EKS de manera más eficaz al proporcionar información sobre el estado y el rendimiento del plano de datos y de control de Kubernetes. Puede comprender su clúster de Amazon EKS desde el nivel de nodo, pasando por los pods y hasta el nivel de Kubernetes, incluida la supervisión detallada del uso de los recursos.

La solución ofrece capacidades tanto anticipatorias como correctivas:
+ Las capacidades **anticipatorias** incluyen:
  + Administración de la eficiencia de los recursos impulsando las decisiones de programación. Por ejemplo, para proporcionar rendimiento y confiabilidad SLAs a los usuarios internos del clúster de Amazon EKS, puede asignar suficientes recursos de CPU y memoria a sus cargas de trabajo en función del seguimiento del uso histórico.
  + Previsiones de uso: en función del uso actual de los recursos del clúster de Amazon EKS, como los nodos, los [volúmenes persistentes respaldados por Amazon EBS](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html) o los [equilibradores de carga de aplicaciones](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html), puede planificar con antelación, por ejemplo, un nuevo producto o proyecto con demandas similares.
  + Detección anticipada de los posibles problemas: por ejemplo, al analizar las tendencias de consumo de recursos de nivel de espacio de nombres de Kubernetes, podrá comprender la estacionalidad del uso de la carga de trabajo.
+ Las capacidades **correctivas** incluyen:
  + Reducción del tiempo medio de detección (MTTD) de los problemas en la infraestructura y el nivel de carga de trabajo de Kubernetes. Por ejemplo, si consulta el panel de resolución de problemas, puede probar rápidamente hipótesis sobre lo que salió mal y eliminarlas.
  + Determinación de en qué parte de la pila se está produciendo un problema. Por ejemplo, el plano de control de Amazon EKS está totalmente gestionado por, AWS y algunas operaciones, como la actualización de una implementación de Kubernetes, pueden fallar si el servidor de API está sobrecargado o la conectividad se ve afectada.

En la siguiente imagen se muestra un ejemplo de la carpeta del panel de la solución.

![\[Imagen en la que se muestra un ejemplo de una carpeta de panel de Grafana creada con esta solución.\]](http://docs.aws.amazon.com/es_es/grafana/latest/userguide/images/eks-solution-dashboard-folder.png)


Puede elegir un panel para ver más detalles; por ejemplo, si elige ver los recursos de computación de las cargas de trabajo, se mostrará un panel como el que se muestra en la siguiente imagen.

![\[Imagen en la que se muestra un ejemplo de un panel de Grafana creado con esta solución donde aparece el uso de CPU.\]](http://docs.aws.amazon.com/es_es/grafana/latest/userguide/images/eks-solution-dashboard-resource-usage.png)


Las métricas se recopilan con un intervalo de extracción de 1 minuto. Los paneles muestran las métricas agregadas en 1 minuto, 5 minutos o más, en función de la métrica específica.

Los registros también se muestran en los paneles, de modo que puede consultarlos y analizarlos para encontrar las causas fundamentales de los problemas. En la siguiente imagen se muestra un ejemplo de panel de registros.

![\[Imagen en la que se muestra un ejemplo de un panel de Grafana con registros, creado con esta solución.\]](http://docs.aws.amazon.com/es_es/grafana/latest/userguide/images/eks-solution-dashboard-logs.png)


Para obtener una lista de las métricas rastreadas por esta solución, consulte [Lista de métricas rastreadas](#solution-eks-metrics).

Para obtener una lista de las alertas creadas por la solución, consulte [Lista de alertas creadas](#solution-eks-alerts).

## Costos
<a name="solution-eks-costs"></a>

Esta solución crea y utiliza recursos en su espacio de trabajo. Se le cobrará por el uso estándar de los recursos creados, que incluyen:
+ Acceso de los usuarios al espacio de trabajo de Amazon Managed Grafana. Para obtener más información acerca de los precios, consulte [Precios de Amazon Managed Grafana](https://aws.amazon.com/grafana/pricing/).
+ Amazon Managed Service para Prometheus: ingesta y almacenamiento de métricas, que incluye el uso del recopilador sin agente de Amazon Managed Service para Prometheus y el análisis de métricas (procesamiento de muestras de consulta). El número de métricas que utiliza esta solución depende de la configuración y el uso del clúster de Amazon EKS.

  Puedes ver las métricas de ingesta y almacenamiento en Amazon Managed Service for Prometheus CloudWatch utilizando Para obtener más información, consulta las [CloudWatchmétricas](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-CW-usage-metrics.html) en la Guía del usuario de *Amazon Managed Service for* Prometheus.

  Puede calcular el costo utilizando la calculadora de precios de la página [Precios de Amazon Managed Service para Prometheus](https://aws.amazon.com/prometheus/pricing/). El número de métricas dependerá del número de nodos del clúster y de las métricas que generen las aplicaciones.
+ CloudWatch Registra la ingesta, el almacenamiento y el análisis. De forma predeterminada, la retención de registros está configurada para que no caduque nunca. Puede ajustarlo en CloudWatch. Para obtener más información sobre los precios, consulta [Amazon CloudWatch Pricing](https://aws.amazon.com/cloudwatch/pricing/).
+ Costos de red. Puede incurrir en cargos de AWS red estándar por tráfico de zonas de disponibilidad cruzada, región u otro tipo de tráfico.

Las calculadoras de precios, disponibles en la página de precios de cada producto, pueden ayudarlo a comprender los posibles costos de su solución. La siguiente información puede ayudar a obtener un costo base de la solución que se ejecuta en la misma zona de disponibilidad que el clúster de Amazon EKS.


| Producto | Métrica de la calculadora | Valor | 
| --- | --- | --- | 
| Servicio administrado por Amazon para Prometheus | Serie activa | 8000 (base) 15 000 (por nodo) | 
|  | Intervalo promedio de recopilación | 60 (segundos) | 
| Amazon Managed Service para Prometheus (recopilador administrado) | Número de recopiladores | 1 | 
|  | Número de muestras | 15 (base) 150 (por nodo) | 
|  | Número de regalas | 161 | 
|  | Intervalo promedio de extracción de reglas | 60 (segundos) | 
| Amazon Managed Grafana | Número de editores o administradores activos | 1 (o más, en función de sus usuarios) | 
| CloudWatch (Registros) | Registros estándar: datos ingeridos | 24,5 GB (base) 0,5 GB (por nodo) | 
|  | Registro Storage/Archival (registros estándar y vendidos) | Sí, para almacenar registros: suponiendo una retención de 1 mes | 
|  | Datos de registros esperados analizados | Cada consulta de información de registros de Grafana analizará todo el contenido del registro del grupo durante el periodo de tiempo especificado. | 

Estos números son los números base de una solución que ejecuta EKS sin software adicional. Esto le proporcionará una estimación de los costos base. También omite los costes de uso de la red, que variarán en función de si el espacio de trabajo de Grafana gestionado por Amazon, el espacio de trabajo de Amazon Managed Service for Prometheus y el clúster de Amazon EKS se encuentran en la misma zona de disponibilidad, y la misma VPN. Región de AWS

**nota**  
Cuando un elemento de esta tabla incluye un valor `(base)` y un valor por recurso (por ejemplo, `(per node)`), debe sumar el valor base al valor por recurso multiplicado por el número de ese recurso del que disponga. Por ejemplo, en la **serie temporal promedio activa**, ingrese un número que sea `8000 + the number of nodes in your cluster * 15,000`. Si tiene 2 nodos, debe ingresar `38,000`, que es `8000 + ( 2 * 15,000 )`.

## Requisitos previos
<a name="solution-eks-prerequisites"></a>

Esta solución requiere que haya hecho lo siguiente antes de utilizarla.

1. Debe tener o **crear un clúster de Amazon Elastic Kubernetes Service** que desee supervisar y el clúster debe tener al menos un nodo. El clúster debe tener configurado el acceso al punto de conexión del servidor de API para incluir el acceso privado (también puede permitir el acceso público).

   El [modo de autenticación](https://docs.aws.amazon.com/eks/latest/userguide/grant-k8s-access.html#set-cam) debe incluir el acceso a la API (se puede configurar en `API` o `API_AND_CONFIG_MAP`). Esto permite que la implementación de la solución utilice entradas de acceso.

   Se debe instalar lo siguiente en el clúster (es verdadero de forma predeterminada al crear el clúster a través de la consola, pero se debe añadir si se crea el clúster mediante la AWS API o AWS CLI): AWS CNI, CoredNS y Kube-proxy. AddOns

   *Guarde el nombre del clúster para especificarlo más adelante*. Puede consultarlo en los detalles del clúster en la consola de Amazon EKS.
**nota**  
Para obtener más información sobre cómo crear un clúster de Amazon EKS, consulte [Introducción a Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html).

1. Debe **crear un espacio de trabajo de Amazon Managed Service for Prometheus** en el mismo lugar que su clúster Cuenta de AWS de Amazon EKS. Para obtener más información, consulte [Create a workspace](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-create-workspace.html) en la *Guía del usuario de Amazon Managed Service para Prometheus*.

   *Guarde el ARN del espacio de trabajo de Amazon Managed Service para Prometheus para especificarlo más adelante.*

1. Debe **crear un espacio de trabajo de Grafana gestionado por Amazon** con Grafana versión 9 o posterior, al igual que Región de AWS su clúster de Amazon EKS. Para obtener más información sobre la creación de un nuevo espacio de trabajo, consulte [Creación de un espacio de trabajo de Amazon Managed Grafana](AMG-create-workspace.md).

   El rol de espacio de trabajo debe tener permisos para acceder a Amazon Managed Service para Prometheus y Amazon. CloudWatch APIs La forma más sencilla de hacerlo es utilizar los [permisos gestionados por el servicio y seleccionar Amazon Managed](AMG-manage-permissions.md) Service for Prometheus y. CloudWatch También puedes añadir manualmente las [AmazonGrafanaCloudWatchAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonGrafanaCloudWatchAccess)políticas [AmazonPrometheusQueryAccess](https://docs.aws.amazon.com/prometheus/latest/userguide/security-iam-awsmanpol.html#AmazonPrometheusQueryAccess)y a la función de IAM de tu espacio de trabajo.

   *Guarde el ID y el punto de conexión del espacio de trabajo de Amazon Managed Grafana para especificarlos más adelante.* El ID tiene el formato `g-123example`. El ID y el punto de conexión se encuentran en la consola de Amazon Managed Grafana. El punto de conexión es la URL del espacio de trabajo e incluye el ID. Por ejemplo, `https://g-123example.grafana-workspace.<region>.amazonaws.com/`.

1. Si va a implementar la solución con Terraform, debe crear un **bucket de Amazon S3** al que pueda acceder desde su cuenta. Se utilizará para almacenar los archivos de estado de Terraform para la implementación.

   *Guarde el ID del bucket de Amazon S3 para especificarlo más adelante.*

1. Para ver las reglas de alertas de Amazon Managed Service para Prometheus, debe habilitar las [alertas de Grafana](v10-alerting-use-grafana-alerts.md) para el espacio de trabajo de Amazon Managed Grafana.

   Amazon Managed Grafana debe tener los siguientes permisos para acceder los recursos de Prometheus. Debe agregarlos a las políticas administradas por el servicio o administradas por el cliente que se describen en [Amazon gestionó los permisos y las políticas de Grafana para las fuentes de datos AWS](AMG-manage-permissions.md).
   + `aps:ListRules`
   + `aps:ListAlertManagerSilences`
   + `aps:ListAlertManagerAlerts`
   + `aps:GetAlertManagerStatus`
   + `aps:ListAlertManagerAlertGroups`
   + `aps:PutAlertManagerSilences`
   + `aps:DeleteAlertManagerSilence`

**nota**  
Si bien no es estrictamente obligatorio configurar la solución, debe configurar la autenticación de usuario en su espacio de trabajo de Amazon Managed Grafana antes de que los usuarios puedan acceder a los paneles creados. Para obtener más información, consulte [Autenticación de usuarios en los espacios de trabajo de Amazon Managed Grafana](authentication-in-AMG.md).

## Uso de esta solución
<a name="solution-eks-use"></a>

Esta solución configura la AWS infraestructura para admitir las métricas de informes y monitoreo de un clúster de Amazon EKS. Puede instalarla mediante [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) o con [Terraform](https://www.terraform.io/).

------
#### [ Using AWS CDK ]

Una forma en la que se le proporciona esta solución es mediante una AWS CDK aplicación. Proporcionará información sobre los recursos que desea utilizar y la solución creará automáticamente el recopilador, los registros y los paneles.

**nota**  
En estos pasos se da por sentado que tiene un entorno con y AWS CLI AWS CDK, y tanto [Node.js](https://nodeja.org/) como [NPM instalados.](https://docs.npmjs.com/) Utilizará `make` y `brew` para simplificar la compilación y otras acciones habituales.

**Para usar esta solución para monitorear un clúster de Amazon EKS con AWS CDK**

1. Asegúrese de que completar todos los pasos [previos](#solution-eks-prerequisites).

1. Descargue todos los archivos de la solución desde Amazon S3. Los archivos se encuentran en `s3://aws-observability-solutions/EKS/OSS/CDK/v3.0.0/iac` y puede descargarlos con el siguiente comando de Amazon S3. Ejecute este comando desde una carpeta de su entorno de línea de comandos.

   ```
   aws s3 sync s3://aws-observability-solutions/EKS/OSS/CDK/v3.0.0/iac/ .
   ```

   No es necesario modificar estos archivos.

1. En su entorno de línea de comandos (desde la carpeta en la que descargó los archivos de la solución), ejecute los siguientes comandos.

   Establezca las variables de entorno necesarias. Sustituya *REGION* *AMG\$1ENDPOINT**EKS\$1CLUSTER*, y *AMP\$1ARN* por su punto final de espacio de trabajo de Amazon Managed Grafana (en el formulario`http://g-123example.grafana-workspace.us-east-1.amazonaws.com`) Región de AWS, el nombre del clúster de Amazon EKS y el ARN del espacio de trabajo de Amazon Managed Service for Prometheus.

   ```
   export AWS_REGION=REGION
   export AMG_ENDPOINT=AMG_ENDPOINT
   export EKS_CLUSTER_NAME=EKS_CLUSTER
   export AMP_WS_ARN=AMP_ARN
   ```

1. Debe crear un token de cuenta de servicio con acceso ADMIN para llamar a Grafana HTTP. APIs Para obtener más información, consulte [Utilice cuentas de servicio para autenticarse con el HTTP de Grafana APIs](service-accounts.md). Puedes usarlo AWS CLI con los siguientes comandos para crear el token. Deberás sustituirlo por el *GRAFANA\$1ID* ID de tu espacio de trabajo de Grafana (aparecerá en el formulario`g-123example`). Esta clave caducará después de 7200 segundos o 2 horas. Si es necesario, puede cambiar la hora (`seconds-to-live`). La implementación tarda menos de una hora.

   ```
   GRAFANA_SA_ID=$(aws grafana create-workspace-service-account \
     --workspace-id GRAFANA_ID \
     --grafana-role ADMIN \
     --name grafana-operator-key \
     --query 'id' \
     --output text)
     
   # creates a new token for calling APIs
   export AMG_API_KEY=$(aws grafana create-workspace-service-account-token \
     --workspace-id $managed_grafana_workspace_id \
     --name "grafana-operator-key-$(date +%s)" \
     --seconds-to-live 7200 \
     --service-account-id $GRAFANA_SA_ID \
     --query 'serviceAccountToken.key' \
     --output text)
   ```

   Haz que la clave de API esté disponible para el AWS CDK agregándola AWS Systems Manager con el siguiente comando. *AWS\$1REGION*Sustitúyala por la región en la que se ejecutará la solución (en el formulario`us-east-1`).

   ```
   aws ssm put-parameter --name "/observability-aws-solution-eks-infra/grafana-api-key" \
       --type "SecureString" \
       --value $AMG_API_KEY \
       --region AWS_REGION \
       --overwrite
   ```

1. Ejecute el siguiente comando `make`, que instalará cualquier otra dependencia del proyecto.

   ```
   make deps
   ```

1. Por último, ejecute el AWS CDK proyecto:

   ```
   make build && make pattern aws-observability-solution-eks-infra-$EKS_CLUSTER_NAME deploy
   ```

1. [Opcional] Una vez finalizada la creación de la pila, puede utilizar el mismo entorno para crear más instancias de la pila para otros clústeres de Amazon EKS de la misma región, siempre que cumpla los demás requisitos previos para cada uno de ellos (incluidos los espacios de trabajo independientes de Amazon Managed Grafana y Amazon Managed Service para Prometheus). Deberá redefinir los comandos `export` con los nuevos parámetros.

Cuando se complete la creación de la pila, su espacio de trabajo de Amazon Managed Grafana se completará con un panel con las métricas de su clúster de Amazon EKS. Las métricas tardarán unos minutos en mostrarse, a medida que el recopilador comience a reunirlas.

------
#### [ Using Terraform ]

Una forma en que se le proporciona esta solución es mediante una solución de Terraform. Proporcionará información sobre los recursos que desea utilizar y la solución creará automáticamente el recopilador, los registros y los paneles.

**Uso de esta solución para supervisar un clúster de Amazon EKS con Terraform**

1. Asegúrese de que completar todos los pasos [previos](#solution-eks-prerequisites).

1. Descargue todos los archivos de la solución desde Amazon S3. Los archivos se encuentran en `s3://aws-observability-solutions/EKS/OSS/Terraform/v3.0.0/` y puede descargarlos con el siguiente comando de Amazon S3. Ejecute este comando desde una carpeta de su entorno de línea de comandos y, a continuación, cambie el directorio a la carpeta desde la que efectuará la implementación.

   ```
   aws s3 sync s3://aws-observability-solutions/EKS/OSS/Terraform/v3.0.0/ .
   cd eks-monitoring
   ```

   No es necesario modificar estos archivos.

1. En su entorno de línea de comandos (desde la carpeta en la que descargó los archivos de la solución), ejecute los siguientes comandos.

   Establezca las variables de entorno necesarias. Sustituya*REGION*,*AMG\$1ENDPOINT*,*EKS\$1CLUSTER*, y *AMP\$1ARN**S3\$1ID*, por el Región de AWS lugar donde desee que se desplieguen los nuevos recursos (por ejemplo,`us-east-1`), el punto de enlace del espacio de trabajo de Amazon Managed Grafana (en el formulario`http://g-123example.grafana-workspace.us-east-1.amazonaws.com`), el nombre del clúster de Amazon EKS, el ARN del espacio de trabajo de Amazon Managed Service for Prometheus y el ID de bucket de Amazon S3.

   ```
   export TF_VAR_aws_region=REGION
   export TF_VAR_amg_endpoint=AMG_ENDPOINT
   export TF_VAR_eks_cluster_name=EKS_CLUSTER
   export TF_VAR_amp_ws_arn=AMP_ARN
   export TF_VAR_s3_bucket_id=S3_ID
   ```

1. Debe crear un token de cuenta de servicio con acceso ADMIN para llamar a Grafana HTTP. APIs Para obtener más información, consulte [Utilice cuentas de servicio para autenticarse con el HTTP de Grafana APIs](service-accounts.md). Puedes usarlo AWS CLI con los siguientes comandos para crear el token. Deberás sustituirlo por el *GRAFANA\$1ID* ID de tu espacio de trabajo de Grafana (aparecerá en el formulario`g-123example`). Esta clave caducará después de 7200 segundos o 2 horas. Si es necesario, puede cambiar la hora (`seconds-to-live`). La implementación tarda menos de una hora.

   ```
   GRAFANA_SA_ID=$(aws grafana create-workspace-service-account \
     --workspace-id GRAFANA_ID \
     --grafana-role ADMIN \
     --name grafana-operator-key \
     --query 'id' \
     --output text)
     
   # creates a new token for running Terraform
   export TF_VAR_grafana_api_key=$(aws grafana create-workspace-service-account-token \
     --workspace-id $managed_grafana_workspace_id \
     --name "grafana-operator-key-$(date +%s)" \
     --seconds-to-live 7200 \
     --service-account-id $GRAFANA_SA_ID \
     --query 'serviceAccountToken.key' \
     --output text)
   ```
**nota**  
El primer paso indicado anteriormente, es decir, crear una cuenta de servicio para el espacio de trabajo, no es necesario si ya tiene una cuenta de servicio. En este caso, sustitúyalo *\$1GRAFANA\$1SA\$1ID* por el ID de tu cuenta de servicio.

1. Ejecute el siguiente comando `terraform` para inicializar Terraform con la solución.

   ```
   terraform init -reconfigure \
   -backend-config="bucket=${TF_VAR_s3_bucket_id}" \
   -backend-config="region=${TF_VAR_aws_region}" \
   -backend-config="key=state/${TF_VAR_eks_cluster_name}/terraform.tfstate"
   ```

1. Por último, implemente el proyecto de Terraform:

   ```
   terraform apply
   ```

Cuando se complete la creación de la solución, su espacio de trabajo de Amazon Managed Grafana se completará con un panel con las métricas de su clúster de Amazon EKS. Las métricas tardarán unos minutos en mostrarse, a medida que el recopilador comience a reunirlas.

------

## Lista de métricas rastreadas
<a name="solution-eks-metrics"></a>

Esta solución crea un recopilador que reúne métricas del clúster de Amazon EKS. Estas métricas se almacenan en Amazon Managed Service para Prometheus y, después, se muestran en los paneles de Amazon Managed Grafana. De forma predeterminada, el recopilador reúne todas las [métricas compatibles con Prometheus](https://docs.aws.amazon.com/prometheus/latest/userguide/prom-compatible-metrics.html) que expone el clúster. Si instala un software en su clúster que produce más métricas, aumentarán las métricas recopiladas. Si lo desea, puede reducir la cantidad de métricas [actualizando el recopilador con una configuración que filtre las métricas](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-collector-how-to.html#AMP-collector-configuration).

Con esta solución se hace un seguimiento de las siguientes métricas, en una configuración de clúster base de Amazon EKS sin necesidad de instalar ningún software adicional.


| Métrica | Descripción o finalidad | 
| --- | --- | 
|  `aggregator_unavailable_apiservice`  |  Los indicadores están marcados como no disponibles desglosados por APIService nombre. APIServices   | 
|  `apiserver_admission_webhook_admission_duration_seconds_bucket`  |  Histograma de latencia de webhook de admisión en segundos, identificado por su nombre y desglosado para cada operación, recurso de API y tipo (validar o admitir).  | 
|  `apiserver_current_inflight_requests`  |  Número máximo de solicitudes en curso utilizadas actualmente por este apiserver por tipo de solicitud en el último segundo.  | 
|  `apiserver_envelope_encryption_dek_cache_fill_percent`  |  Porcentaje de ranuras de caché ocupadas actualmente por almacenadas en caché DEKs.  | 
|  `apiserver_flowcontrol_current_executing_requests`  |  Número de solicitudes en la fase de ejecución inicial (para una operación WATCH) o en cualquier fase de ejecución (para una operación que no sea WATCH) en el subsistema de prioridad y equidad de la API.  | 
|  `apiserver_flowcontrol_rejected_requests_total`  |  Número de solicitudes en la fase de ejecución inicial (para una operación WATCH) o en cualquier fase de ejecución (para una operación que no sea WATCH) en el subsistema de prioridad y equidad de la API que se rechazaron.  | 
|  `apiserver_flowcontrol_request_concurrency_limit`  |  Número nominal de puestos de ejecución configurados para cada nivel de prioridad.  | 
|  `apiserver_flowcontrol_request_execution_seconds_bucket`  |  Histograma agrupado en buckets de la fase inicial (para una operación WATCH) o en cualquier fase de ejecución de solicitudes (para una operación que no sea WATCH) en el subsistema de prioridad y equidad de la API.  | 
|  `apiserver_flowcontrol_request_queue_length_after_enqueue_count`  |  Recuento de la fase inicial (para una operación WATCH) o en cualquier fase de ejecución de solicitudes (para una operación que no sea WATCH) en el subsistema de prioridad y equidad de la API.  | 
|  `apiserver_request`  |  Indica una solicitud de servidor de API.  | 
|  `apiserver_requested_deprecated_apis`  |  Indicador de las aplicaciones en desuso APIs solicitadas, desglosadas por grupo de API, versión, recurso, subrecurso y removed\$1release.  | 
|  `apiserver_request_duration_seconds`  |  Distribución de la latencia de respuesta en segundos para cada verbo, valor de ensayo, grupo, versión, recurso, subrecurso, ámbito y componente.  | 
|  `apiserver_request_duration_seconds_bucket`  |  Histograma agrupado en buckets de la distribución de la latencia de respuesta en segundos para cada verbo, valor de ensayo, grupo, versión, recurso, subrecurso, ámbito y componente.  | 
|  `apiserver_request_slo_duration_seconds`  |  Distribución de la latencia de respuesta del objetivo de nivel de servicio (SLO) en segundos para cada verbo, valor de ensayo, grupo, versión, recurso, subrecurso, ámbito y componente.  | 
|  `apiserver_request_terminations_total`  |  Número de solicitudes que apiserver canceló en defensa propia.  | 
|  `apiserver_request_total`  |  Contador de solicitudes de apiserver desglosadas por verbo, valor de ensayo, grupo, versión, recurso, ámbito, componente y código de respuesta HTTP.  | 
|  `container_cpu_usage_seconds_total`  |  Tiempo acumulado de CPU consumido.  | 
|  `container_fs_reads_bytes_total`  |  Recuento acumulado de bytes leídos.  | 
|  `container_fs_reads_total`  |  Recuento acumulado de lecturas completadas.  | 
|  `container_fs_writes_bytes_total`  |  Recuento acumulado de bytes escritos.  | 
|  `container_fs_writes_total`  |  Recuento acumulado de escrituras completadas.  | 
|  `container_memory_cache`  |  Memoria caché del total de páginas.  | 
|  `container_memory_rss`  |  Tamaño de RSS.  | 
|  `container_memory_swap`  |  Uso de cambios de contenedores.  | 
|  `container_memory_working_set_bytes`  |  Conjunto de trabajo actual.  | 
|  `container_network_receive_bytes_total`  |  Recuento acumulado de bytes recibidos.  | 
|  `container_network_receive_packets_dropped_total`  |  Recuento acumulado de paquetes descartados durante la recepción.  | 
|  `container_network_receive_packets_total`  |  Recuento acumulado de paquetes recibidos.  | 
|  `container_network_transmit_bytes_total`  |  Recuento acumulado de bytes transmitidos.  | 
|  `container_network_transmit_packets_dropped_total`  |  Recuento acumulado de paquetes descartados durante la transmisión.  | 
|  `container_network_transmit_packets_total`  |  Recuento acumulado de paquetes transmitidos.  | 
|  `etcd_request_duration_seconds_bucket`  |  El histograma agrupado en buckets de latencia de solicitudes de etcd en segundos para cada operación y tipo de objeto.  | 
|  `go_goroutines`  |  Número de gorrutinas que existen actualmente.  | 
|  `go_threads`  |  Número de subprocesos del sistema operativo creados.  | 
|  `kubelet_cgroup_manager_duration_seconds_bucket`  |  Histograma agrupado en buckets de la duración en segundos de las operaciones del administrador de cgroup. Desglosado por método.  | 
|  `kubelet_cgroup_manager_duration_seconds_count`  |  Duración en segundos de las operaciones del administrador de cgroup. Desglosado por método.  | 
|  `kubelet_node_config_error`  |  Esta métrica es verdadera (1) si el nodo está experimentando un error relacionado con la configuración y falsa (0) en caso contrario.  | 
|  `kubelet_node_name`  |  Nombre del nodo. El recuento siempre es 1.  | 
|  `kubelet_pleg_relist_duration_seconds_bucket`  |  Histograma agrupado en buckets de la duración en segundos para volver a enumerar los pods en PLEG.  | 
|  `kubelet_pleg_relist_duration_seconds_count`  |  Recuento en segundos de la duración correspondiente a volver a enumerar los pods en PLEG.  | 
|  `kubelet_pleg_relist_interval_seconds_bucket`  |  Histograma agrupado en buckets del intervalo en segundos entre la nueva enumeración en PLEG.  | 
|  `kubelet_pod_start_duration_seconds_count`  |  Recuento en segundos de la duración desde que Kubelet ve un pod por primera vez hasta que el pod empieza a ejecutarse.  | 
|  `kubelet_pod_worker_duration_seconds_bucket`  |  Histograma agrupado en buckets de la duración en segundos para sincronizar un solo pod. Desglosado por tipo de operación: crear, actualizar o sincronizar.  | 
|  `kubelet_pod_worker_duration_seconds_count`  |  Recuento de la duración en segundos para sincronizar un solo pod. Desglosado por tipo de operación: crear, actualizar o sincronizar.  | 
|  `kubelet_running_containers`  |  Número de contenedores en ejecución actualmente.  | 
|  `kubelet_running_pods`  |  Número de pods que tienen un entorno de pruebas limitado de pods en funcionamiento.  | 
|  `kubelet_runtime_operations_duration_seconds_bucket`  |  Histograma agrupado en buckets de la duración en segundos de las operaciones del tiempo de ejecución. Desglosado por tipo de operación.  | 
|  `kubelet_runtime_operations_errors_total`  |  Número acumulado de errores de operaciones en tiempo de ejecución por tipo de operación.  | 
|  `kubelet_runtime_operations_total`  |  Número acumulado de operaciones en tiempo de ejecución por tipo de operación.  | 
|  `kube_node_status_allocatable`  |  Cantidad de recursos que se pueden asignar a los pods (después de reservar algunos para los daemons del sistema).  | 
|  `kube_node_status_capacity`  |  Cantidad total de recursos disponibles para un nodo.  | 
|  `kube_pod_container_resource_limits (CPU)`  |  Cantidad de recursos límite solicitados por contenedor.  | 
|  `kube_pod_container_resource_limits (Memory)`  |  Cantidad de recursos límite solicitados por contenedor.  | 
|  `kube_pod_container_resource_requests (CPU)`  |  Número de recursos de solicitud solicitados por un contenedor.  | 
|  `kube_pod_container_resource_requests (Memory)`  |  Número de recursos de solicitud solicitados por un contenedor.  | 
|  `kube_pod_owner`  |  Información sobre el propietario del pod.  | 
|  `kube_resourcequota`  |  Las cuotas de recursos en Kubernetes imponen límites de uso de recursos como la CPU, la memoria y el almacenamiento dentro de los espacios de nombres.  | 
|  `node_cpu`  |  Métricas de uso de la CPU de un nodo, incluido el uso por núcleo y el uso total.  | 
|  `node_cpu_seconds_total`  |  Los segundos gastados en cada modo CPUs .  | 
|  `node_disk_io_time_seconds`  |  La cantidad acumulada de tiempo que un nodo dedica a realizar I/O operaciones en el disco.  | 
|  `node_disk_io_time_seconds_total`  |  La cantidad total de tiempo que el nodo dedica a realizar I/O operaciones en el disco.  | 
|  `node_disk_read_bytes_total`  |  Número total de bytes que el nodo leyó de los discos.  | 
|  `node_disk_written_bytes_total`  |  Número total de bytes que el nodo escribió en los discos.  | 
|  `node_filesystem_avail_bytes`  |  Cantidad de espacio disponible en bytes en el sistema de archivos de un nodo de un clúster de Kubernetes.  | 
|  `node_filesystem_size_bytes`  |  Tamaño total del sistema de archivos del nodo.  | 
|  `node_load1`  |  Promedio de carga de 1 minuto del uso de la CPU de un nodo.  | 
|  `node_load15`  |  Promedio de carga de 15 minutos del uso de la CPU de un nodo.  | 
|  `node_load5`  |  Promedio de carga de 5 minutos del uso de la CPU de un nodo.  | 
|  `node_memory_Buffers_bytes`  |  Cantidad de memoria utilizada por el sistema operativo del nodo para el almacenamiento en la caché del búfer.  | 
|  `node_memory_Cached_bytes,`  |  Cantidad de memoria utilizada por el sistema operativo del nodo para el almacenamiento en la caché del disco.  | 
|  `node_memory_MemAvailable_bytes`  |  Cantidad de memoria disponible para que las aplicaciones y las cachés la utilicen.  | 
|  `node_memory_MemFree_bytes`  |  Cantidad de memoria libre disponible en el nodo.  | 
|  `node_memory_MemTotal_bytes`  |  Cantidad total de memoria física disponible en el nodo.  | 
|  `node_network_receive_bytes_total`  |  Número total de bytes que recibe el nodo a través de la red.  | 
|  `node_network_transmit_bytes_total`  |  Número total de bytes que transmite el nodo a través de la red.  | 
|  `process_cpu_seconds_total`  |  Tamaño total de uso de la CPU del usuario y del sistema en segundos.  | 
|  `process_resident_memory_bytes`  |  Tamaño de la memoria residente en bytes.  | 
|  `rest_client_requests_total`  |  Número de solicitudes HTTP, fragmentadas por código de estado, método y host.  | 
|  `rest_client_request_duration_seconds_bucket`  |  Histograma agrupado en buckets de la latencia de solicitudes en segundos. Desglosado por verbo y host.  | 
|  `storage_operation_duration_seconds_bucket`  |  Histograma agrupado en buckets de la duración en segundos de las operaciones de almacenamiento.  | 
|  `storage_operation_duration_seconds_count`  |  Recuento de la duración de las operaciones de almacenamiento.  | 
|  `storage_operation_errors_total`  |  Número acumulado de errores durante las operaciones de almacenamiento.  | 
|  `up`  |  Métrica que indica si el objetivo supervisado (por ejemplo, el nodo) está en funcionamiento.  | 
|  `volume_manager_total_volumes`  |  Número total de volúmenes administrados por el administrador de volúmenes.  | 
|  `workqueue_adds_total`  |  Número total de adiciones gestionadas por cola de trabajo.  | 
|  `workqueue_depth`  |  Profundidad actual de la cola de trabajo.  | 
|  `workqueue_queue_duration_seconds_bucket`  |  Histograma agrupado en buckets que muestra el tiempo (en segundos) que un elemento permanece en la cola de trabajo antes de ser solicitado.  | 
|  `workqueue_work_duration_seconds_bucket`  |  Histograma agrupado en buckets que muestra el tiempo en segundos que se tarda en procesar un elemento de la cola de trabajo.  | 

## Lista de alertas creadas
<a name="solution-eks-alerts"></a>

En las tablas siguientes se enumeran las alertas que crea esta solución. Las alertas se crean como reglas en Amazon Managed Service para Prometheus y se muestran en su espacio de trabajo de Amazon Managed Grafana.

Puede modificar las reglas, incluida la adición o eliminación de reglas, [editando el archivo de configuración de reglas](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-rules-edit.html) en su espacio de trabajo de Amazon Managed Service para Prometheus.

Estas dos alertas son alertas especiales que se administran de forma ligeramente diferente a las alertas habituales. En lugar de avisarle de un problema, le proporcionan información que se utiliza para supervisar el sistema. La descripción incluye detalles sobre cómo utilizar estas alertas.


| Alerta | Descripción y uso | 
| --- | --- | 
| `Watchdog` | Se trata de una alerta destinada a garantizar que todo el proceso de alertas funcione. Esta alerta siempre se está activando, por lo que siempre debería activarse en Alertmanager y dirigirse siempre a un receptor. Puede integrarla con su mecanismo de notificación para enviar una notificación cuando la alerta *no* se active. Por ejemplo, puede utilizar la **DeadMansSnitch**integración en PagerDuty. | 
| `InfoInhibitor` | Se trata de una alerta que se utiliza para inhibir las alertas de información. Por sí solas, las alertas de nivel de información pueden ser muy ruidosas, pero son pertinentes cuando se combinan con otras alertas. Esta alerta se activa siempre que hay una alerta `severity=info` y deja de activarse cuando otra alerta con una gravedad tipo `warning` o `critical` comienza a activarse en el mismo espacio de nombres. Esta alerta debe dirigirse a un receptor nulo y configurarse para inhibir las alertas con `severity=info`. | 

Las siguientes alertas proporcionan información o advertencias sobre el sistema.


| Alerta | Gravedad | Description (Descripción) | 
| --- | --- | --- | 
|  `NodeNetworkInterfaceFlapping`  | warning |  La interfaz de red cambia su estado con frecuencia  | 
|  `NodeFilesystemSpaceFillingUp`  | warning |  Se prevé que el sistema de archivos se quede sin espacio en las próximas 24 horas.  | 
|  `NodeFilesystemSpaceFillingUp`  | critical |  Se prevé que el sistema de archivos se quede sin espacio en las próximas 4 horas.  | 
|  `NodeFilesystemAlmostOutOfSpace`  | warning |  Al sistema de archivos le queda menos del 5 % de espacio.  | 
|  `NodeFilesystemAlmostOutOfSpace`  | critical |  Al sistema de archivos le queda menos del 3 % de espacio.  | 
|  `NodeFilesystemFilesFillingUp`  | warning |  Se prevé que el sistema de archivos se quede sin inodos en las próximas 24 horas.  | 
|  `NodeFilesystemFilesFillingUp`  | critical |  Se prevé que el sistema de archivos se quede sin inodos en las próximas 4 horas.  | 
|  `NodeFilesystemAlmostOutOfFiles`  | warning |  Al sistema de archivos le quedan menos del 5 % de inodos.  | 
|  `NodeFilesystemAlmostOutOfFiles`  | critical |  Al sistema de archivos le quedan menos del 3 % de inodos.  | 
|  `NodeNetworkReceiveErrs`  | warning |  La interfaz de red informa de muchos errores de recepción.  | 
|  `NodeNetworkTransmitErrs`  | warning |  La interfaz de red informa de muchos errores de transmisión.  | 
|  `NodeHighNumberConntrackEntriesUsed`  | warning |  El número de entradas de conntrack se acerca al límite.  | 
|  `NodeTextFileCollectorScrapeError`  | warning |  El recopilador de archivos de texto de Node Exporter no se pudo extraer.  | 
|  `NodeClockSkewDetected`  | warning |  Se detectó un sesgo en el reloj.  | 
|  `NodeClockNotSynchronizzing`  | warning |  El reloj no se sincroniza.  | 
|  `NodeRAIDDegraded`  | critical |  La matriz RAID está degradada.  | 
|  `NodeRAIDDiskFailure`  | warning |  Dispositivo con errores en la matriz RAID.  | 
|  `NodeFileDescriptorLimit`  | warning |  Se prevé que el núcleo agote pronto el límite de descriptores de archivos.  | 
|  `NodeFileDescriptorLimit`  | critical |  Se prevé que el núcleo agote pronto el límite de descriptores de archivos.  | 
|  `KubeNodeNotReady`  | warning |  El nodo no está listo.  | 
|  `KubeNodeUnreachable`  | warning |  No se puede acceder al nodo.  | 
|  `KubeletTooManyPods`  | info |  Kubelet está funcionando al máximo de su capacidad.  | 
|  `KubeNodeReadinessFlapping`  | warning |  El estado de preparación del nodo es inestable.  | 
|  `KubeletPlegDurationHigh`  | warning |  El generador de eventos del ciclo de vida de Kubelet Pod tarda demasiado en volver a publicarse.  | 
|  `KubeletPodStartUpLatencyHigh`  | warning |  La latencia de inicio de Kubelet Pod es demasiado alta.  | 
|  `KubeletClientCertificateExpiration`  | warning |  El certificado de cliente de Kubelet está a punto de caducar.  | 
|  `KubeletClientCertificateExpiration`  | critical |  El certificado de cliente de Kubelet está a punto de caducar.  | 
|  `KubeletServerCertificateExpiration`  | warning |  El certificado del servidor de Kubelet está a punto de caducar.  | 
|  `KubeletServerCertificateExpiration`  | critical |  El certificado del servidor de Kubelet está a punto de caducar.  | 
|  `KubeletClientCertificateRenewalErrors`  | warning |  Kubelet no ha podido renovar su certificado de cliente.  | 
|  `KubeletServerCertificateRenewalErrors`  | warning |  Kubelet no ha podido renovar su certificado de servidor.  | 
|  `KubeletDown`  | critical |  El objetivo desapareció de la detección del objetivo de Prometheus.  | 
|  `KubeVersionMismatch`  | warning |  Se están ejecutando diferentes versiones semánticas de los componentes de Kubernetes.  | 
|  `KubeClientErrors`  | warning |  El cliente del servidor de API de Kubernetes está experimentando errores.  | 
|  `KubeClientCertificateExpiration`  | warning |  El certificado de cliente está a punto de caducar.  | 
|  `KubeClientCertificateExpiration`  | critical |  El certificado de cliente está a punto de caducar.  | 
|  `KubeAggregatedAPIErrors`  | warning |  La API agregada de Kubernetes ha notificado errores.  | 
|  `KubeAggregatedAPIDown`  | warning |  La API agregada de Kubernetes está inactiva.  | 
|  `KubeAPIDown`  | critical |  El objetivo desapareció de la detección del objetivo de Prometheus.  | 
|  `KubeAPITerminatedRequests`  | warning |  El apiserver de Kubernetes ha cancelado las solicitudes entrantes de \$1\$1 \$1value \$1 humanizePercentage \$1\$1.  | 
|  `KubePersistentVolumeFillingUp`  | critical |  El volumen persistente se está llenando.  | 
|  `KubePersistentVolumeFillingUp`  | warning |  El volumen persistente se está llenando.  | 
|  `KubePersistentVolumeInodesFillingUp`  | critical |  Los inodos de volumen persistente se están llenando.  | 
|  `KubePersistentVolumeInodesFillingUp`  | warning |  Los inodos de volumen persistente se están llenando.  | 
|  `KubePersistentVolumeErrors`  | critical |  El volumen persistente tiene problemas con el aprovisionamiento.  | 
|  `KubeCPUOvercommit`  | warning |  El clúster tiene un exceso de solicitudes de recursos de CPU comprometidas.  | 
|  `KubeMemoryOvercommit`  | warning |  El clúster tiene un exceso de solicitudes de recursos de memoria comprometidas.  | 
|  `KubeCPUQuotaOvercommit`  | warning |  El clúster tiene un exceso de solicitudes de recursos de CPU comprometidas.  | 
|  `KubeMemoryQuotaOvercommit`  | warning |  El clúster tiene un exceso de solicitudes de recursos de memoria comprometidas.  | 
|  `KubeQuotaAlmostFull`  | info |  La cuota de espacio de nombres se va a llenar.  | 
|  `KubeQuotaFullyUsed`  | info |  La cuota de espacio de nombres se ha utilizado en su totalidad.  | 
|  `KubeQuotaExceeded`  | warning |  La cuota de espacio de nombres ha superado los límites.  | 
|  `CPUThrottlingHigh`  | info |  Los procesos experimentan una limitación elevada de la CPU.  | 
|  `KubePodCrashLooping`  | warning |  El pod se bloquea en bucle.  | 
|  `KubePodNotReady`  | warning |  El pod lleva más de 15 minutos sin estar preparado.  | 
|  `KubeDeploymentGenerationMismatch`  | warning |  La generación de implementaciones no coincide debido a una posible reversión.  | 
|  `KubeDeploymentReplicasMismatch`  | warning |  La implementación no ha coincidido con el número de réplicas esperado.  | 
|  `KubeStatefulSetReplicasMismatch`  | warning |  StatefulSet no ha coincidido con el número esperado de réplicas.  | 
|  `KubeStatefulSetGenerationMismatch`  | warning |  StatefulSet discordancia generacional debido a una posible reversión  | 
|  `KubeStatefulSetUpdateNotRolledOut`  | warning |  StatefulSet la actualización no se ha lanzado.  | 
|  `KubeDaemonSetRolloutStuck`  | warning |  DaemonSet el lanzamiento está bloqueado.  | 
|  `KubeContainerWaiting`  | warning |  El contenedor de pods lleva en espera más de 1 hora.  | 
|  `KubeDaemonSetNotScheduled`  | warning |  DaemonSet los pods no están programados.  | 
|  `KubeDaemonSetMisScheduled`  | warning |  DaemonSet los pods están mal programados.  | 
|  `KubeJobNotCompleted`  | warning |  El trabajo no se completó a tiempo.  | 
|  `KubeJobFailed`  | warning |  No se pudo completar el trabajo.  | 
|  `KubeHpaReplicasMismatch`  | warning |  El HPA no ha coincidido con el número de réplicas deseado.  | 
|  `KubeHpaMaxedOut`  | warning |  El HPA se ejecuta al máximo de réplicas  | 
|  `KubeStateMetricsListErrors`  | critical |  kube-state-metrics está experimentando errores en las operaciones de la lista.  | 
|  `KubeStateMetricsWatchErrors`  | critical |  kube-state-metrics está experimentando errores en las operaciones de vigilancia.  | 
|  `KubeStateMetricsShardingMismatch`  | critical |  kube-state-metrics la fragmentación está mal configurada.  | 
|  `KubeStateMetricsShardsMissing`  | critical |  kube-state-metrics faltan fragmentos.  | 
|  `KubeAPIErrorBudgetBurn`  | critical |  El servidor de API está consumiendo demasiados errores presupuestados.  | 
|  `KubeAPIErrorBudgetBurn`  | critical |  El servidor de API está consumiendo demasiados errores presupuestados.  | 
|  `KubeAPIErrorBudgetBurn`  | warning |  El servidor de API está consumiendo demasiados errores presupuestados.  | 
|  `KubeAPIErrorBudgetBurn`  | warning |  El servidor de API está consumiendo demasiados errores presupuestados.  | 
|  `TargetDown`  | warning |  Uno o más objetivos están inactivos.  | 
|  `etcdInsufficientMembers`  | critical |  El clúster Etcd tiene miembros insuficientes.  | 
|  `etcdHighNumberOfLeaderChanges`  | warning |  Número elevado de cambios de líder en el clúster de etcd.  | 
|  `etcdNoLeader`  | critical |  El clúster de etcd no tiene líder.  | 
|  `etcdHighNumberOfFailedGRPCRequests`  | warning |  Número elevado de solicitudes de gRPC fallidas en el clúster de etcd.  | 
|  `etcdGRPCRequestsSlow`  | critical |  Las solicitudes de gRPC del clúster de etcd son lentas.  | 
|  `etcdMemberCommunicationSlow`  | warning |  La comunicación entre los miembros del clúster de etcd es lenta.  | 
|  `etcdHighNumberOfFailedProposals`  | warning |  Número elevado de propuestas fallidas en el clúster de etcd.  | 
|  `etcdHighFsyncDurations`  | warning |  El clúster de etcd tiene altas duraciones de sincronización.  | 
|  `etcdHighCommitDurations`  | warning |  El clúster de etcd tiene duraciones de confirmación superiores a las esperadas.  | 
|  `etcdHighNumberOfFailedHTTPRequests`  | warning |  El clúster de etcd tiene solicitudes HTTP fallidas.  | 
|  `etcdHighNumberOfFailedHTTPRequests`  | critical |  Número elevado de solicitudes HTTP fallidas en el clúster de etcd.  | 
|  `etcdHTTPRequestsSlow`  | warning |  Las solicitudes de HTTP del clúster de etcd son lentas.  | 
|  `HostClockNotSynchronizing`  | warning |  El reloj de host no se sincroniza.  | 
|  `HostOomKillDetected`  | warning |  Se detectó la eliminación de la OOM del host.  | 

## Resolución de problemas
<a name="solution-eks-troubleshooting"></a>

Hay algunas cosas que pueden provocar un error en la configuración del proyecto. Asegúrese de revisar lo siguiente.
+ Debe cumplir todos los [requisitos previos](#solution-eks-prerequisites) antes de instalar la solución.
+ El clúster debe tener al menos un nodo antes de intentar crear la solución o acceder a las métricas.
+ Su clúster de Amazon EKS debe tener instalados los complementos `AWS CNI`, `CoreDNS` y `kube-proxy`. Si no están instalados, la solución no funcionará correctamente. Se instalan de forma predeterminada al crear el clúster a través de la consola. Es posible que tengas que instalarlos si el clúster se creó mediante un AWS SDK.
+ Se agotó el tiempo de espera para la instalación de los pods de Amazon EKS. Esto puede ocurrir si no hay suficiente capacidad de nodos disponible. Estos problemas se deben a varias causas, entre las que se incluyen las siguientes:
  + El clúster de Amazon EKS se inicializó con Fargate y no con Amazon EC2. Este proyecto requiere Amazon EC2.
  + Los nodos tienen [taints](https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html) y, por lo tanto, no están disponibles.

    Puede utilizar `kubectl describe node NODENAME | grep Taints` para comprobar las taints. Luego, `kubectl taint node NODENAME TAINT_NAME-` para eliminar las taints. Asegúrese de incluir `-` después del nombre de la taint.
  + Los nodos han alcanzado el límite de capacidad. En este caso, puede crear un nodo nuevo o aumentar la capacidad.
+ No ve ningún panel en Grafana: está utilizando un ID de espacio de trabajo de Grafana incorrecto.

  Ejecute el siguiente comando para obtener información acerca de Grafana:

  ```
  kubectl describe grafanas external-grafana -n grafana-operator
  ```

  Puede comprobar los resultados para ver la URL del espacio de trabajo correcta. Si no es la que esperaba, vuelva a implementarla con el ID de espacio de trabajo correcto.

  ```
  Spec:
    External:
      API Key:
        Key:   GF_SECURITY_ADMIN_APIKEY
        Name:  grafana-admin-credentials
      URL:     https://g-123example.grafana-workspace.aws-region.amazonaws.com
  Status:
    Admin URL:  https://g-123example.grafana-workspace.aws-region.amazonaws.com
    Dashboards:
      ...
  ```
+ No ve ningún panel en Grafana: está utilizando una clave de API caducada.

  Para detectar esto, tendrá que usar el operador grafana y comprobar si hay errores en los registros. Obtenga el nombre del operador de Grafana con este comando:

  ```
  kubectl get pods -n grafana-operator
  ```

  Esto devolverá el nombre del operador, por ejemplo:

  ```
  NAME                               READY   STATUS    RESTARTS   AGE
  grafana-operator-1234abcd5678ef90   1/1     Running   0          1h2m
  ```

  Utilice el nombre del operador en el siguiente comando:

  ```
  kubectl logs grafana-operator-1234abcd5678ef90 -n grafana-operator
  ```

  Los mensajes de error como los siguientes indican que la clave de API ha caducado:

  ```
  ERROR   error reconciling datasource    {"controller": "grafanadatasource", "controllerGroup": "grafana.integreatly.org", "controllerKind": "GrafanaDatasource", "GrafanaDatasource": {"name":"grafanadatasource-sample-amp","namespace":"grafana-operator"}, "namespace": "grafana-operator", "name": "grafanadatasource-sample-amp", "reconcileID": "72cfd60c-a255-44a1-bfbd-88b0cbc4f90c", "datasource": "grafanadatasource-sample-amp", "grafana": "external-grafana", "error": "status: 401, body: {\"message\":\"Expired API key\"}\n"}
  github.com/grafana-operator/grafana-operator/controllers.(*GrafanaDatasourceReconciler).Reconcile
  ```

  En este caso, cree una nueva clave de API y vuelva a implementar la solución. Si el problema persiste, puede forzar la sincronización mediante el siguiente comando antes de volver a implementarlo:

  ```
  kubectl delete externalsecret/external-secrets-sm -n grafana-operator
  ```
+ *Instalaciones de CDK*: falta el parámetro SSM. Si ve un error similar al siguiente, ejecute `cdk bootstrap` y vuelva a intentarlo.

  ```
  Deployment failed: Error: aws-observability-solution-eks-infra-$EKS_CLUSTER_NAME: SSM 
  parameter /cdk-bootstrap/xxxxxxx/version not found. Has the environment been 
  bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/
  guide/bootstrapping.html)
  ```
+ La implementación puede fallar si el proveedor de OIDC ya existe. Aparecerá un error como el siguiente (en este caso, para las instalaciones de CDK):

  ```
  | CREATE_FAILED | Custom::AWSCDKOpenIdConnectProvider | OIDCProvider/Resource/Default
  Received response status [FAILED] from custom resource. Message returned: 
  EntityAlreadyExistsException: Provider with url https://oidc.eks.REGION.amazonaws.com/id/PROVIDER ID already exists.
  ```

  En ese caso, vaya al portal de IAM, elimine el proveedor de OIDC e inténtelo de nuevo.
+ *Instalaciones de Terraform*: aparece un mensaje de error que incluye `cluster-secretstore-sm failed to create kubernetes rest client for update of resource` y `failed to create kubernetes rest client for update of resource`.

  Este error suele indicar que el operador de secretos externos no está instalado o habilitado en su clúster de Kubernetes. Se instala como parte de la implementación de la solución, pero a veces no está listo cuando la solución lo necesita.

  Puede verificar que está instalado mediante el siguiente comando:

  ```
  kubectl get deployments -n external-secrets
  ```

  Si está instalado, el operador puede tardar algún tiempo en estar completamente listo para usarse. Puede comprobar el estado de las definiciones de recursos personalizadas (CRDs) necesarias ejecutando el siguiente comando:

  ```
  kubectl get crds|grep external-secrets
  ```

  Este comando debe enumerar los operadores CRDs relacionados con los secretos externos, incluidos `clustersecretstores.external-secrets.io` y`externalsecrets.external-secrets.io`. Si no aparecen en la lista, espere unos minutos y revise de nuevo.

  Una vez CRDs registrados, puede `terraform apply` volver a ejecutarlos para implementar la solución.

# Solución para supervisar aplicaciones de JVM con Amazon Managed Grafana
<a name="solution-jvm"></a>

Las aplicaciones creadas con máquinas virtuales Java (JVM) tienen necesidades de supervisión especializadas. En esta página se describe una plantilla que proporciona una solución para supervisar aplicaciones basadas en JVM que se ejecutan en el clúster de Amazon EKS. La solución se puede instalar mediante [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html).

**nota**  
Esta solución proporciona supervisión para una aplicación JVM. Si la aplicación JVM es específicamente una aplicación de Apache Kafka, puede optar por utilizar la [solución de supervisión de Kafka](solution-kafka.md), que incluye la supervisión de JVM y de Kafka.

Esta solución configura:
+ Su espacio de trabajo de Amazon Managed Service para Prometheus para almacenar métricas de la máquina virtual Java (JVM) del clúster de Amazon EKS.
+ Recopilación de métricas específicas de JVM mediante el CloudWatch agente, así como un complemento de CloudWatch agente. Las métricas se configuran para enviarse al espacio de trabajo de Amazon Managed Service para Prometheus.
+ El espacio de trabajo de Amazon Managed Grafana puede extraer esas métricas, y crear paneles que lo ayuden a supervisar su clúster.

**nota**  
Esta solución proporciona métricas de JVM para la aplicación que se ejecuta en Amazon EKS, pero no incluye las métricas de Amazon EKS. Además, puede utilizar la [solución de observabilidad para supervisar Amazon EKS](solution-eks.md) y ver las métricas y alertas de su clúster de Amazon EKS.

## Acerca de esta solución
<a name="solution-jvm-about"></a>

Esta solución configura un espacio de trabajo de Amazon Managed Grafana para proporcionar métricas para su aplicación de máquina virtual Java (JVM). Las métricas se utilizan para generar paneles que lo ayudan a operar su aplicación de manera más eficaz al proporcionar información sobre el estado y el rendimiento de la aplicación.

En la siguiente imagen se muestra un ejemplo de uno de los paneles creados por esta solución.

![\[Imagen en la que se muestra un ejemplo de una carpeta de panel de Grafana creada con esta solución.\]](http://docs.aws.amazon.com/es_es/grafana/latest/userguide/images/jvm-solution-overview.png)


Las métricas se recopilan con un intervalo de extracción de 1 minuto. Los paneles muestran las métricas agregadas en 1 minuto, 5 minutos o más, en función de la métrica específica.

Para obtener una lista de las métricas rastreadas por esta solución, consulte [Lista de métricas rastreadas](#solution-jvm-metrics).

## Costos
<a name="solution-jvm-costs"></a>

Esta solución crea y utiliza recursos en su espacio de trabajo. Se le cobrará por el uso estándar de los recursos creados, que incluyen:
+ Acceso de los usuarios al espacio de trabajo de Amazon Managed Grafana. Para obtener más información acerca de los precios, consulte [Precios de Amazon Managed Grafana](https://aws.amazon.com/grafana/pricing/).
+ Ingesta y almacenamiento de métricas de Amazon Managed Service para Prometheus y análisis de métricas (procesamiento de muestras de consulta). El número de métricas que utiliza esta solución depende de la configuración y el uso de la aplicación.

  Puedes ver las métricas de ingesta y almacenamiento en Amazon Managed Service for Prometheus CloudWatch utilizando Para obtener más información, consulta las [CloudWatchmétricas](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-CW-usage-metrics.html) en la Guía del usuario de *Amazon Managed Service for* Prometheus.

  Puede calcular el costo utilizando la calculadora de precios de la página [Precios de Amazon Managed Service para Prometheus](https://aws.amazon.com/prometheus/pricing/). El número de métricas dependerá del número de nodos del clúster y de las métricas que generen las aplicaciones.
+ Costos de red. Puede incurrir en cargos de AWS red estándar por tráfico cruzado de zonas de disponibilidad, región u otro tipo de tráfico.

Las calculadoras de precios, disponibles en la página de precios de cada producto, pueden ayudarlo a comprender los posibles costos de su solución. La siguiente información puede ayudar a obtener un costo base de la solución que se ejecuta en la misma zona de disponibilidad que el clúster de Amazon EKS.


| Producto | Métrica de la calculadora | Valor | 
| --- | --- | --- | 
| Servicio administrado por Amazon para Prometheus | Serie activa | 50 (por pod de aplicación) | 
|  | Intervalo promedio de recopilación | 60 (segundos) | 
| Amazon Managed Grafana | Número de editores o administradores activos | 1 (o más, en función de sus usuarios) | 

Estos números son los números base de una aplicación de JVM que se ejecuta en Amazon EKS. Esto le proporcionará una estimación de los costos base. A medida que añada pods a su aplicación, los costos aumentarán, como se muestra. Estos costos excluyen los costos de uso de la red, que variarán en función de si el espacio de trabajo de Grafana gestionado por Amazon, el espacio de trabajo de Amazon Managed Service for Prometheus y el clúster de Amazon EKS se encuentran en la misma zona de disponibilidad y la misma VPN. Región de AWS

## Requisitos previos
<a name="solution-jvm-prerequisites"></a>

Esta solución requiere que haya hecho lo siguiente antes de utilizarla.

1. Debe tener o **crear un clúster de Amazon Elastic Kubernetes Service** que desee supervisar y el clúster debe tener al menos un nodo. El clúster debe tener configurado el acceso al punto de conexión del servidor de API para incluir el acceso privado (también puede permitir el acceso público).

   El [modo de autenticación](https://docs.aws.amazon.com/eks/latest/userguide/grant-k8s-access.html#set-cam) debe incluir el acceso a la API (se puede configurar en `API` o `API_AND_CONFIG_MAP`). Esto permite que la implementación de la solución utilice entradas de acceso.

   Se debe instalar lo siguiente en el clúster (es cierto de forma predeterminada al crear el clúster a través de la consola, pero se debe añadir si se crea el clúster mediante la AWS API o AWS CLI): Amazon EKS Pod Identity Agent, AWS CNI, CoreDNS, Kube-proxy y controlador CSI de Amazon EBS AddOns (el controlador CSI de Amazon EBS no es técnicamente necesario para la solución, pero sí para algunas aplicaciones de AddOn JVM).

   *Guarde el nombre del clúster para especificarlo más adelante*. Puede consultarlo en los detalles del clúster en la consola de Amazon EKS.
**nota**  
Para obtener más información sobre cómo crear un clúster de Amazon EKS, consulte [Introducción a Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html).

1. Debe ejecutar una aplicación en máquinas virtuales Java en su clúster de Amazon EKS.

1. Debe **crear un espacio de trabajo de Amazon Managed Service for Prometheus** en el mismo lugar que su clúster Cuenta de AWS de Amazon EKS. Para obtener más información, consulte [Create a workspace](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-create-workspace.html) en la *Guía del usuario de Amazon Managed Service para Prometheus*.

   *Guarde el ARN del espacio de trabajo de Amazon Managed Service para Prometheus para especificarlo más adelante.*

1. Debe **crear un espacio de trabajo de Grafana gestionado por Amazon** con Grafana versión 9 o posterior, al igual que Región de AWS su clúster de Amazon EKS. Para obtener más información sobre la creación de un nuevo espacio de trabajo, consulte [Creación de un espacio de trabajo de Amazon Managed Grafana](AMG-create-workspace.md).

   El rol de espacio de trabajo debe tener permisos para acceder a Amazon Managed Service para Prometheus y Amazon. CloudWatch APIs La forma más sencilla de hacerlo es utilizar los [permisos gestionados por el servicio y seleccionar Amazon Managed](AMG-manage-permissions.md) Service for Prometheus y. CloudWatch También puedes añadir manualmente las [AmazonGrafanaCloudWatchAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonGrafanaCloudWatchAccess)políticas [AmazonPrometheusQueryAccess](https://docs.aws.amazon.com/prometheus/latest/userguide/security-iam-awsmanpol.html#AmazonPrometheusQueryAccess)y a la función de IAM de tu espacio de trabajo.

   *Guarde el ID y el punto de conexión del espacio de trabajo de Amazon Managed Grafana para especificarlos más adelante.* El ID tiene el formato `g-123example`. El ID y el punto de conexión se encuentran en la consola de Amazon Managed Grafana. El punto de conexión es la URL del espacio de trabajo e incluye el ID. Por ejemplo, `https://g-123example.grafana-workspace.<region>.amazonaws.com/`.

**nota**  
Si bien no es estrictamente obligatorio configurar la solución, debe configurar la autenticación de usuario en su espacio de trabajo de Amazon Managed Grafana antes de que los usuarios puedan acceder a los paneles creados. Para obtener más información, consulte [Autenticación de usuarios en los espacios de trabajo de Amazon Managed Grafana](authentication-in-AMG.md).

## Uso de esta solución
<a name="solution-jvm-use"></a>

Esta solución configura la AWS infraestructura para admitir las métricas de informes y monitoreo de una aplicación de máquina virtual Java (JVM) que se ejecuta en un clúster de Amazon EKS. Puede instalarse mediante [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html).

**nota**  
En estos pasos se supone que tiene un entorno con y AWS CLI AWS CDK, y que tanto [Node.js](https://nodeja.org/) como [NPM](https://docs.npmjs.com/) están instalados. Utilizará `make` y `brew` para simplificar la compilación y otras acciones habituales.

**Para usar esta solución para monitorear un clúster de Amazon EKS con AWS CDK**

1. Asegúrese de que completar todos los pasos [previos](#solution-jvm-prerequisites).

1. Descargue todos los archivos de la solución desde Amazon S3. Los archivos se encuentran en `s3://aws-observability-solutions/JVM_EKS/OSS/CDK/v1.0.0/iac` y puede descargarlos con el siguiente comando de Amazon S3. Ejecute este comando desde una carpeta de su entorno de línea de comandos.

   ```
   aws s3 sync s3://aws-observability-solutions/JVM_EKS/OSS/CDK/v1.0.0/iac/ .
   ```

   No es necesario modificar estos archivos.

1. En su entorno de línea de comandos (desde la carpeta en la que descargó los archivos de la solución), ejecute los siguientes comandos.

   Establezca las variables de entorno necesarias. Sustituya *REGION* *AMG\$1ENDPOINT**EKS\$1CLUSTER*, y *AMP\$1ARN* por su punto final de espacio de trabajo de Amazon Managed Grafana (en el formulario`http://g-123example.grafana-workspace.us-east-1.amazonaws.com`) Región de AWS, el nombre del clúster de Amazon EKS y el ARN del espacio de trabajo de Amazon Managed Service for Prometheus.

   ```
   export AWS_REGION=REGION
   export AMG_ENDPOINT=AMG_ENDPOINT
   export EKS_CLUSTER_NAME=EKS_CLUSTER
   export AMP_WS_ARN=AMP_ARN
   ```

1. Cree anotaciones que la solución pueda utilizar. Puede optar por anotar directamente un espacio de nombres, una implementación, un statefulset, un daemonset o sus pods. La solución de JSM requiere dos anotaciones. Utilizará `kubectl` para anotar sus recursos con los siguientes comandos:

   ```
   kubectl annotate <resource-type> <resource-value> instrumentation.opentelemetry.io/inject-java=true
   kubectl annotate <resource-type> <resource-value> cloudwatch.aws.amazon.com/inject-jmx-jvm=true
   ```

   Sustituya *<resource-type>* y por *<resource-value>* los valores correctos para su sistema. Por ejemplo, para anotar la implementación `foo`, el primer comando sería:

   ```
   kubectl annotate deployment foo instrumentation.opentelemetry.io/inject-java=true
   ```

1. Cree un token de cuenta de servicio con acceso ADMIN para llamar a Grafana HTTP. APIs Para obtener más información, consulte [Utilice cuentas de servicio para autenticarse con el HTTP de Grafana APIs](service-accounts.md). Puedes usarlo AWS CLI con los siguientes comandos para crear el token. Deberás sustituirlo por el *GRAFANA\$1ID* ID de tu espacio de trabajo de Grafana (aparecerá en el formulario`g-123example`). Esta clave caducará después de 7200 segundos o 2 horas. Si es necesario, puede cambiar la hora (`seconds-to-live`). La implementación tarda menos de una hora.

   ```
   # creates a new service account (optional: you can use an existing account)
   GRAFANA_SA_ID=$(aws grafana create-workspace-service-account \
     --workspace-id GRAFANA_ID \
     --grafana-role ADMIN \
     --name grafana-operator-key \
     --query 'id' \
     --output text)
   
   # creates a new token for calling APIs
   export AMG_API_KEY=$(aws grafana create-workspace-service-account-token \
     --workspace-id $managed_grafana_workspace_id \
     --name "grafana-operator-key-$(date +%s)" \
     --seconds-to-live 7200 \
     --service-account-id $GRAFANA_SA_ID \
     --query 'serviceAccountToken.key' \
     --output text)
   ```

   Haz que la clave de API esté disponible para el AWS CDK agregándola AWS Systems Manager con el siguiente comando. *AWS\$1REGION*Sustitúyala por la región en la que se ejecutará la solución (en el formulario`us-east-1`).

   ```
   aws ssm put-parameter --name "/observability-aws-solution-jvm-eks/grafana-api-key" \
     --type "SecureString" \
     --value $AMG_API_KEY \
     --region AWS_REGION \
     --overwrite
   ```

1. Ejecute el siguiente comando `make`, que instalará cualquier otra dependencia del proyecto.

   ```
   make deps
   ```

1. Por último, ejecute el AWS CDK proyecto:

   ```
   make build && make pattern aws-observability-solution-jvm-eks-$EKS_CLUSTER_NAME deploy
   ```

1. [Opcional] Una vez finalizada la creación de la pila, puede utilizar el mismo entorno para crear más instancias de la pila para otras aplicaciones de JVM que se ejecutan en clústeres de Amazon EKS de la misma región, siempre que cumpla los demás requisitos previos para cada uno de ellos (incluidos los espacios de trabajo independientes de Amazon Managed Grafana y Amazon Managed Service para Prometheus). Deberá redefinir los comandos `export` con los nuevos parámetros.

Cuando se complete la creación de la pila, su espacio de trabajo de Amazon Managed Grafana se completará con un panel con las métricas de su aplicación y clúster de Amazon EKS. Las métricas tardarán unos minutos en mostrarse, a medida que se comience a reunirlas.

## Lista de métricas rastreadas
<a name="solution-jvm-metrics"></a>

Mediante esta solución se recopilan métricas de la aplicación basada en JVM. Estas métricas se almacenan en Amazon Managed Service para Prometheus y, después, se muestran en los paneles de Amazon Managed Grafana.

Con esta solución, se realiza un seguimiento de las siguientes métricas.
+ jvm.classes.loaded
+ jvm.gc.collections.count
+ jvm.gc.collections.elapsed
+ jvm.memory.heap.init
+ jvm.memory.heap.max
+ jvm.memory.heap.used
+ jvm.memory.heap.committed
+ jvm.memory.nonheap.init
+ jvm.memory.nonheap.max
+ jvm.memory.nonheap.used
+ jvm.memory.nonheap.committed
+ jvm.memory.pool.init
+ jvm.memory.pool.max
+ jvm.memory.pool.used
+ jvm.memory.pool.committed
+ jvm.threads.count

## Resolución de problemas
<a name="solution-jvm-troubleshooting"></a>

Hay algunas cosas que pueden provocar un error en la configuración del proyecto. Asegúrese de revisar lo siguiente.
+ Debe cumplir todos los [requisitos previos](#solution-jvm-prerequisites) antes de instalar la solución.
+ El clúster debe tener al menos un nodo antes de intentar crear la solución o acceder a las métricas.
+ Su clúster de Amazon EKS debe tener instalados los complementos `AWS CNI`, `CoreDNS` y `kube-proxy`. Si no están instalados, la solución no funcionará correctamente. Se instalan de forma predeterminada al crear el clúster a través de la consola. Es posible que tengas que instalarlos si el clúster se creó mediante un AWS SDK.
+ Se agotó el tiempo de espera para la instalación de los pods de Amazon EKS. Esto puede ocurrir si no hay suficiente capacidad de nodos disponible. Estos problemas se deben a varias causas, entre las que se incluyen las siguientes:
  + El clúster de Amazon EKS se inicializó con Fargate y no con Amazon EC2. Este proyecto requiere Amazon EC2.
  + Los nodos tienen [taints](https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html) y, por lo tanto, no están disponibles.

    Puede utilizar `kubectl describe node NODENAME | grep Taints` para comprobar las taints. Luego, `kubectl taint node NODENAME TAINT_NAME-` para eliminar las taints. Asegúrese de incluir `-` después del nombre de la taint.
  + Los nodos han alcanzado el límite de capacidad. En este caso, puede crear un nodo nuevo o aumentar la capacidad.
+ No ve ningún panel en Grafana: está utilizando un ID de espacio de trabajo de Grafana incorrecto.

  Ejecute el siguiente comando para obtener información acerca de Grafana:

  ```
  kubectl describe grafanas external-grafana -n grafana-operator
  ```

  Puede comprobar los resultados para ver la URL del espacio de trabajo correcta. Si no es la que esperaba, vuelva a implementarla con el ID de espacio de trabajo correcto.

  ```
  Spec:
    External:
      API Key:
        Key:   GF_SECURITY_ADMIN_APIKEY
        Name:  grafana-admin-credentials
      URL:     https://g-123example.grafana-workspace.aws-region.amazonaws.com
  Status:
    Admin URL:  https://g-123example.grafana-workspace.aws-region.amazonaws.com
    Dashboards:
      ...
  ```
+ No ve ningún panel en Grafana: está utilizando una clave de API caducada.

  Para detectar esto, tendrá que usar el operador grafana y comprobar si hay errores en los registros. Obtenga el nombre del operador de Grafana con este comando:

  ```
  kubectl get pods -n grafana-operator
  ```

  Esto devolverá el nombre del operador, por ejemplo:

  ```
  NAME                               READY   STATUS    RESTARTS   AGE
  grafana-operator-1234abcd5678ef90   1/1     Running   0          1h2m
  ```

  Utilice el nombre del operador en el siguiente comando:

  ```
  kubectl logs grafana-operator-1234abcd5678ef90 -n grafana-operator
  ```

  Los mensajes de error como los siguientes indican que la clave de API ha caducado:

  ```
  ERROR   error reconciling datasource    {"controller": "grafanadatasource", "controllerGroup": "grafana.integreatly.org", "controllerKind": "GrafanaDatasource", "GrafanaDatasource": {"name":"grafanadatasource-sample-amp","namespace":"grafana-operator"}, "namespace": "grafana-operator", "name": "grafanadatasource-sample-amp", "reconcileID": "72cfd60c-a255-44a1-bfbd-88b0cbc4f90c", "datasource": "grafanadatasource-sample-amp", "grafana": "external-grafana", "error": "status: 401, body: {\"message\":\"Expired API key\"}\n"}
  github.com/grafana-operator/grafana-operator/controllers.(*GrafanaDatasourceReconciler).Reconcile
  ```

  En este caso, cree una nueva clave de API y vuelva a implementar la solución. Si el problema persiste, puede forzar la sincronización mediante el siguiente comando antes de volver a implementarlo:

  ```
  kubectl delete externalsecret/external-secrets-sm -n grafana-operator
  ```
+ Falta un parámetro de SSM. Si ve un error similar al siguiente, ejecute `cdk bootstrap` y vuelva a intentarlo.

  ```
  Deployment failed: Error: aws-observability-solution-jvm-eks-$EKS_CLUSTER_NAME: SSM 
  parameter /cdk-bootstrap/xxxxxxx/version not found. Has the environment been 
  bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/
  guide/bootstrapping.html)
  ```

# Solución para supervisar aplicaciones de Kafka con Amazon Managed Grafana
<a name="solution-kafka"></a>

Las aplicaciones creadas sobre [Apache Kafka](https://kafka.apache.org) tienen necesidades de supervisión especializadas. En esta página se describe una plantilla que proporciona una solución para supervisar las aplicaciones de Kafka que se ejecutan en máquinas virtuales Java en su clúster de Amazon EKS. La solución se puede instalar mediante [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html).

**nota**  
Esta solución no admite la supervisión de aplicaciones de Amazon Managed Streaming para aplicaciones de Apache Kafka. Para obtener más información sobre la supervisión de aplicaciones de Amazon MSK, consulte [Supervisión de un clúster de Amazon MSK](https://docs.aws.amazon.com/msk/latest/developerguide/monitoring.html) en la *Guía para desarrolladores de Amazon Managed Streaming para Apache Kafka*.

Esta solución configura:
+ El espacio de trabajo de Amazon Managed Service para Prometheus se utiliza para almacenar métricas de Kafka y de la máquina virtual Java (JVM) del clúster de Amazon EKS.
+ Recopilación de métricas específicas de Kafka y JVM mediante el CloudWatch agente, así como un complemento de CloudWatch agente. Las métricas se configuran para enviarse al espacio de trabajo de Amazon Managed Service para Prometheus.
+ El espacio de trabajo de Amazon Managed Grafana puede extraer esas métricas y crear paneles que lo ayuden a supervisar su clúster.

**nota**  
Mediante esta solución se proporcionan métricas de JVM y Kafka para la aplicación que se ejecuta en Amazon EKS, pero no se incluyen las métricas de Amazon EKS. Puede usar la [solución de observabilidad para supervisar Amazon EKS](solution-eks.md) y ver las métricas y alertas de su clúster de Amazon EKS.

## Acerca de esta solución
<a name="solution-kafka-about"></a>

Con esta solución, se configura un espacio de trabajo de Amazon Managed Grafana para proporcionar métricas para su aplicación de Apache Kafka. Las métricas se utilizan para generar paneles de control que lo ayudan a operar su aplicación de manera más eficaz al proporcionar información sobre el rendimiento y la carga de trabajo de la aplicación de Kafka.

En la siguiente imagen se muestra un ejemplo de uno de los paneles creados por esta solución.

![\[Imagen en la que se muestra un ejemplo de una carpeta de panel de Grafana creada con esta solución.\]](http://docs.aws.amazon.com/es_es/grafana/latest/userguide/images/kafka-solution-cluster-overview.png)


Las métricas se recopilan con un intervalo de extracción de 1 minuto. Los paneles muestran las métricas agregadas en 1 minuto, 5 minutos o más, en función de la métrica específica.

Para obtener una lista de las métricas rastreadas por esta solución, consulte [Lista de métricas rastreadas](#solution-kafka-metrics).

## Costos
<a name="solution-kafka-costs"></a>

Esta solución crea y utiliza recursos en su espacio de trabajo. Se le cobrará por el uso estándar de los recursos creados, que incluyen:
+ Acceso de los usuarios al espacio de trabajo de Amazon Managed Grafana. Para obtener más información acerca de los precios, consulte [Precios de Amazon Managed Grafana](https://aws.amazon.com/grafana/pricing/).
+ Ingesta y almacenamiento de métricas de Amazon Managed Service para Prometheus y análisis de métricas (procesamiento de muestras de consulta). El número de métricas que utiliza esta solución depende de la configuración y el uso de la aplicación.

  Puedes ver las métricas de ingesta y almacenamiento en Amazon Managed Service for Prometheus CloudWatch utilizando Para obtener más información, consulta las [CloudWatchmétricas](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-CW-usage-metrics.html) en la Guía del usuario de *Amazon Managed Service for* Prometheus.

  Puede calcular el costo utilizando la calculadora de precios de la página [Precios de Amazon Managed Service para Prometheus](https://aws.amazon.com/prometheus/pricing/). El número de métricas dependerá del número de nodos del clúster y de las métricas que generen las aplicaciones.
+ Costos de red. Puede incurrir en cargos de AWS red estándar por tráfico cruzado de zonas de disponibilidad, región u otro tipo de tráfico.

Las calculadoras de precios, disponibles en la página de precios de cada producto, pueden ayudarlo a comprender los posibles costos de su solución. La siguiente información puede ayudar a obtener un costo base de la solución que se ejecuta en la misma zona de disponibilidad que el clúster de Amazon EKS.


| Producto | Métrica de la calculadora | Valor | 
| --- | --- | --- | 
| Servicio administrado por Amazon para Prometheus | Serie activa | 95 (por pod de Kafka) | 
|  | Intervalo promedio de recopilación | 60 (segundos) | 
| Amazon Managed Grafana | Número de editores o administradores activos | 1 (o más, en función de sus usuarios) | 

Estos números son los números base de una solución que ejecuta Kafka en Amazon EKS. Esto le proporcionará una estimación de los costos base. A medida que añada los pods de Kafka a la aplicación, los costos aumentarán, como se muestra. Estos costos excluyen los costos de uso de la red, que variarán en función de si el espacio de trabajo de Grafana gestionado por Amazon, el espacio de trabajo de Amazon Managed Service for Prometheus y el clúster de Amazon EKS se encuentran en la misma zona de disponibilidad y la misma VPN. Región de AWS

## Requisitos previos
<a name="solution-kafka-prerequisites"></a>

Esta solución requiere que haya hecho lo siguiente antes de utilizarla.

1. Debe tener o **crear un clúster de Amazon Elastic Kubernetes Service** que desee supervisar y el clúster debe tener al menos un nodo. El clúster debe tener configurado el acceso al punto de conexión del servidor de API para incluir el acceso privado (también puede permitir el acceso público).

   El [modo de autenticación](https://docs.aws.amazon.com/eks/latest/userguide/grant-k8s-access.html#set-cam) debe incluir el acceso a la API (se puede configurar en `API` o `API_AND_CONFIG_MAP`). Esto permite que la implementación de la solución utilice entradas de acceso.

   Se debe instalar lo siguiente en el clúster (es cierto de forma predeterminada al crear el clúster a través de la consola, pero se debe añadir si se crea el clúster mediante la AWS API o AWS CLI): Amazon EKS Pod Identity Agent, AWS CNI, CoreDNS, Kube-proxy y controlador CSI de Amazon EBS AddOns (el controlador CSI de Amazon EBS no es técnicamente necesario para la solución, pero sí para la mayoría de las aplicaciones de Kafka). AddOn 

   *Guarde el nombre del clúster para especificarlo más adelante*. Puede consultarlo en los detalles del clúster en la consola de Amazon EKS.
**nota**  
Para obtener más información sobre cómo crear un clúster de Amazon EKS, consulte [Introducción a Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html).

1. Debe ejecutar una aplicación de Apache Kafka en máquinas virtuales Java de su clúster de Amazon EKS.

1. Debe **crear un espacio de trabajo de Amazon Managed Service for Prometheus** en el mismo lugar que su clúster Cuenta de AWS de Amazon EKS. Para obtener más información, consulte [Create a workspace](https://docs.aws.amazon.com/prometheus/latest/userguide/AMP-create-workspace.html) en la *Guía del usuario de Amazon Managed Service para Prometheus*.

   *Guarde el ARN del espacio de trabajo de Amazon Managed Service para Prometheus para especificarlo más adelante.*

1. Debe **crear un espacio de trabajo de Grafana gestionado por Amazon** con Grafana versión 9 o posterior, al igual que Región de AWS su clúster de Amazon EKS. Para obtener más información sobre la creación de un nuevo espacio de trabajo, consulte [Creación de un espacio de trabajo de Amazon Managed Grafana](AMG-create-workspace.md).

   El rol de espacio de trabajo debe tener permisos para acceder a Amazon Managed Service para Prometheus y Amazon. CloudWatch APIs La forma más sencilla de hacerlo es utilizar los [permisos gestionados por el servicio y seleccionar Amazon Managed](AMG-manage-permissions.md) Service for Prometheus y. CloudWatch También puedes añadir manualmente las [AmazonGrafanaCloudWatchAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonGrafanaCloudWatchAccess)políticas [AmazonPrometheusQueryAccess](https://docs.aws.amazon.com/prometheus/latest/userguide/security-iam-awsmanpol.html#AmazonPrometheusQueryAccess)y a la función de IAM de tu espacio de trabajo.

   *Guarde el ID y el punto de conexión del espacio de trabajo de Amazon Managed Grafana para especificarlos más adelante.* El ID tiene el formato `g-123example`. El ID y el punto de conexión se encuentran en la consola de Amazon Managed Grafana. El punto de conexión es la URL del espacio de trabajo e incluye el ID. Por ejemplo, `https://g-123example.grafana-workspace.<region>.amazonaws.com/`.

**nota**  
Si bien no es estrictamente obligatorio configurar la solución, debe configurar la autenticación de usuario en su espacio de trabajo de Amazon Managed Grafana antes de que los usuarios puedan acceder a los paneles creados. Para obtener más información, consulte [Autenticación de usuarios en los espacios de trabajo de Amazon Managed Grafana](authentication-in-AMG.md).

## Uso de esta solución
<a name="solution-kafka-use"></a>

Esta solución configura la AWS infraestructura para admitir las métricas de informes y monitoreo de una aplicación de Kafka que se ejecuta en un clúster de Amazon EKS. Puede instalarse mediante [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html).

**nota**  
En estos pasos se da por sentado que tiene un entorno con y AWS CLI AWS CDK, y tanto [Node.js](https://nodejs.org/) como [NPM](https://docs.npmjs.com/) instalados. Utilizará `make` y `brew` para simplificar la compilación y otras acciones habituales.

**Para usar esta solución para monitorear un clúster de Amazon EKS con AWS CDK**

1. Asegúrese de que completar todos los pasos [previos](#solution-kafka-prerequisites).

1. Descargue todos los archivos de la solución desde Amazon S3. Los archivos se encuentran en `s3://aws-observability-solutions/Kafka_EKS/OSS/CDK/v1.0.0/iac` y puede descargarlos con el siguiente comando de Amazon S3. Ejecute este comando desde una carpeta de su entorno de línea de comandos.

   ```
   aws s3 sync s3://aws-observability-solutions/Kafka_EKS/OSS/CDK/v1.0.0/iac/ .
   ```

   No es necesario modificar estos archivos.

1. En su entorno de línea de comandos (desde la carpeta en la que descargó los archivos de la solución), ejecute los siguientes comandos.

   Establezca las variables de entorno necesarias. Sustituya *REGION* *AMG\$1ENDPOINT**EKS\$1CLUSTER*, y *AMP\$1ARN* por su punto final de espacio de trabajo de Amazon Managed Grafana (en el formulario`http://g-123example.grafana-workspace.us-east-1.amazonaws.com`) Región de AWS, el nombre del clúster de Amazon EKS y el ARN del espacio de trabajo de Amazon Managed Service for Prometheus.

   ```
   export AWS_REGION=REGION
   export AMG_ENDPOINT=AMG_ENDPOINT
   export EKS_CLUSTER_NAME=EKS_CLUSTER
   export AMP_WS_ARN=AMP_ARN
   ```

1. Debe crear anotaciones que puedan ser utilizadas por la implementación. Puede optar por anotar directamente un espacio de nombres, una implementación, un statefulset, un daemonset o sus pods. La solución de Kafka requiere cinco anotaciones. Utilizará `kubectl` para anotar sus recursos con los siguientes comandos:

   ```
   kubectl annotate <resource-type> <resource-value> instrumentation.opentelemetry.io/inject-java=true
   kubectl annotate <resource-type> <resource-value> cloudwatch.aws.amazon.com/inject-jmx-jvm=true
   kubectl annotate <resource-type> <resource-value> cloudwatch.aws.amazon.com/inject-jmx-kafka=true
   kubectl annotate <resource-type> <resource-value> cloudwatch.aws.amazon.com/inject-jmx-kafka-producer=true
   kubectl annotate <resource-type> <resource-value> cloudwatch.aws.amazon.com/inject-jmx-kafka-consumer=true
   ```

   Sustituya *<resource-type>* y por *<resource-value>* los valores correctos para su sistema. Por ejemplo, para anotar la implementación `foo`, el primer comando sería:

   ```
   kubectl annotate deployment foo instrumentation.opentelemetry.io/inject-java=true
   ```

1. Cree un token de cuenta de servicio con acceso ADMIN para llamar a Grafana HTTP. APIs Para obtener más información, consulte [Utilice cuentas de servicio para autenticarse con el HTTP de Grafana APIs](service-accounts.md). Puedes usarlo AWS CLI con los siguientes comandos para crear el token. Deberás sustituirlo por el *GRAFANA\$1ID* ID de tu espacio de trabajo de Grafana (aparecerá en el formulario`g-123example`). Esta clave caducará después de 7200 segundos o 2 horas. Si es necesario, puede cambiar la hora (`seconds-to-live`). La implementación tarda menos de una hora.

   ```
   # creates a new service account (optional: you can use an existing account)
   GRAFANA_SA_ID=$(aws grafana create-workspace-service-account \
     --workspace-id GRAFANA_ID \
     --grafana-role ADMIN \
     --name grafana-operator-key \
     --query 'id' \
     --output text)
   
   # creates a new token for calling APIs
   export AMG_API_KEY=$(aws grafana create-workspace-service-account-token \
     --workspace-id $managed_grafana_workspace_id \
     --name "grafana-operator-key-$(date +%s)" \
     --seconds-to-live 7200 \
     --service-account-id $GRAFANA_SA_ID \
     --query 'serviceAccountToken.key' \
     --output text)
   ```

   Haz que la clave de API esté disponible para el AWS CDK agregándola AWS Systems Manager con el siguiente comando. *AWS\$1REGION*Sustitúyala por la región en la que se ejecutará la solución (en el formulario`us-east-1`).

   ```
   aws ssm put-parameter --name "/observability-aws-solution-kafka-eks/grafana-api-key" \
     --type "SecureString" \
     --value $AMG_API_KEY \
     --region AWS_REGION \
     --overwrite
   ```

1. Ejecute el siguiente comando `make`, que instalará cualquier otra dependencia del proyecto.

   ```
   make deps
   ```

1. Por último, ejecute el AWS CDK proyecto:

   ```
   make build && make pattern aws-observability-solution-kafka-eks-$EKS_CLUSTER_NAME deploy
   ```

1. [Opcional] Una vez finalizada la creación de la pila, puede utilizar el mismo entorno para crear más instancias de la pila para otras aplicaciones de Kafka que se ejecutan en clústeres de Amazon EKS de la misma región, siempre que cumpla los demás requisitos previos para cada uno de ellos (incluidos los espacios de trabajo independientes de Amazon Managed Grafana y Amazon Managed Service para Prometheus). Deberá redefinir los comandos `export` con los nuevos parámetros.

Cuando se complete la creación de la pila, su espacio de trabajo de Amazon Managed Grafana se completará con un panel con las métricas de su aplicación y clúster de Amazon EKS. Las métricas tardarán unos minutos en mostrarse, a medida que se comience a reunirlas.

## Lista de métricas rastreadas
<a name="solution-kafka-metrics"></a>

Esta solución recopila métricas de su aplicación de Kafka basada en JVM. Estas métricas se almacenan en Amazon Managed Service para Prometheus y, después, se muestran en los paneles de Amazon Managed Grafana.

Con esta solución, se realiza un seguimiento de las siguientes métricas.
+ jvm.classes.loaded
+ jvm.gc.collections.count
+ jvm.gc.collections.elapsed
+ jvm.memory.heap.init
+ jvm.memory.heap.max
+ jvm.memory.heap.used
+ jvm.memory.heap.committed
+ jvm.memory.nonheap.init
+ jvm.memory.nonheap.max
+ jvm.memory.nonheap.used
+ jvm.memory.nonheap.committed
+ jvm.memory.pool.init
+ jvm.memory.pool.max
+ jvm.memory.pool.used
+ jvm.memory.pool.committed
+ jvm.threads.count
+ kafka.message.count
+ kafka.request.count
+ kafka.request.failed
+ kafka.request.time.total
+ kafka.request.time.50p
+ kafka.request.time.99p
+ kafka.request.time.avg
+ kafka.network.io
+ kafka.purgatory.size
+ kafka.partition.count
+ kafka.partition.offline
+ kafka.partition.under\$1replicated
+ kafka.isr.operation.count
+ kafka.max.lag
+ kafka.controller.active.count
+ kafka.leader.election.rate
+ kafka.unclean.election.rate
+ kafka.request.queue
+ kafka.logs.flush.time.count
+ kafka.logs.flush.time.median
+ kafka.logs.flush.time.99p
+ kafka.consumer.fetch-rate
+ kafka.consumer. records-lag-max
+ kafka.consumer.total. bytes-consumed-rate
+ kafka.consumer.total. fetch-size-avg
+ kafka.consumer.total. records-consumed-rate
+ kafka.consumer. bytes-consumed-rate
+ kafka.consumer. fetch-size-avg
+ kafka.consumer. records-consumed-rate
+ kafka.productor. io-wait-time-ns-promedio
+ kafka.productor. outgoing-byte-rate
+ kafka.productor. request-latency-avg
+ kafka.producer.request-rate
+ kafka.producer.response-rate
+ kafka.producer.byte-rate
+ kafka.producer.compression-rate
+ kafka.productor. record-error-rate
+ kafka.productor. record-retry-rate
+ kafka.productor. record-send-rate

## Resolución de problemas
<a name="solution-kafka-troubleshooting"></a>

Hay algunas cosas que pueden provocar un error en la configuración del proyecto. Asegúrese de revisar lo siguiente.
+ Debe cumplir todos los [requisitos previos](#solution-kafka-prerequisites) antes de instalar la solución.
+ El clúster debe tener al menos un nodo antes de intentar crear la solución o acceder a las métricas.
+ Su clúster de Amazon EKS debe tener instalados los complementos `AWS CNI`, `CoreDNS` y `kube-proxy`. Si no están instalados, la solución no funcionará correctamente. Se instalan de forma predeterminada al crear el clúster a través de la consola. Es posible que tengas que instalarlos si el clúster se creó mediante un AWS SDK.
+ Se agotó el tiempo de espera para la instalación de los pods de Amazon EKS. Esto puede ocurrir si no hay suficiente capacidad de nodos disponible. Estos problemas se deben a varias causas, entre las que se incluyen las siguientes:
  + El clúster de Amazon EKS se inicializó con Fargate y no con Amazon EC2. Este proyecto requiere Amazon EC2.
  + Los nodos tienen [taints](https://docs.aws.amazon.com/eks/latest/userguide/node-taints-managed-node-groups.html) y, por lo tanto, no están disponibles.

    Puede utilizar `kubectl describe node NODENAME | grep Taints` para comprobar las taints. Luego, `kubectl taint node NODENAME TAINT_NAME-` para eliminar las taints. Asegúrese de incluir `-` después del nombre de la taint.
  + Los nodos han alcanzado el límite de capacidad. En este caso, puede crear un nodo nuevo o aumentar la capacidad.
+ No ve ningún panel en Grafana: está utilizando un ID de espacio de trabajo de Grafana incorrecto.

  Ejecute el siguiente comando para obtener información acerca de Grafana:

  ```
  kubectl describe grafanas external-grafana -n grafana-operator
  ```

  Puede comprobar los resultados para ver la URL del espacio de trabajo correcta. Si no es la que esperaba, vuelva a implementarla con el ID de espacio de trabajo correcto.

  ```
  Spec:
    External:
      API Key:
        Key:   GF_SECURITY_ADMIN_APIKEY
        Name:  grafana-admin-credentials
      URL:     https://g-123example.grafana-workspace.aws-region.amazonaws.com
  Status:
    Admin URL:  https://g-123example.grafana-workspace.aws-region.amazonaws.com
    Dashboards:
      ...
  ```
+ No ve ningún panel en Grafana: está utilizando una clave de API caducada.

  Para detectar esto, tendrá que usar el operador grafana y comprobar si hay errores en los registros. Obtenga el nombre del operador de Grafana con este comando:

  ```
  kubectl get pods -n grafana-operator
  ```

  Esto devolverá el nombre del operador, por ejemplo:

  ```
  NAME                               READY   STATUS    RESTARTS   AGE
  grafana-operator-1234abcd5678ef90   1/1     Running   0          1h2m
  ```

  Utilice el nombre del operador en el siguiente comando:

  ```
  kubectl logs grafana-operator-1234abcd5678ef90 -n grafana-operator
  ```

  Los mensajes de error como los siguientes indican que la clave de API ha caducado:

  ```
  ERROR   error reconciling datasource    {"controller": "grafanadatasource", "controllerGroup": "grafana.integreatly.org", "controllerKind": "GrafanaDatasource", "GrafanaDatasource": {"name":"grafanadatasource-sample-amp","namespace":"grafana-operator"}, "namespace": "grafana-operator", "name": "grafanadatasource-sample-amp", "reconcileID": "72cfd60c-a255-44a1-bfbd-88b0cbc4f90c", "datasource": "grafanadatasource-sample-amp", "grafana": "external-grafana", "error": "status: 401, body: {\"message\":\"Expired API key\"}\n"}
  github.com/grafana-operator/grafana-operator/controllers.(*GrafanaDatasourceReconciler).Reconcile
  ```

  En este caso, cree una nueva clave de API y vuelva a implementar la solución. Si el problema persiste, puede forzar la sincronización mediante el siguiente comando antes de volver a implementarlo:

  ```
  kubectl delete externalsecret/external-secrets-sm -n grafana-operator
  ```
+ Falta un parámetro de SSM. Si ve un error similar al siguiente, ejecute `cdk bootstrap` y vuelva a intentarlo.

  ```
  Deployment failed: Error: aws-observability-solution-kafka-eks-$EKS_CLUSTER_NAME: SSM 
  parameter /cdk-bootstrap/xxxxxxx/version not found. Has the environment been 
  bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/
  guide/bootstrapping.html)
  ```