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

Exclusión de espacios de nombres de la recopilación de registros

Para excluir espacios de nombres específicos de la recopilación de registros, utilice la opción de configuración excludeNamespaces.

Exclusión de espacios de nombres de la recopilación de registros
  • Ejecute el siguiente comando. Reemplace cluster-name por el nombre del clúster de Amazon EKS. Sustituya los valores de los espacios de nombres por los espacios de nombres que desee excluir.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":true,"excludeNamespaces":["kube-system","load-testing","monitoring"]}}' \ --resolve-conflicts OVERWRITE

Inclusión únicamente de espacios de nombres específicos

Para recopilar registros únicamente de espacios de nombres específicos, use la opción de configuración includeNamespaces.

Inclusión únicamente de espacios de nombres específicos
  • Ejecute el siguiente comando. Reemplace cluster-name por el nombre del clúster de Amazon EKS. Sustituya los valores de los espacios de nombres por los espacios de nombres que desee incluir.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":true,"includeNamespaces":["production","staging"]}}' \ --resolve-conflicts OVERWRITE

Configuración del análisis de registros de varias líneas

Para combinar entradas de registro de varias líneas (como los seguimientos de pila) en un único registro, configure el análisis de varias líneas con un patrón de primera línea.

Configuración del análisis de registros de varias líneas
  • Ejecute el siguiente comando. Reemplace cluster-name por el nombre del clúster de Amazon EKS. Sustituya el valor de firstLinePattern por un patrón de expresiones regulares que coincida con la primera línea de cada entrada de registro.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{"containerLogs":{"enabled":true,"multilineConfig":{"firstLinePattern":"^\\d{4}-\\d{2}-\\d{2}|^\\[\\d{4}","parseFormat":"auto"}}}' \ --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: siga estos pasos para reducir los costos.

  1. Excluya los espacios de nombres de alto volumen de la recopilación de registros. Para obtener instrucciones, consulte Exclusión de espacios de nombres de la recopilación de registros.

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