View a markdown version of this page

Configuración avanzada para Información de contenedores de OTel en Amazon EKS - Amazon CloudWatch

Configuración avanzada para Información de contenedores de OTel en Amazon EKS

En este tema se describen los escenarios de configuración avanzada de Información de contenedores de OTel en Amazon EKS. Utilice estas configuraciones para personalizar la recopilación de métricas, filtrar registros, recopilar datos de telemetría en todas las cuentas, agregar dimensiones personalizadas y ajustar la asignación de recursos para clústeres de gran tamaño.

Requisitos previos

Antes de configurar los ajustes avanzados, compruebe que cumple con los siguientes requisitos.

  • Información de contenedores de OTel instalado y en el estado ACTIVE en el clúster de Amazon EKS

  • Clúster de Amazon EKS que ejecute la versión 1.28 de Kubernetes o una posterior

  • AWS CLI versión 2.15.0 o posterior

  • kubectl configurado para comunicarse con el clúster de destino

  • Permisos de IAM: eks:UpdateAddon, eks:DescribeAddon y iam:AttachRolePolicy (necesarios para la configuración entre cuentas)

Patrón de configuración general

Todas las configuraciones avanzadas siguen el mismo patrón. Para pasar una configuración de JSON al complemento amazon-cloudwatch-observability, utilice el comando aws eks update-addon.

aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values 'JSON-configuration' \ --resolve-conflicts OVERWRITE
importante

La marca --resolve-conflicts OVERWRITE reemplaza la configuración de cualquier complemento existente. Para conservar la configuración existente, combínela con la nueva configuración antes de ejecutar el comando.

Filtrado de registros

Puede reducir los costos de Registros de CloudWatch excluyendo los registros que coincidan con criterios específicos. Utilice el filtrado de registros para eliminar los registros detallados o de nivel de depuración antes de que el agente los envíe a CloudWatch.

Configuración del filtrado de registros
  1. Ejecute el siguiente comando para actualizar el complemento con una configuración de filtro de registro. Reemplace cluster-name por el nombre del clúster de Amazon EKS.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "config": { "logs": { "metrics_collected": { "kubernetes": { "enhanced_container_insights": true } }, "exclude_filters": [ { "type": "log_level_filter", "log_level": "DEBUG" } ] } } } }' \ --resolve-conflicts OVERWRITE
  2. Compruebe que el estado del complemento sea ACTIVE después de la actualización.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text

La configuración exclude_filters elimina las entradas de registro que coinciden con el nivel de registro especificado antes de que el agente las envíe a Registros de CloudWatch. Esto reduce el volumen de ingesta de registros y los costos asociados.

Recopilación de varias cuentas

Puede enviar la telemetría desde las cuentas de carga de trabajo a una cuenta de supervisión central configurando la asunción de roles de IAM entre cuentas. Este enfoque le ofrece una vista única de las métricas y los registros de varios clústeres de Amazon EKS en diferentes cuentas de AWS.

Configuración de la recopilación de varias cuentas

Creación del rol entre cuentas en la cuenta de supervisión
  1. En la cuenta de supervisión central, cree un rol de IAM con una política de confianza que permita que la cuenta de carga de trabajo lo asuma. Sustituya workload-account-id por el ID de cuenta de AWS de la cuenta de carga de trabajo.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::workload-account-id:root" }, "Action": "sts:AssumeRole" } ] }
  2. Adjunte la política administrada CloudWatchAgentServerPolicy al rol entre cuentas.

Configuración del complemento para la entrega entre cuentas
  1. En la cuenta de carga de trabajo, actualice el complemento para que asuma el rol entre cuentas. Sustituya cluster-name por el nombre del clúster de Amazon EKS y monitoring-account-id por el ID de la cuenta de AWS encargada de la supervisión central.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "config": { "credentials": { "role_arn": "arn:aws:iam::monitoring-account-id:role/CrossAccountCWObservabilityRole" } } } }' \ --resolve-conflicts OVERWRITE
  2. Compruebe que el estado del complemento sea ACTIVE después de la actualización.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text

Dimensiones de métricas personalizadas

Puede agregar dimensiones personalizadas derivadas de las etiquetas de Kubernetes a sus métricas de Información de contenedores. Las dimensiones personalizadas le permiten filtrar y agrupar las métricas con mayor precisión; por ejemplo, por equipo, entorno o aplicación.

Adición de dimensiones personalizadas a partir de las etiquetas de Kubernetes
  1. Ejecute el siguiente comando para configurar las dimensiones personalizadas. Sustituya cluster-name por el nombre del clúster de Amazon EKS y label-key por la etiqueta de Kubernetes para utilizarla como dimensión.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "config": { "logs": { "metrics_collected": { "kubernetes": { "enhanced_container_insights": true, "metric_dimensions": { "custom_dimensions": ["label-key"] } } } } } } }' \ --resolve-conflicts OVERWRITE
  2. Compruebe que el estado del complemento sea ACTIVE después de la actualización.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text

Una vez que la configuración surta efecto, las etiquetas de Kubernetes especificadas aparecen como dimensiones en las métricas de Información de contenedores en CloudWatch.

Ajuste de recursos para clústeres de gran tamaño

En el caso de los clústeres de gran tamaño, es posible que tenga que aumentar los límites de CPU y memoria del DaemonSet del agente de CloudWatch. La asignación de recursos predeterminada funciona bien para los clústeres pequeños, pero los clústeres más grandes generan más datos de telemetría y requieren recursos de agente adicionales.

En la siguiente tabla se proporcionan pautas de tamaño basadas en el tamaño del clúster.

Tamaño del clúster Solicitud de CPU Límite de CPU Solicitud de memoria Límite de memoria
Pequeño (20 nodos o menos) 100 m 200m 128 Mi 256Mi
Medio (de 21 a 100 nodos) 200m 400 m 256Mi 512 Mi
Grande (más de 100 nodos) 300 m 500 m 384 Mi 768 Mi
Extragrande (más de 500 nodos) 500 m 1000m 512 Mi 1 Gi
Configuración de los límites de recursos del DaemonSet del agente
  1. Ejecute el siguiente comando para establecer las solicitudes y los límites de recursos. Sustituya cluster-name por el nombre del clúster de Amazon EKS y los valores de los recursos por los valores de la tabla anterior.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "resources": { "requests": { "cpu": "cpu-request", "memory": "memory-request" }, "limits": { "cpu": "cpu-limit", "memory": "memory-limit" } } } }' \ --resolve-conflicts OVERWRITE
  2. Compruebe que el estado del complemento sea ACTIVE y que los pods de agente se reinicien con la nueva asignación de recursos.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text
  3. Confirme que los pods de agente se ejecutan con los nuevos límites de recursos.

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent -o jsonpath='{.items[0].spec.containers[0].resources}'

Verificación de los cambios de configuración

Tras aplicar cualquier configuración avanzada, compruebe que el complemento esté en buen estado y que los pods de agentes se hayan reiniciado correctamente.

Verificación de los cambios de configuración
  1. Compruebe que el estado del complemento sea ACTIVE. Reemplace cluster-name por el nombre del clúster de Amazon EKS.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.{Status:status,ConfigValues:configurationValues}" \ --output table
  2. Compruebe que los pods de agentes se hayan reiniciado y estén en estado Running.

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent

    Todos los pods de agentes deben mostrar el estado Running con una hora de reinicio reciente.

Solución de problemas

Utilice la siguiente guía para resolver problemas comunes con las configuraciones avanzadas.

La actualización del complemento falla con el error ConfigurationConflict

Síntoma: el comando aws eks update-addon devuelve un error ConfigurationConflict.

Causa: la configuración de JSON que ha proporcionado tiene un formato incorrecto o contiene claves no válidas.

Solución: siga estos pasos para resolver este problema.

  1. Valide la configuración de JSON mediante un validador de JSON o ejecutando el siguiente comando.

    echo 'your-json-configuration' | python3 -m json.tool
  2. Compruebe que todas las claves de configuración sean válidas para el complemento amazon-cloudwatch-observability.

  3. Vuelva a intentar la actualización con el JSON corregido.

Las métricas entre cuentas no aparecen en la cuenta de supervisión

Síntoma: después de configurar la recopilación de varias cuentas, las métricas no aparecen en la cuenta de supervisión central.

Causa: la política de confianza de los roles de IAM entre cuentas o los permisos son incorrectos.

Solución: siga estos pasos para resolver este problema.

  1. Verifique que la política de confianza de la cuenta de supervisión permita que la cuenta de carga de trabajo asuma el rol.

  2. Verifique que el rol entre cuentas tenga la política administrada CloudWatchAgentServerPolicy adjunta.

  3. Compruebe los registros del agente para ver si hay errores AssumeRole.

    kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --tail=100 | grep -i "AssumeRole\|AccessDenied"
  4. Compruebe que el rol de IAM del agente en la cuenta de carga de trabajo tenga el permiso sts:AssumeRole para el ARN del rol entre cuentas.