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
kubectl logs :-
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.
- Dans une fenêtre de terminal, exécutez la commande
kubectl logsen entrant :kubectl logs <pod-name>Par exemple :
kubectl logs nginxLorsque le pod contient plusieurs conteneurs, spécifiez le conteneur pour lequel vous voulez voir les journaux. Par exemple, si le pod
myappcomporte deux conteneurs appelésnginxetlogginget que vous voulez afficher les journaux du conteneurlogging, 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 :
- 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 Onoù :
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.
- 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.
-
Dans la section
volumesde 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
- Un emptyDir où les journaux d'application sont écrits, comme suit :
-
Dans la section
containersde chaque spécification de pod, vous devez spécifier que le conteneur de journalisation :- Utilise l'image
fluent/fluent-bit. - Monte
logsemptyDir etfluentbit-configConfigMap.
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 - Utilise l'image
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 -