Configuración del agente de CloudWatch para recopilar las métricas del clúster - Amazon CloudWatch

Configuración del agente de CloudWatch para recopilar las métricas del clúster

importante

Si instala Información de contenedores en un clúster de Amazon EKS, recomendamos que utilice el complemento observabilidad de EKS de Amazon CloudWatch, en lugar de seguir las instrucciones de esta sección. Para obtener más información e instrucciones, consulte Inicio rápido con el complemento de observabilidad de EKS de Amazon CloudWatch.

Para configurar Información de contenedores para recopilar métricas de, puede seguir los pasos de Configuración de inicio rápido para Información de contenedores en Amazon EKS y Kubernetes o los de esta sección. En los pasos que se describen a continuación, configure el agente de CloudWatch para que pueda recopilar las métricas de los clústeres.

Si instala Información de contenedores en un clúster de Amazon EKS y sigue las instrucciones de esta sección a partir del 6 de noviembre de 2023, se instalará con observabilidad mejorada para Amazon EKS en el clúster.

Paso 1: Cree un espacio de nombres para CloudWatch

Siga el paso que se describe a continuación para crear un espacio de nombres denominado amazon-cloudwatch para CloudWatch. Puede omitir este paso si ya ha creado este espacio de nombres.

Para crear un espacio de nombres para CloudWatch
  • Escriba el siguiente comando.

    kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml

Paso 2: Cree una cuenta de servicio en el clúster

Utilice uno de los siguientes métodos para crear una cuenta de servicio para el agente de CloudWatch, si todavía no dispone de una.

  • Uso de kubectl

  • Utilizar un archivo kubeconfig

Uso de kubectl para la autenticación

Para utilizar kubectl con el fin de crear una cuenta de servicio para el agente de CloudWatch
  • Escriba el siguiente comando.

    kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-serviceaccount.yaml

Si no ha seguido los pasos anteriores, pero ya tiene una cuenta de servicio que desea utilizar para el agente de CloudWatch, debe asegurarse de que sigue las siguientes reglas. Además, en el resto de los pasos de la instalación de Información de contenedores debe utilizar el nombre de esa cuenta de servicio en lugar de cloudwatch-agent.

rules: - apiGroups: [""] resources: ["pods", "nodes", "endpoints"] verbs: ["list", "watch"] - apiGroups: [ "" ] resources: [ "services" ] verbs: [ "list", "watch" ] - apiGroups: ["apps"] resources: ["replicasets", "daemonsets", "deployments", "statefulsets"] verbs: ["list", "watch"] - apiGroups: ["batch"] resources: ["jobs"] verbs: ["list", "watch"] - apiGroups: [""] resources: ["nodes/proxy"] verbs: ["get"] - apiGroups: [""] resources: ["nodes/stats", "configmaps", "events"] verbs: ["create", "get"] - apiGroups: [""] resources: ["configmaps"] resourceNames: ["cwagent-clusterleader"] verbs: ["get","update"] - nonResourceURLs: ["/metrics"] verbs: ["get", "list", "watch"]

Uso de kubeconfig para la autenticación

También puede utilizar un archivo kubeconfig para la autenticación. Este método evita la necesidad de una cuenta de servicio al especificar directamente la ruta de kubeconfig en la configuración del agente de CloudWatch. Además, permite dejar de depender de la API del plano de control de Kubernetes para la autenticación, lo que agiliza la configuración y puede aumentar la seguridad, ya que la autenticación se administra a través del archivo kubeconfig.

Para usar este método, actualice el archivo de configuración de su agente de CloudWatch para especificar la ruta del archivo kubeconfig, como en el siguiente ejemplo.

{ "logs": { "metrics_collected": { "kubernetes": { "cluster_name": "YOUR_CLUSTER_NAME", "enhanced_container_insights": false, "accelerated_compute_metrics": false, "tag_service": false, "kube_config_path": "/path/to/your/kubeconfig" "host_ip": "HOSTIP" } } } }

Para crear un archivo kubeconfig, cree una solicitud de firma de certificado (CSR) para el usuario admin/{create_your_own_user} con el rol system:masters de Kubernetes. Luego, firme con la autoridad de certificación (CA) del clúster de Kubernetes y cree el archivo kubeconfig.

Paso 3: Cree un ConfigMap para el agente de CloudWatch

Siga los pasos que se describen a continuación para crear un ConfigMap para el agente de CloudWatch.

Para crear un ConfigMap para el agente de CloudWatch
  1. Descargue el archivo YAML de ConfigMap en el host de cliente de kubectl ejecutando el siguiente comando:

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-configmap-enhanced.yaml
  2. Edite el archivo YAML que ha descargado, tal y como se indica a continuación:

    • cluster_name: en la sección kubernetes, reemplace {{cluster_name}} con el nombre del clúster. Elimine los caracteres {{}}. De forma alternativa, si utiliza un clúster de Amazon EKS, puede eliminar el campo "cluster_name" y el valor. Si lo hace, el agente de CloudWatch detecta el nombre del clúster a partir de las etiquetas de Amazon EC2.

  3. (Opcional) Realice más cambios en ConfigMap en función de sus requisitos de supervisión, tal y como se indica a continuación:

    • metrics_collection_interval: en la sección kubernetes, puede especificar la frecuencia con la que el agente recopila las métricas. El valor predeterminado es de 60 segundos. El valor predeterminado del intervalo de recopilación de cadvisor en kubelet es de 15 segundos, por lo que no debe establecer este valor en menos de 15 segundos.

    • endpoint_override: en la sección logs, puede especificar el punto de enlace de CloudWatch Logs si desea anular el punto de enlace predeterminado. Es posible que desee hacerlo si realiza la publicación desde un clúster de una VPC y desea que los datos vayan a un punto de enlace de la VPC.

    • force_flush_interval: en la sección logs, puede especificar el intervalo para los eventos de registro por lotes antes de que se publiquen en CloudWatch Logs. El valor predeterminado es de 5 segundos.

    • Región: de forma predeterminada, el agente publica las métricas en la Región donde se encuentra el nodo de trabajo. Para cambiar este comportamiento, puede agregar un campo region en la sección agent: por ejemplo "region":"us-west-2"

    • Sección statsd: si desea que el agente CloudWatch Logs se ejecute también como agente de escucha StatsD en cada nodo de trabajo de su clúster, puede agregar una la secciónstatsd a las metrics, como en el ejemplo siguiente. Para obtener información sobre otras opciones de StatsD para esta sección, consulte Recuperación de las métricas personalizadas con StatsD.

      "metrics": { "metrics_collected": { "statsd": { "service_address":":8125" } } }

      A continuación, se muestra un ejemplo completo de la sección JSON. Si utiliza un archivo kubeconfig para la autenticación, agregue el parámetro kube_config_path para especificar la ruta del archivo kubeconfig.

      { "agent": { "region": "us-east-1" }, "logs": { "metrics_collected": { "kubernetes": { "cluster_name": "MyCluster", "metrics_collection_interval": 60, "kube_config_path": "/path/to/your/kubeconfig" //if using kubeconfig for authentication } }, "force_flush_interval": 5, "endpoint_override": "logs.us-east-1.amazonaws.com" }, "metrics": { "metrics_collected": { "statsd": { "service_address": ":8125" } } } }
  4. Cree el ConfigMap en el clúster ejecutando el siguiente comando.

    kubectl apply -f cwagent-configmap.yaml

Paso 4: Implemente el agente de CloudWatch como un DaemonSet

Para terminar la instalación del agente de CloudWatch y comenzar a recopilar las métricas de contenedor, siga los pasos que se describen a continuación.

Para implementar el agente de CloudWatch como un DaemonSet
    • Si no desea utilizar StatsD en el clúster, escriba el siguiente comando.

      kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
    • Si desea utilizar StatsD, siga estos pasos:

      1. Descargue el archivo YAML del DaemonSet en el host de cliente de kubectl ejecutando el siguiente comando.

        curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
      2. Borre el comentario de la sección port en el archivo cwagent-daemonset.yaml como se indica a continuación:

        ports: - containerPort: 8125 hostPort: 8125 protocol: UDP
      3. Implemente el agente de CloudWatch en el clúster con el siguiente comando.

        kubectl apply -f cwagent-daemonset.yaml
      4. Implemente el agente de CloudWatch en los nodos de Windows de su clúster ejecutando el siguiente comando. El oyente StatsD no es compatible con el agente de CloudWatch en Windows.

        kubectl apply -f cwagent-daemonset-windows.yaml
  1. Compruebe que el agente está implementado ejecutando el siguiente comando.

    kubectl get pods -n amazon-cloudwatch

Cuando finaliza, el agente de CloudWatch crea un grupo de registros denominado /aws/containerinsights/Cluster_Name/performance y envía los eventos de registro de rendimiento a este grupo de registros. Si también configura el agente como un agente de escucha de StatsD, el agente también escucha las métricas de StatsD en el puerto 8125 con la dirección IP del nodo en el que está programado el pod de la aplicación.

Solución de problemas

Si el agente no se implementa correctamente, pruebe lo siguiente:

  • Ejecute el siguiente comando para obtener la lista de pods.

    kubectl get pods -n amazon-cloudwatch
  • Ejecute el siguiente comando y compruebe los eventos de la parte inferior de la salida.

    kubectl describe pod pod-name -n amazon-cloudwatch
  • Ejecute el siguiente comando para comprobar los registros.

    kubectl logs pod-name -n amazon-cloudwatch