

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.

# Gestione Amazon Managed Service para Prometheus AWS con controladores para Kubernetes
<a name="integrating-ack"></a>

Amazon Managed Service para Prometheus está integrado con los [controladores de AWS para Kubernetes (ACK)](https://aws-controllers-k8s.github.io/community/docs/community/overview/) y permite administrar los recursos del espacio de trabajo, el administrador de alertas y las reglas en Amazon EKS. Puede usar las definiciones de recursos personalizadas (CRDs) de AWS Controllers for Kubernetes y los objetos nativos de Kubernetes sin tener que definir ningún recurso externo a su clúster.

En esta sección se describe cómo configurar los AWS controladores para Kubernetes y Amazon Managed Service para Prometheus en un clúster de Amazon EKS existente.

También puedes leer las entradas del blog sobre [AWS Controllers for Kubernetes](https://aws.amazon.com/blogs/containers/aws-controllers-for-kubernetes-ack/) y sobre [el controlador ACK para Amazon Managed Service for Prometheus](https://aws.amazon.com/blogs/mt/introducing-the-ack-controller-for-amazon-managed-service-for-prometheus/).

## Requisitos previos
<a name="ack-prereqs"></a>

Antes de empezar a integrar AWS Controllers for Kubernetes y Amazon Managed Service for Prometheus con su clúster de Amazon EKS, debe cumplir los siguientes requisitos previos.
+ Debe tener una cuenta [Cuenta de AWS y permisos](AMP-setting-up.md) para crear funciones de Amazon Managed Service for Prometheus e IAM mediante programación.
+ Debe tener un [clúster de Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started-console.html) existente con OpenID Connect (OIDC) habilitado.

  Si no tiene OIDC habilitado, puede utilizar el siguiente comando para habilitarlo. Recuerde sustituir los valores *YOUR\$1CLUSTER\$1NAME* y *AWS\$1REGION* por los correctos para su cuenta.

  ```
  eksctl utils associate-iam-oidc-provider \
      --cluster ${YOUR_CLUSTER_NAME} --region ${AWS_REGION} \
      --approve
  ```

  Para obtener más información sobre el uso de OIDC con Amazon EKS, consulte [Autenticación de proveedores de identidad OIDC](https://docs.aws.amazon.com/eks/latest/userguide/authenticate-oidc-identity-provider.html) y [Creación de un proveedor de OIDC de IAM](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html) en la *Guía del usuario de Amazon EKS*. 
+ Debe tener el [controlador de CSI de Amazon EBS instalado](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html) en el clúster de Amazon EKS.
+ Debe tener la [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) instalada. AWS CLI Se usa para llamar a la AWS funcionalidad desde la línea de comandos.
+ [Helm](https://docs.aws.amazon.com/eks/latest/userguide/helm.html), el administrador de paquetes de Kubernetes, debe estar instalado.
+ Las [métricas del plano de control con Prometheus](https://docs.aws.amazon.com/eks/latest/userguide/prometheus.html) deben estar configuradas en el clúster de Amazon EKS.
+ Debe tener un tema de [Amazon Simple Notification Service (Amazon SNS)](https://docs.aws.amazon.com/sns/) al que desee enviar alertas desde el nuevo espacio de trabajo. Asegúrese de [haber dado permiso a Amazon Managed Service para Prometheus para enviar mensajes al tema](AMP-alertmanager-receiver-AMPpermission.md).

Si el clúster de Amazon EKS está configurado correctamente, debería poder ver las métricas formateadas para Prometheus llamando a `kubectl get --raw /metrics`. Ahora está listo para instalar un controlador de servicio de AWS Controllers for Kubernetes y usarlo para implementar los recursos de Amazon Managed Service for Prometheus.

## Implementación de un espacio de trabajo con Controllers for Kubernetes AWS
<a name="ack-deploy-workspace"></a>

Para implementar un nuevo espacio de trabajo de Amazon Managed Service for Prometheus, instalará AWS un controlador de Controllers for Kubernetes y, a continuación, lo usará para crear el espacio de trabajo.

**Para implementar un nuevo espacio AWS de trabajo de Amazon Managed Service para Prometheus con Controllers for Kubernetes**

1. Utilice los siguientes comandos para usar Helm e instalar el controlador de servicios de Amazon Managed Service para Prometheus. Para obtener más información, consulte la documentación sobre la [instalación de un controlador ACK en la sección AWS Controllers](https://aws-controllers-k8s.github.io/community/docs/user-docs/install/) for Kubernetes. GitHub Utilice la correcta *region* para su sistema, por ejemplo. `us-east-1`

   ```
   export SERVICE=prometheusservice
   export RELEASE_VERSION=`curl -sL https://api.github.com/repos/aws-controllers-k8s/$SERVICE-controller/releases/latest | jq -r '.tag_name | ltrimstr("v")'`
   export ACK_SYSTEM_NAMESPACE=ack-system
   export AWS_REGION=region
   
   aws ecr-public get-login-password --region us-east-1 | helm registry login --username AWS --password-stdin public.ecr.aws
   helm install --create-namespace -n $ACK_SYSTEM_NAMESPACE ack-$SERVICE-controller \
     oci://public.ecr.aws/aws-controllers-k8s/$SERVICE-chart --version=$RELEASE_VERSION --set=aws.region=$AWS_REGION
   ```

   Al cabo de unos instantes, debería ver una respuesta similar a la siguiente, lo que indicará que el proceso ha sido correcto.

   ```
   You are now able to create Amazon Managed Service for Prometheus (AMP) resources!
   The controller is running in "cluster" mode.
   The controller is configured to manage AWS resources in region: "us-east-1"
   ```

   Si lo desea, puede comprobar si el controlador de AWS Controllers for Kubernetes se ha instalado correctamente con el siguiente comando.

   ```
   helm list --namespace $ACK_SYSTEM_NAMESPACE -o yaml
   ```

   Esto devolverá información sobre el controlador `ack-prometheusservice-controller`, incluido el `status: deployed`.

1. Cree un archivo denominado `workspace.yaml` con el siguiente contenido. Esto se usará como configuración para el espacio de trabajo que está creando.

   ```
   apiVersion: prometheusservice.services.k8s.aws/v1alpha1
   kind: Workspace
   metadata:
     name: my-amp-workspace
   spec:
     alias: my-amp-workspace
     tags:
       ClusterName: EKS-demo
   ```

1. Ejecute el siguiente comando para crear el espacio de trabajo (este comando depende de las variables del sistema que haya configurado en el paso 1).

   ```
   kubectl apply -f workspace.yaml -n $ACK_SYSTEM_NAMESPACE
   ```

   Al cabo de unos instantes, debería poder ver un nuevo espacio de trabajo llamado `my-amp-workspace` en la cuenta.

   Ejecute el siguiente comando para ver los detalles y el estado del espacio de trabajo, incluido el *ID del espacio de trabajo*. Como alternativa, puede ver el nuevo espacio de trabajo en la [consola de Amazon Managed Service para Prometheus](https://console.aws.amazon.com/prometheus).

   ```
   kubectl describe workspace my-amp-workspace -n $ACK_SYSTEM_NAMESPACE
   ```
**nota**  
También puede [utilizar un espacio de trabajo existente](https://aws-controllers-k8s.github.io/community/docs/user-docs/adopted-resource/) en lugar de crear uno nuevo.

1. Cree dos archivos yaml nuevos como configuración para los grupos de reglas y los creará a continuación con la AlertManager siguiente configuración.

   Guarde esta configuración como `rulegroup.yaml`. *WORKSPACE-ID*Sustitúyalo por el ID del espacio de trabajo del paso anterior.

   ```
   apiVersion: prometheusservice.services.k8s.aws/v1alpha1
   kind: RuleGroupsNamespace
   metadata:
     name: default-rule
   spec:
     workspaceID: WORKSPACE-ID
     name: default-rule
     configuration: |
       groups:
       - name: example
         rules:
         - alert: HostHighCpuLoad
           expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 60
           for: 5m
           labels:
             severity: warning
             event_type: scale_up
           annotations:
             summary: Host high CPU load (instance {{ $labels.instance }})
             description: "CPU load is > 60%\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
         - alert: HostLowCpuLoad
           expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) < 30
           for: 5m
           labels:
             severity: warning
             event_type: scale_down
           annotations:
             summary: Host low CPU load (instance {{ $labels.instance }})
             description: "CPU load is < 30%\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
   ```

   Guarde la siguiente configuración como `alertmanager.yaml`. *WORKSPACE-ID*Sustitúyalo por el ID del espacio de trabajo del paso anterior. *TOPIC-ARN*Sustitúyalo por el ARN del tema Amazon SNS al que quieres enviar las notificaciones *REGION* y por Región de AWS el que estés utilizando. Recuerde que Amazon Managed Service para Prometheus [debe tener permisos](AMP-alertmanager-receiver-AMPpermission.md) para el tema de Amazon SNS.

   ```
   apiVersion: prometheusservice.services.k8s.aws/v1alpha1
   kind: AlertManagerDefinition
   metadata:
     name: alert-manager
   spec:
     workspaceID: WORKSPACE-ID
     configuration: |
       alertmanager_config: |
         route:
            receiver: default_receiver
         receivers:
           - name: default_receiver
             sns_configs:
             - topic_arn: TOPIC-ARN
               sigv4:
                 region: REGION
               message: |
                 alert_type: {{ .CommonLabels.alertname }}
                 event_type: {{ .CommonLabels.event_type }}
   ```
**nota**  
Para obtener más información sobre los formatos de estos archivos de configuración, consulte [RuleGroupsNamespaceData](https://docs.aws.amazon.com/prometheus/latest/APIReference/yaml-RuleGroupsNamespaceData.html) y [AlertManagerDefinitionData](https://docs.aws.amazon.com/prometheus/latest/APIReference/yaml-AlertManagerDefinitionData.html).

1. Ejecute los siguientes comandos para crear el grupo de reglas y la configuración del administrador de alertas (este comando depende de las variables del sistema que haya configurado en el paso 1).

   ```
   kubectl apply -f rulegroup.yaml -n $ACK_SYSTEM_NAMESPACE
   kubectl apply -f alertmanager.yaml -n $ACK_SYSTEM_NAMESPACE
   ```

   Los cambios estarán disponibles en unos momentos.
**nota**  
Para actualizar un recurso en lugar de crear uno nuevo, basta con actualizar el archivo yaml y volver a ejecutar el comando `kubectl apply`.  
Para eliminar un recurso, utilice el siguiente comando. *ResourceType*Sustitúyalo por el tipo de recurso que desee eliminar `Workspace``AlertManagerDefinition`, o. `RuleGroupNamespace` *ResourceName*Sustitúyalo por el nombre del recurso que se va a eliminar.  

   ```
   kubectl delete ResourceType ResourceName -n $ACK_SYSTEM_NAMESPACE
   ```

Esto completa la implementación del nuevo espacio de trabajo. En la siguiente sección, se describe la configuración del clúster para enviar métricas a ese espacio de trabajo.

## Configuración de un clúster de Amazon EKS para escribir en el espacio de trabajo de Amazon Managed Service para Prometheus
<a name="ack-configure-workspace"></a>

En esta sección, se describe cómo usar Helm para configurar la instancia de Prometheus que se ejecuta en el clúster de Amazon EKS a fin de escribir métricas de forma remota en el espacio de trabajo de Amazon Managed Service para Prometheus que ha creado en la sección anterior.

Para este procedimiento, necesitará el nombre del rol de IAM que ha creado para utilizarlo en la ingesta de métricas. Si aún no lo ha hecho, consulte [Configuración de roles de servicio para la ingesta de métricas desde los clústeres de Amazon EKS](set-up-irsa.md#set-up-irsa-ingest) para obtener más información e instrucciones. Si sigue estas instrucciones, el rol de IAM se denominará `amp-iamproxy-ingest-role`.

**Para configurar el clúster de Amazon EKS para la escritura remota**

1. Utilice el siguiente comando a fin de obtener el `prometheusEndpoint` para el espacio de trabajo. *WORKSPACE-ID*Sustitúyalo por el ID del espacio de trabajo de la sección anterior.

   ```
   aws amp describe-workspace --workspace-id WORKSPACE-ID
   ```

   El prometheusEndpoint aparecerá en los resultados devueltos y tendrá el siguiente formato:

   ```
   https://aps-workspaces.us-west-2.amazonaws.com/workspaces/ws-a1b2c3d4-a123-b456-c789-ac1234567890/
   ```

   Guarde esta URL para utilizarla en los pasos siguientes.

1. Cree un nuevo archivo con el siguiente texto y llámelo `prometheus-config.yaml`. *account*Sustitúyelo por el ID *workspaceURL/* de su cuenta, por la URL que acaba de encontrar y *region* Región de AWS por la correspondiente a su sistema.

   ```
   serviceAccounts:
           server:
               name: "amp-iamproxy-ingest-service-account"
               annotations:
                   eks.amazonaws.com/role-arn: "arn:aws:iam::account:role/amp-iamproxy-ingest-role"
   server:
       remoteWrite:
           - url: workspaceURL/api/v1/remote_write
             sigv4:
               region: region
             queue_config:
               max_samples_per_send: 1000
               max_shards: 200
               capacity: 2500
   ```

1. Busque los nombres del gráfico y el espacio de nombres de Prometheus, así como la versión del gráfico, con el siguiente comando de Helm.

   ```
   helm ls --all-namespaces
   ```

   Según los pasos realizados hasta ahora, tanto el gráfico como el espacio de nombres de Prometheus deben llamarse `prometheus` y la versión del gráfico puede ser `15.2.0`.

1. Ejecute el siguiente comando, utilizando las *PrometheusChartName* teclas*PrometheusNamespace*, y *PrometheusChartVersion* que se encuentran en el paso anterior.

   ```
   helm upgrade PrometheusChartName prometheus-community/prometheus -n PrometheusNamespace -f prometheus-config.yaml --version PrometheusChartVersion
   ```

   Al cabo de unos minutos, aparecerá un mensaje para informar de que la actualización se ha realizado correctamente.

1. Si lo desea, compruebe que las métricas se envíen correctamente consultando el punto de conexión de Amazon Managed Service para Prometheus a través de `awscurl`. *Region*Sustitúyala por la Región de AWS que estás utilizando y *workspaceURL/* por la URL que encontraste en el paso 1.

   ```
   awscurl --service="aps" --region="Region" "workspaceURL/api/v1/query?query=node_cpu_seconds_total"
   ```

Ahora ha creado un espacio de trabajo de Amazon Managed Service para Prometheus y se ha conectado al mismo desde el clúster de Amazon EKS con archivos YAML como configuración. Estos archivos, denominados definiciones de recursos personalizadas (CRDs), se encuentran dentro de su clúster de Amazon EKS. Puede utilizar el controlador AWS Controllers for Kubernetes para gestionar todos los recursos de Amazon Managed Service for Prometheus directamente desde el clúster.