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-observabilityactivo en el clúster -
Permisos de IAM:
logs:CreateLogGroup,logs:CreateLogStream,logs:PutLogEvents,logs:DescribeLogGroupsylogs:DescribeLogStreams(incluidos en la política administradaCloudWatchAgentServerPolicy) -
Acceso a los nodos: el recopilador necesita acceso a
/var/log/podsen 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/ |
/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
filelogextrae los archivos de registro del contenedor de/var/log/pods/. -
Procesadores: el procesador
k8sattributesenriquece los registros con metadatos de Kubernetes. El procesadorbatchagrupa los registros antes de exportarlos. El procesadorresourceagrega los atributos de los recursos. -
Exportadores: el exportador
awscloudwatchlogsenví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.nameyk8s.deployment.name -
Etiquetas de pods: todas las etiquetas de pods como atributos
k8s.pod.label.* -
Atributos en la nube:
cloud.region,cloud.account.idycloud.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-namepor el nombre del clúster de Amazon EKS.aws eks update-addon \ --cluster-namecluster-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-namepor 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-namecluster-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-namepor 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-namecluster-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-namepor el nombre del clúster de Amazon EKS. Sustituya el valor defirstLinePatternpor un patrón de expresiones regulares que coincida con la primera línea de cada entrada de registro.aws eks update-addon \ --cluster-namecluster-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-namepor el nombre del clúster de Amazon EKS. Sustituya30por 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-days30
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-namepor 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 tableEl resultado muestra los nombres de los grupos de registro y el número de bytes almacenados. Un valor distinto de cero para
StoredBytesconfirma 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/ no aparece en Registros de CloudWatch después de 5 minutos.cluster-name/application
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.
-
Compruebe que los contenedores de la aplicación escriban registros en stdout o stderr.
-
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" -
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.
-
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.
-
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.