

# Envíe los registros a CloudWatch Logs
<a name="Container-Insights-EKS-logs"></a>

Para enviar registros de los contenedores a Registros de Amazon CloudWatch, puede utilizar Fluent Bit. Para obtener más información, consulte [Fluent Bit](https://fluentbit.io/).

**nota**  
A partir del 10 de febrero de 2025, AWS ha dejado de admitir FluentD como reenviador de registros a Registros de CloudWatch. Recomendamos que utilice Fluent Bit, que es una alternativa ligera y eficiente en el uso de recursos. Las implantaciones existentes de FluentD seguirán en funcionamiento. Migre las canalizaciones de registro a Fluent Bit para garantizar la compatibilidad continuada y un rendimiento óptimo.   
Información de contenedores anteriormente también admitía el uso de FluentD para enviar registros desde los contenedores. FluentD ha quedado obsoleto y ya no es compatible con Información de contenedores. En su lugar, utilice Fluent Bit.

**Topics**
+ [Configure Fluent Bit como DaemonSet para enviar registros a CloudWatch Logs](Container-Insights-setup-logs-FluentBit.md)
+ [(Opcional) Configure el registro del plano de control de Amazon EKS](Container-Insights-setup-control-plane-logging.md)
+ [(Opcional) Habilitar la característica Use\$1Kubelet para clústeres grandes](ContainerInsights-use-kubelet.md)

# Configure Fluent Bit como DaemonSet para enviar registros a CloudWatch Logs
<a name="Container-Insights-setup-logs-FluentBit"></a>

Las siguientes secciones le ayudan a implementar Fluent Bit para enviar registros desde contenedores a CloudWatch Logs.

**Topics**
+ [Configuración de Fluent Bit](#Container-Insights-FluentBit-setup)
+ [Compatibilidad con registros de varias líneas](#ContainerInsights-fluentbit-multiline)
+ [(Opcional) Reducción del volumen de registros del Fluent Bit](#ContainerInsights-fluentbit-volume)
+ [Solución de problemas](#Container-Insights-FluentBit-troubleshoot)
+ [Panel de control](#Container-Insights-FluentBit-dashboard)

## Configuración de Fluent Bit
<a name="Container-Insights-FluentBit-setup"></a>

Para configurar Fluent Bit para recopilar registros de los contenedores, puede seguir los pasos de [Configuración de inicio rápido para Información de contenedores en Amazon EKS y Kubernetes](Container-Insights-setup-EKS-quickstart.md) o puede seguir los pasos de esta sección.

Con cualquiera de los métodos, el rol de IAM que está adjunto a los nodos del clúster debe tener permisos suficientes. Para obtener más información sobre los permisos necesarios para ejecutar un clúster de Amazon EKS, consulte [Amazon EKS IAM Policies, Roles, and Permissions](https://docs.aws.amazon.com/eks/latest/userguide/IAM_policies.html) (Permisos, roles y políticas de IAM de Amazon EKS) en la *Guía del usuario de Amazon EKS*.

En los pasos que se describen a continuación, va a configurar Fluent Bit como DaemonSet para enviar registros a CloudWatch Logs. Cuando se completa este paso, Fluent Bit crea los siguientes grupos de registros si todavía no existen.

**importante**  
Si ya tiene Fluentd configurado en Información de contenedores y el DaemonSet de Fluentd no funciona según lo esperado (esto puede ocurrir si utiliza el tiempo de ejecución `containerd`), debe desinstalarlo antes de instalar FluentBit para evitar que Fluentd procese los mensajes de registro de errores de Fluentd. De lo contrario, debe desinstalar Fluentd inmediatamente después de haber instalado FluentBit correctamente. Desinstalar Fluentd después de instalar Fluent Bit garantiza la continuidad del registro durante este proceso de migración. Solo se necesita uno de Fluent Bit o Fluentd para enviar registros a registros de CloudWatch.


| Nombre de grupo de registro | Fuente de registros | 
| --- | --- | 
|  `/aws/containerinsights/Cluster_Name/application`  |  Todos los archivos de registros de `/var/log/containers`  | 
|  `/aws/containerinsights/Cluster_Name/host`  |  Archivos de registros de `/var/log/dmesg`, `/var/log/secure` y `/var/log/messages`  | 
|  `/aws/containerinsights/Cluster_Name/dataplane`  |  Los registros en `/var/log/journal` para `kubelet.service`, `kubeproxy.service` y `docker.service`.  | 

**Para instalar Fluent Bit con el fin de enviar registros desde contenedores a CloudWatch Logs**

1. Si aún no tiene un espacio de nombres llamado `amazon-cloudwatch`, cree uno con el siguiente comando:

   ```
   kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml
   ```

1. Ejecute el siguiente comando para crear un ConfigMap denominado `cluster-info` con el nombre del clúster y la Región a la que se enviarán los registros. Sustituya *cluster-name* y *cluster-region* por el nombre y la Región del clúster.

   ```
   ClusterName=cluster-name
   RegionName=cluster-region
   FluentBitHttpPort='2020'
   FluentBitReadFromHead='Off'
   [[ ${FluentBitReadFromHead} = 'On' ]] && FluentBitReadFromTail='Off'|| FluentBitReadFromTail='On'
   [[ -z ${FluentBitHttpPort} ]] && FluentBitHttpServer='Off' || FluentBitHttpServer='On'
   kubectl create configmap fluent-bit-cluster-info \
   --from-literal=cluster.name=${ClusterName} \
   --from-literal=http.server=${FluentBitHttpServer} \
   --from-literal=http.port=${FluentBitHttpPort} \
   --from-literal=read.head=${FluentBitReadFromHead} \
   --from-literal=read.tail=${FluentBitReadFromTail} \
   --from-literal=logs.region=${RegionName} -n amazon-cloudwatch
   ```

   En este comando, `FluentBitHttpServer` para supervisar las métricas del complemento está activado de forma predeterminada. Para desactivarlo, cambie la tercera línea del comando a `FluentBitHttpPort=''` (cadena vacía) en el comando.

   Además, de forma predeterminada, Fluent Bit lee los archivos de registro en cola y capturará solo los registros nuevos después de implementarlos. Si desea lo contrario, establezca `FluentBitReadFromHead='On'` y recopilará todos los registros en el sistema de archivos.

1. Descargue e implemente el daemonSet de Fluent Bit en el clúster con uno de los siguientes comandos.
   + Si desea la configuración optimizada de Fluent Bit para computadoras con Linux, ejecute este comando.

     ```
     kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit.yaml
     ```
   + Si desea la configuración optimizada de Fluent Bit para computadoras con Windows, ejecute este comando.

     ```
     kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit-windows.yaml
     ```
   + Si utiliza computadoras con Linux y desea la configuración de Fluent Bit que sea más similar a Fluentd, ejecute este comando.

     ```
     kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit-compatible.yaml
     ```
**importante**  
De forma predeterminada, la configuración daemonset de Fluent Bit establece el nivel de registro en INFO, lo que puede generar mayores costes de ingesta de registros de CloudWatch. Si quiere reducir el volumen y los costes de la ingesta de registros, puede cambiar el nivel de registro a ERROR.  
Para obtener más información acerca de cómo reducir el volumen del registro, consulte [(Opcional) Reducción del volumen de registros del Fluent Bit](#ContainerInsights-fluentbit-volume)

1. Especifique el siguiente comando para validar la implementación. Cada nodo debe tener un pod denominado **fluent-bit-\$1**.

   ```
   kubectl get pods -n amazon-cloudwatch
   ```

Los pasos anteriores crean los siguientes recursos en el clúster:
+ Una cuenta de servicio denominada `Fluent-Bit` en el espacio de nombres `amazon-cloudwatch`. Esta cuenta de servicio se utiliza para ejecutar el DaemonSet de FluentD. Para obtener más información, consulte [Managing Service Accounts](https://kubernetes.io/docs/reference/access-authn-authz/service-accounts-admin/) en la documentación de Kubernetes.
+ Un rol de clúster denominado `Fluent-Bit-role` en el espacio de nombres `amazon-cloudwatch`. Este rol de clúster concede los permisos `get`, `list` y `watch` para los registros de los pods a la cuenta de servicio `Fluent-Bit`. Para obtener información, consulte [API Overview](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#api-overview/) en la documentación de Kubernetes.
+ Un ConfigMap denominado `Fluent-Bit-config` en el espacio de nombres `amazon-cloudwatch`. Este ConfigMap contiene la configuración que va a utilizar Fluent Bit. Para obtener más información, consulte [Configure a Pod to Use a ConfigMap](https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/) en la documentación de tareas de Kubernetes.

Si desea verificar la configuración de Fluent Bit, siga estos pasos.

**Verifique la configuración de Fluent Bit**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, seleccione **Grupos de registro**.

1. Asegúrese de que está en la Región donde ha implementado Fluent Bit.

1. Verifique la lista de los grupos de registros de la Región. Debería ver lo siguiente:
   + `/aws/containerinsights/Cluster_Name/application`
   + `/aws/containerinsights/Cluster_Name/host`
   + `/aws/containerinsights/Cluster_Name/dataplane`

1. Desplácese a uno de estos grupos de registro y verifique la **Last Event Time** (Hora del último evento) para los flujos de registro. Si es reciente en relación con el momento en el que implementó Fluent Bit, se verifica la configuración.

   Puede haber un ligero retraso en la creación del grupo de registro de `/dataplane`. Esto es normal, ya que estos grupos de registro sólo se crean cuando el Fluent Bit comienza a enviar registros para ese grupo de registros.

## Compatibilidad con registros de varias líneas
<a name="ContainerInsights-fluentbit-multiline"></a>

Para obtener información sobre cómo usar Fluent Bit con registros de varias líneas, consulte las siguientes secciones de la documentación de Fluent Bit:
+ [Análisis multilínea](https://docs.fluentbit.io/manual/administration/configuring-fluent-bit/multiline-parsing)
+ [Líneas múltiples y contenedores (v1.8)](https://docs.fluentbit.io/manual/pipeline/inputs/tail#multiline-and-containers-v1.8)
+ [Núcleo multilínea (v1.8)](https://docs.fluentbit.io/manual/pipeline/inputs/tail#multiline-core-v1.8)
+ [Utilice siempre líneas múltiples en la entrada trasera](https://github.com/aws/aws-for-fluent-bit/blob/mainline/troubleshooting/debugging.md#always-use-multiline-the-tail-input)

## (Opcional) Reducción del volumen de registros del Fluent Bit
<a name="ContainerInsights-fluentbit-volume"></a>

De forma predeterminada, se envían registros de aplicaciones de Fluent Bit y metadatos de Kubernetes a CloudWatch. Si desea reducir el volumen de datos que se envía a CloudWatch, puede detener el envío de uno o ambos de estos orígenes de datos a CloudWatch. Si siguió los pasos de esta página para configurar Fluent Bit, descargue el archivo YAML del manifiesto de Kubernetes desde el comando kubectl `apply` que ejecutó anteriormente y modifíquelo con sus cambios, los cuales podrá volver a aplicar en su clúster. Como alternativa, si utiliza el complemento de observabilidad de EKS de Amazon CloudWatch o el gráfico de Helm, consulte [Configuraciones adicionales (Opcional)](install-CloudWatch-Observability-EKS-addon.md#install-CloudWatch-Observability-EKS-addon-configuration) para acceder a información sobre la administración de la configuración de Fluent Bit con la configuración avanzada del complemento o el gráfico de Helm.

Para detener los registros de aplicaciones de Fluent Bit, elimine la siguiente sección del archivo `Fluent Bit configuration`.

```
[INPUT]
        Name                tail
        Tag                 application.*
        Path                /var/log/containers/fluent-bit*
        Parser              docker
        DB                  /fluent-bit/state/flb_log.db
        Mem_Buf_Limit       5MB
        Skip_Long_Lines     On
        Refresh_Interval    10
```

Para evitar que los metadatos de Kubernetes se agreguen a los eventos de registro que se envían a CloudWatch, incluya los siguientes filtros en la sección `application-log.conf` en la configuración de Fluent Bit. Sustituya *<Metadata\$11>* y los campos similares por los identificadores de metadatos reales.

```
application-log.conf: |
    [FILTER]
        Name                nest
        Match               application.*
        Operation           lift
        Nested_under        kubernetes
        Add_prefix          Kube.

    [FILTER]
        Name                modify
        Match               application.*
        Remove              Kube.<Metadata_1>
        Remove              Kube.<Metadata_2>
        Remove              Kube.<Metadata_3>
    
    [FILTER]
        Name                nest
        Match               application.*
        Operation           nest
        Wildcard            Kube.*
        Nested_under        kubernetes
        Remove_prefix       Kube.
```

## Solución de problemas
<a name="Container-Insights-FluentBit-troubleshoot"></a>

Si no ve estos grupos de registros y está mirando en la Región correcta, verifique los registros de los pods del DaemonSet de Fluent Bit para buscar el error.

Ejecute el siguiente comando y asegúrese de que el estado es `Running`.

```
kubectl get pods -n amazon-cloudwatch
```

Si los registros tienen errores relacionados con los permisos de IAM, consulte el rol de IAM que está adjunto a los nodos del clúster. Para obtener más información sobre los permisos necesarios para ejecutar un clúster de Amazon EKS, consulte [Amazon EKS IAM Policies, Roles, and Permissions](https://docs.aws.amazon.com/eks/latest/userguide/IAM_policies.html) (Permisos, roles y políticas de IAM de Amazon EKS) en la *Guía del usuario de Amazon EKS*.

Si el estado del pod es `CreateContainerConfigError`, obtenga el error exacto ejecutando el siguiente comando.

```
kubectl describe pod pod_name -n amazon-cloudwatch
```

## Panel de control
<a name="Container-Insights-FluentBit-dashboard"></a>

Puede crearse un panel para supervisar las métricas de cada complemento en ejecución. Puede ver los datos de los bytes de entrada y salida y de las tasas de procesamiento de registros, así como los errores de salida y las tasas de intento y error. Para visualizar estas métricas, se deberá instalar el agente de CloudWatch con la colección de métricas de Prometheus para los clústeres de Amazon EKS y de Kubernetes. Para obtener más información acerca de cómo se configuran estos paneles, consulte [Instale el agente de CloudWatch con la colección de métricas de Prometheus en clústeres de Amazon EKS y de KubernetesInstale el agente de CloudWatch con la obtención de métricas de Prometheus en clústeres de Amazon EKS y de Kubernetes](ContainerInsights-Prometheus-Setup.md).

**nota**  
Antes de configurar este panel, debe configurar Información de contenedores de para las métricas de Prometheus. Para obtener más información, consulte [Supervisión de métricas de Información de contenedores de Prometheus](ContainerInsights-Prometheus.md).

**Para crear un panel para las métricas de Prometheus de Fluent Bit**

1. Cree variables de entorno, mediante el reemplazo de los valores de la derecha en las siguientes líneas para que concuerden con la implementación.

   ```
   DASHBOARD_NAME=your_cw_dashboard_name
   REGION_NAME=your_metric_region_such_as_us-west-1
   CLUSTER_NAME=your_kubernetes_cluster_name
   ```

1. Ejecute el siguiente comando para crear el panel.

   ```
   curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/fluent-bit/cw_dashboard_fluent_bit.json \
   | sed "s/{{YOUR_AWS_REGION}}/${REGION_NAME}/g" \
   | sed "s/{{YOUR_CLUSTER_NAME}}/${CLUSTER_NAME}/g" \
   | xargs -0 aws cloudwatch put-dashboard --dashboard-name ${DASHBOARD_NAME} --dashboard-body
   ```

# (Opcional) Configure el registro del plano de control de Amazon EKS
<a name="Container-Insights-setup-control-plane-logging"></a>

Si utiliza Amazon EKS, tiene la opción de habilitar el registro del plano de control de Amazon EKS, para proporcionar registros de auditoría y de diagnóstico directamente desde el plano de control de Amazon EKS a CloudWatch Logs. Para obtener más información, consulte [Amazon EKS Control Plane Logging](https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html) (Registro del plano de control de Amazon EKS).

# (Opcional) Habilitar la característica Use\$1Kubelet para clústeres grandes
<a name="ContainerInsights-use-kubelet"></a>

De forma predeterminada, la característica Use\$1Kubelet está deshabilitada en el complemento FluentBit Kubernetes. Habilitar esta característica puede reducir el tráfico hacia el servidor de la API y mitigar el problema de que el servidor de la API sea un cuello de botella. Recomendamos que habilite esta característica para clústeres grandes.

Para habilitar Use\$1Kubelet, agregue primero los nodos y los permisos de nodos/proxy a la configuración de ClusterRole.

```
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: fluent-bit-role
rules:
  - nonResourceURLs:
      - /metrics
    verbs:
      - get
  - apiGroups: [""]
    resources:
      - namespaces
      - pods
      - pods/logs
      - nodes
      - nodes/proxy
    verbs: ["get", "list", "watch"]
```

En la configuración de Daemonset, esta característica necesita acceso a la red de host. La versión de la imagen de `amazon/aws-for-fluent-bit` debería ser 2.12.0 o posterior, o la versión de imagen de bits fluida debería ser 1.7.2 o posterior.

```
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluent-bit
  namespace: amazon-cloudwatch
  labels:
    k8s-app: fluent-bit
    version: v1
    kubernetes.io/cluster-service: "true"
spec:
  selector:
    matchLabels:
      k8s-app: fluent-bit
  template:
    metadata:
      labels:
        k8s-app: fluent-bit
        version: v1
        kubernetes.io/cluster-service: "true"
    spec:
      containers:
      - name: fluent-bit
        image: amazon/aws-for-fluent-bit:2.19.0
        imagePullPolicy: Always
        env:
            - name: AWS_REGION
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: logs.region
            - name: CLUSTER_NAME
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: cluster.name
            - name: HTTP_SERVER
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: http.server
            - name: HTTP_PORT
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: http.port
            - name: READ_FROM_HEAD
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: read.head
            - name: READ_FROM_TAIL
              valueFrom:
                configMapKeyRef:
                  name: fluent-bit-cluster-info
                  key: read.tail
            - name: HOST_NAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
            - name: HOSTNAME
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.name      
            - name: CI_VERSION
              value: "k8s/1.3.8"
        resources:
            limits:
              memory: 200Mi
            requests:
              cpu: 500m
              memory: 100Mi
        volumeMounts:
        # Please don't change below read-only permissions
        - name: fluentbitstate
          mountPath: /var/fluent-bit/state
        - name: varlog
          mountPath: /var/log
          readOnly: true
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
        - name: fluent-bit-config
          mountPath: /fluent-bit/etc/
        - name: runlogjournal
          mountPath: /run/log/journal
          readOnly: true
        - name: dmesg
          mountPath: /var/log/dmesg
          readOnly: true
      terminationGracePeriodSeconds: 10
      hostNetwork: true
      dnsPolicy: ClusterFirstWithHostNet
      volumes:
      - name: fluentbitstate
        hostPath:
          path: /var/fluent-bit/state
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers
      - name: fluent-bit-config
        configMap:
          name: fluent-bit-config
      - name: runlogjournal
        hostPath:
          path: /run/log/journal
      - name: dmesg
        hostPath:
          path: /var/log/dmesg
      serviceAccountName: fluent-bit
      tolerations:
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
      - operator: "Exists"
        effect: "NoExecute"
      - operator: "Exists"
        effect: "NoSchedule"
```

La configuración del complemento de Kubernetes debería ser similar a la siguiente:

```
[FILTER]
        Name                kubernetes
        Match               application.*
        Kube_URL            https://kubernetes.default.svc:443
        Kube_Tag_Prefix     application.var.log.containers.
        Merge_Log           On
        Merge_Log_Key       log_processed
        K8S-Logging.Parser  On
        K8S-Logging.Exclude Off
        Labels              Off
        Annotations         Off
        Use_Kubelet         On
        Kubelet_Port        10250 
        Buffer_Size         0
```