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
-
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
-
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.
-
-
(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ónagent
: 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ón
statsd
a lasmetrics
, 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ámetrokube_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" } } } }
-
-
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:
-
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
-
Borre el comentario de la sección
port
en el archivocwagent-daemonset.yaml
como se indica a continuación:ports: - containerPort: 8125 hostPort: 8125 protocol: UDP
-
Implemente el agente de CloudWatch en el clúster con el siguiente comando.
kubectl apply -f cwagent-daemonset.yaml
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
-
-
-
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/
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.Cluster_Name
/performance
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