View a markdown version of this page

Envío de registros a Amazon CloudWatch - Amazon CloudWatch

Envío de registros a Amazon CloudWatch

Información de contenedores de OTel recopila y envía registros de contenedores a Registros de Amazon CloudWatch mediante la canalización de registros del recopilador de OpenTelemetry. El complemento de observabilidad de EKS de Amazon CloudWatch implementa un recopilador de OpenTelemetry como un DaemonSet que utiliza el receptor de registros de archivos para guardar los archivos de registro de los contenedores, enriquecerlos con metadatos de Kubernetes y exportarlos a Registros de CloudWatch a través del exportador de Registros de CloudWatch.

No se requiere ninguna configuración adicional para la recopilación de registros básica. La recopilación de registros está habilitada de forma predeterminada cuando se sigue Inicio rápido: Información de contenedores de OTel en Amazon EKS.

Requisitos previos

Antes de configurar la recopilación de registros, compruebe que cumple con los siguientes requisitos.

  • Información de contenedores de OTel instalado y el complemento amazon-cloudwatch-observability activo en el clúster

  • Permisos de IAM: logs:CreateLogGroup, logs:CreateLogStream, logs:PutLogEvents, logs:DescribeLogGroups y logs:DescribeLogStreams (incluidos en la política administrada CloudWatchAgentServerPolicy)

  • Acceso a los nodos: el recopilador necesita acceso a /var/log/pods en cada nodo

Grupos de registro y orígenes

En la siguiente tabla se describe el grupo de registro que crea Información de contenedores de OTel y el origen desde el que se recopila.

Grupo de registro Origen Contenido
/aws/containerinsights/cluster-name/application /var/log/pods/**/*.log Todos los registros stdout y stderr del contenedor
nota

Los registros del host y del plano de datos estarán disponibles en un futuro lanzamiento.

Cómo funciona la canalización de registros de OTel

El recopilador de OpenTelemetry del complemento ejecuta una canalización de registros con los siguientes componentes.

  • Receptores: el receptor filelog extrae los archivos de registro del contenedor de /var/log/pods/.

  • Procesadores: el procesador k8sattributes enriquece los registros con metadatos de Kubernetes. El procesador batch agrupa los registros antes de exportarlos. El procesador resource agrega los atributos de los recursos.

  • Exportadores: el exportador awscloudwatchlogs envía los registros a Registros de CloudWatch.

Enriquecimiento de registros

La canalización enriquece cada registro con los siguientes atributos.

  • Atributos de recursos de Kubernetes: k8s.pod.name, k8s.namespace.name, k8s.container.name, k8s.node.name y k8s.deployment.name

  • Etiquetas de pods: todas las etiquetas de pods como atributos k8s.pod.label.*

  • Atributos en la nube: cloud.region, cloud.account.id y cloud.platform

  • Atributos del clúster: k8s.cluster.name

Personalización de la recopilación de registros

Puede personalizar la recopilación de registros actualizando los valores de configuración del complemento. En las siguientes secciones se describen las opciones de personalización habituales.

Desactivación de la recopilación de registros

Para desactivar por completo la recopilación de registros, actualice la configuración del complemento con los registros del contenedor desactivados.

Desactivación de la recopilación de registros
  • Ejecute el siguiente comando. 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 '{"containerLogs":{"enabled":false}}' \ --resolve-conflicts OVERWRITE

Configuración de la retención de registros

De forma predeterminada, Registros de CloudWatch retiene los datos de registro de forma indefinida. Para controlar los costos de almacenamiento, puede establecer una política de retención en el grupo de registro.

Configuración de la retención de registros
  • Ejecute el siguiente comando. Reemplace cluster-name por el nombre del clúster de Amazon EKS. Sustituya 30 por el número de días durante el cual se deben conservar los registros.

    aws logs put-retention-policy \ --log-group-name "/aws/containerinsights/cluster-name/application" \ --retention-in-days 30

Verificación

Para comprobar que la recopilación de registros funciona, compruebe que los grupos de registro esperados existan y contengan datos.

Verificación de la recopilación de registros
  • Ejecute el siguiente comando. Reemplace cluster-name por el nombre del clúster de Amazon EKS.

    aws logs describe-log-groups \ --log-group-name-prefix "/aws/containerinsights/cluster-name" \ --query "logGroups[].{Name:logGroupName,StoredBytes:storedBytes}" \ --output table

    El resultado muestra los nombres de los grupos de registro y el número de bytes almacenados. Un valor distinto de cero para StoredBytes confirma que la canalización está entregando registros.

Solución de problemas

Utilice la siguiente guía para resolver los problemas habituales relacionados con la recopilación de registros.

Los grupos de registro no se crean después de 5 minutos

Síntoma: el grupo de registro /aws/containerinsights/cluster-name/application no aparece en Registros de CloudWatch después de 5 minutos.

Causa: el recopilador no tiene los permisos de IAM necesarios para crear grupos de registro y flujos de registro.

Solución: compruebe que el rol de IAM asociado al recopilador tenga adjunta la política administrada CloudWatchAgentServerPolicy. Esta política incluye los permisos logs:CreateLogGroup y logs:CreateLogStream.

El grupo de registro de la aplicación existe, pero está vacío

Síntoma: el grupo de registro de la aplicación existe en Registros de CloudWatch, pero no contiene flujos de registro ni eventos de registro.

Causa: este problema se produce cuando los contenedores no escriben en stdout o stderr, o cuando el receptor del registro de archivos no puede acceder a /var/log/pods/ en el nodo.

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

  1. Compruebe que los contenedores de la aplicación escriban registros en stdout o stderr.

  2. Compruebe que el pod del DaemonSet del recopilador tenga un montaje de volumen para /var/log/pods.

    kubectl get daemonset -n amazon-cloudwatch -o yaml | grep -A 5 "var/log/pods"
  3. Compruebe los registros del recopilador para ver si hay errores de acceso a los archivos.

    kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --tail=50 | grep -i "error\|permission"

Costos elevados de Registros de CloudWatch

Síntoma: los costos de ingesta o almacenamiento de Registros de CloudWatch son más altos de lo esperado.

Causa: los espacios de nombres de gran volumen (como los espacios de nombres de supervisión o pruebas de carga) generan grandes volúmenes de registros.

Solución: establezca una política de retención en el grupo de registro para eliminar automáticamente los registros antiguos. Para obtener instrucciones, consulte Configuración de la retención de registros.