

# Envío de registros a Amazon CloudWatch
<a name="container-insights-eks-otel-logs"></a>

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](container-insights-eks-otel-quickstart.md).

## Requisitos previos
<a name="container-insights-eks-otel-logs-prereqs"></a>

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
<a name="container-insights-eks-otel-logs-groups"></a>

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
<a name="container-insights-eks-otel-logs-pipeline"></a>

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
<a name="container-insights-eks-otel-logs-enrichment"></a>

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
<a name="container-insights-eks-otel-logs-customize"></a>

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
<a name="container-insights-eks-otel-logs-disable"></a>

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
<a name="container-insights-eks-otel-logs-retention"></a>

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
<a name="container-insights-eks-otel-logs-verify"></a>

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
<a name="container-insights-eks-otel-logs-troubleshoot"></a>

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
<a name="container-insights-eks-otel-logs-ts-no-loggroup"></a>

**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
<a name="container-insights-eks-otel-logs-ts-empty"></a>

**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.

1. 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"
   ```

1. 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
<a name="container-insights-eks-otel-logs-ts-costs"></a>

**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](#container-insights-eks-otel-logs-retention).