Affichage des journaux des applications des noeuds virtuels

Découvrez comment afficher les journaux des applications exécutées sur des noeuds virtuels dans une grappe Kubernetes que vous avez créée à l'aide de Kubernetes Engine (OKE).

Après avoir créé une grappe avec des noeuds virtuels à l'aide de Kubernetes Engine, vous disposez de deux options pour accéder aux journaux des applications exécutées sur les noeuds virtuels :

  • Consultez les journaux stdout et stderr à partir des conteneurs d'application à l'aide de la commande kubectl logs.
  • Envoyer les journaux de l'application à un serveur de journaux persistant pour consultation.

Affichage des journaux stdout et stderr à l'aide de la commande kubectl logs

Pour voir les journaux stdout et stderr à partir des conteneurs d'une application à l'aide de la commande kubectl logs :
  1. Si vous ne l'avez pas encore fait, suivez les étapes pour configurer le fichier de configuration kubeconfig de la grappe et (s'il y a lieu) définissez la variable d'environnement KUBECONFIG pour qu'elle pointe vers le fichier. Notez que vous devez configurer votre propre fichier kubeconfig. Vous ne pouvez pas accéder à une grappe à l'aide d'un fichier kubeconfig configuré par un autre utilisateur. Voir Configuration de l'accès aux grappes.
  2. Dans une fenêtre de terminal, exécutez la commande kubectl logs en entrant :
    kubectl logs <pod-name>

    Par exemple :

    kubectl logs nginx

    Lorsque le pod contient plusieurs conteneurs, spécifiez le conteneur pour lequel vous voulez voir les journaux. Par exemple, si le pod myapp comporte deux conteneurs appelés nginx et logging et que vous voulez afficher les journaux du conteneur logging, entrez :

    kubectl logs myapp logging

Envoi des journaux à un serveur de journaux persistant

Vous pouvez envoyer les journaux des applications exécutées sur des noeuds virtuels à un serveur de journaux distant tel que OpenSearch, et voir les journaux sur ce serveur. Comme les noeuds virtuels ne prennent pas en charge le jeu de démons Kubernetes, vous ne pouvez pas exécuter un agent de journalisation au niveau du noeud. Vous pouvez plutôt exécuter un agent de journalisation léger en tant que side-car pour chacun des pods de l'application. Vous pouvez utiliser n'importe quel agent de journalisation qui peut s'exécuter en tant que side-car sur un pod Kubernetes, tel que Fluent Bit.

Par exemple, pour exécuter Fluent Bit en tant que side-car sur un pod afin d'envoyer les journaux d'application à un serveur de journaux OpenSearch distant :

  1. Créez un fichier Kubernetes ConfigMap par grappe ou par espace de noms, en spécifiant les paramètres de configuration du bit fluide à utiliser. Notez en particulier que vous devez spécifier l'adresse IP, le numéro de port et les paramètres d'authentification du serveur de journaux distant.

    Par exemple :

    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

    où :

    • host <ip-address> spécifie l'adresse IP du serveur Opensearch.
    • port <port-number> spécifie le port du serveur Opensearch (9200 par défaut).
    • HTTP_User <username> indique le nom d'utilisateur du serveur Opensearch.
    • HTTP_Passwd <example-password> indique le mot de passe du serveur Opensearch.
  2. Ajoutez un sidecar Fluent Bit à chaque gousse. Notez que vous devez configurer tous les pods avec un side-car Bit fluide pour vous assurer que les journaux d'application sont envoyés à la destination de journalisation persistante.
    1. Dans la section volumes de chaque spécification de pod, spécifiez :

      • Un emptyDir où les journaux d'application sont écrits, comme suit :
        - name: logs
          emptyDir: {}
      • Référence à ConfigMap que vous avez créé précédemment, comme suit :
        - name: fluentbit-config
          configMap:
            name: fluentbit-config
    2. Dans la section containers de chaque spécification de pod, vous devez spécifier que le conteneur de journalisation :

      • Utilise l'image fluent/fluent-bit.
      • Monte logs emptyDir et fluentbit-config ConfigMap.

      Par exemple :

      - 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 

    Voici un exemple de spécification de pod complète :

    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