Gestione Amazon Managed Service para Prometheus AWS con controladores para Kubernetes - Servicio administrado por Amazon para Prometheus

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

Amazon Managed Service para Prometheus está integrado con los controladores de AWS para Kubernetes (ACK) y permite administrar los recursos del espacio de trabajo, el administrador de alertas y las reglas en Amazon EKS. Puede utilizar las definiciones de recursos (CRD) personalizadas 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 y sobre el controlador ACK para Amazon Managed Service for Prometheus.

Requisitos previos

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.

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

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 for Kubernetes. GitHub Utilice la región correcta para el 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 | grep '"tag_name":' | cut -d'"' -f4` 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 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.

  2. 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
  3. 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.

    kubectl describe workspace my-amp-workspace -n $ACK_SYSTEM_NAMESPACE
    nota

    También puede utilizar un espacio de trabajo existente en lugar de crear uno nuevo.

  4. 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. Reemplace WORKSPACE-ID por el ID de 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. Reemplace WORKSPACE-ID por el ID de espacio de trabajo del paso anterior. Sustituya TOPIC-ARN por el ARN del tema de Amazon SNS al que se van a enviar las notificaciones y REGION por el que está utilizando. Región de AWS Recuerde que Amazon Managed Service para Prometheus debe tener permisos 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 y. RuleGroupsNamespaceDataAlertManagerDefinitionData

  5. 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. ResourceTypeSustitúyalo por el tipo de recurso que desee eliminar WorkspaceAlertManagerDefinition, oRuleGroupNamespace. ResourceNameSustitú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

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 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. Reemplace WORKSPACE-ID 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.

  2. Cree un nuevo archivo con el siguiente texto y llámelo prometheus-config.yaml. Reemplace account por el ID de la cuenta, workspaceURL/ por la URL que acaba de encontrar y region por la Región de AWS 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
  3. 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.

  4. Ejecute el siguiente comando, utilizando las PrometheusChartNameteclas PrometheusNamespace, y PrometheusChartVersionque 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.

  5. 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. Sustituya Region por la Región de AWS que está utilizando y WorkspaceURL/ por la URL que encontró 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 personalizados (CRD), se encuentran dentro del 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.