Visualización de logs de aplicación en nodos virtuales

Descubra cómo ver los logs de aplicaciones que se ejecutan en nodos virtuales en un cluster de Kubernetes que ha creado con Kubernetes Engine (OKE).

Una vez creado un cluster con nodos virtuales mediante Kubernetes Engine, tiene dos opciones para acceder a los logs de las aplicaciones que se ejecutan en los nodos virtuales:

  • Visualice los logs de stdout y stderr desde los contenedores de aplicaciones mediante el comando kubectl logs.
  • Envíe logs de aplicación a un servidor de logs persistente para su visualización.

Visualización de logs stdout y stderr mediante el comando kubectl logs

Para ver los logs de stdout y stderr desde los contenedores de una aplicación mediante el comando kubectl logs:
  1. Si todavía no lo ha hecho, siga los pasos para configurar el archivo de configuración kubeconfig del cluster y (si es necesario) defina la variable de entorno KUBECONFIG para que apunte al archivo. Tenga en cuenta que debe configurar su propio archivo kubeconfig. No puede acceder a un cluster utilizando un archivo kubeconfig que haya configurado un usuario diferente. Consulte Configuración del acceso a los clusters.
  2. En una ventana de terminal, ejecute el comando kubectl logs introduciendo:
    kubectl logs <pod-name>

    Por ejemplo:

    kubectl logs nginx

    Cuando el pod contenga más de un contenedor, especifique el contenedor para el que desea ver los logs. Por ejemplo, si el pod myapp tiene dos contenedores denominados nginx y logging y desea mostrar los logs del contenedor logging, introduzca:

    kubectl logs myapp logging

Envío de logs a un servidor de logs persistente

Puede enviar los logs de las aplicaciones que se ejecutan en nodos virtuales a un servidor de logs remoto, como OpenSearch, y ver los logs de ese servidor. Dado que los nodos virtuales no soportan el conjunto de daemons de Kubernetes, no puede ejecutar un agente de registro en el nivel de nodo. En su lugar, puede ejecutar un agente de registro ligero como sidecar para cada uno de los pods de la aplicación. Puede utilizar cualquier agente de registro que se pueda ejecutar como sidecar en un pod de Kubernetes, como Bit de fluido.

Por ejemplo, para ejecutar Fluent Bit como sidecar en un pod para enviar logs de aplicación a un servidor de log OpenSearch remoto:

  1. Cree una instancia de Kubernetes ConfigMap por cluster o por espacio de nombres, especificando los valores de configuración de bit fluido que se van a utilizar. En particular, tenga en cuenta que debe especificar la dirección IP, el número de puerto y los parámetros de autenticación del servidor de log remoto.

    Por ejemplo:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: fluentbit-config
    data:
      fluent-bit.conf: |
        [SERVICE]
            flush        1
            daemon       Off
     
        [INPUT]
            Name              tail
            Path              /mnt/log/*
     
        [OUTPUT]
            name  opensearch
            match *
            host <ip-address>
            port <port-number>
            tls On
            HTTP_User <username>
            HTTP_Passwd <example-password>
            Index fluent-bit
            Suppress_Type_Name On

    donde:

    • host <ip-address> especifica la dirección IP del servidor de Opensearch.
    • port <port-number> especifica el puerto del servidor de Opensearch (9200 por defecto).
    • HTTP_User <username> especifica el nombre de usuario del servidor de Opensearch.
    • HTTP_Passwd <example-password> especifica la contraseña para el servidor de Opensearch.
  2. Agregue un sidecar de bit fluido a cada pod. Tenga en cuenta que debe configurar todos los pods con un sidecar de bit fluido para asegurarse de que los logs de aplicación se envían al destino de log persistente.
    1. En la sección volumes de cada especificación de pod, especifique:

      • emptyDir donde se escriben los logs de aplicación, de la siguiente forma:
        - name: logs
          emptyDir: {}
      • Una referencia a ConfigMap que ha creado anteriormente, de la siguiente forma:
        - name: fluentbit-config
          configMap:
            name: fluentbit-config
    2. En la sección containers de cada especificación de pod, debe especificar que el contenedor de registro:

      • Utiliza la imagen fluent/fluent-bit.
      • Monta logs emptyDir y fluentbit-config ConfigMap.

      Por ejemplo:

      - name: logging
        image: fluent/fluent-bit
        resources:
          requests:
            cpu: 100m
            memory: 50Mi
        volumeMounts:
        - name: logs
          mountPath: /mnt/log
        - name: fluentbit-config
          mountPath: /fluent-bit/etc 

    A continuación, se muestra un ejemplo de una especificación de pod completa:

    apiVersion: v1
    kind: Pod
    metadata:
      name: date-logging
    spec:
      containers:
      - name: date
        image: busybox
        resources:
          requests:
            cpu: 500m
            memory: 200Mi
        command: ["sh", "-c"]
        args:
          - while [ 1 ]; do
            echo "Writing the date in /mnt/log/date.log";
            date >> /mnt/log/date.log;
            sleep 10;
            done
        volumeMounts:
        - name: logs
          mountPath: /mnt/log
      - name: logging
        image:
         resources:
          requests:
            cpu: 100m
            memory: 50Mi
        volumeMounts:
        - name: logs
          mountPath: /mnt/log
        - name: fluentbit-config
          mountPath: /fluent-bit/etc
      volumes:
      - name: logs
        emptyDir: {}
      - name: fluentbit-config
        configMap:
          name: fluentbit-config