Journalisation pour les clusters

Configurez la journalisation dans IBM Cloud® Kubernetes Service pour vous aider à identifier et résoudre les incidents et améliorer l'état de santé et les performances de vos applications et clusters Kubernetes.

La surveillance et la journalisation en continu est essentielle à la détection des attaques sur votre cluster et au traitement des incidents lorsqu'ils se produisent. En exerçant la surveillance continue de votre cluster, vous êtes en mesure de mieux comprendre la capacité de votre cluster et la disponibilité des ressources disponibles dans votre application. Vous pouvez ainsi protéger vos applications et éviter leur indisponibilité.

Choix d'une solution de journalisation

Par défaut, les journaux sont générés et écrits localement pour tous les composants de cluster IBM Cloud Kubernetes Service suivants : nœud worker, conteneurs, applications, stockage de persistance, équilibreur de charge d'application Ingress, API Kubernetes et espace de nom kube-system. Plusieurs solutions de journalisation sont disponibles pour collecter, acheminer et afficher ces journaux.

IBM Cloud Logs
Gérez les journaux de conteneur de pod en déployant une instance d'IBM Cloud Logs et en configurant cette instance pour votre cluster dans Kubernetes Service. Un agent de journalisation collecte les journaux avec l'extension *.log et les fichiers sans extension qui sont stockés dans le répertoire /var/log de votre pod à partir de tous les espaces de noms, y compris kube-system. L'agent transmet ensuite les journaux à votre instance de service. Vous pouvez également suivre l'activité administrative initiée par l'utilisateur dans votre cluster Kubernetes Service génère automatiquement des événements de gestion de cluster et transmet ces journaux d'événements à IBM Cloud Logs. Pour plus d'informations, voir Initiation à IBM Cloud Logs. Pour déployer un agent de journalisation sur votre cluster, consultez Gestion de l'agent de journalisation pour les clusters Red Hat OpenShift on IBM Cloud ou Gestion de l'agent de journalisation pour les clusters IBM Cloud Kubernetes Service.
Fluentd avec un serveur externe
Pour collecter, acheminer et afficher les journaux d'un composant de cluster, vous pouvez créer une configuration de journalisation en utilisant Fluentd. Lorsque vous créez une configuration de journalisation, le Fluentd composant de cluster collecte les journaux à partir des chemins d'accès correspondant à une source spécifiée. Fluentd peut ensuite transmettre ces journaux à un serveur externe prenant en charge le protocole syslog. Pour commencer, voir Comprendre le transfert de journaux vers un serveur externe.

Migration des agents de journalisation et de surveillance vers Cloud Logs

Le plug-in CLI d'observabilité ibmcloud ob et les points d'extrémité v2/observe ne sont plus pris en charge. Il n'y a pas de remplacement direct, mais vous pouvez désormais gérer vos intégrations de journalisation et de surveillance via l'extension IBM Cloud Kubernetes Service ou en envoyant les données de journalisation de IBM Cloud Kubernetes Service à IBM Cloud Logs.

Vous ne pouvez plus utiliser le plug-in ob, Terraform ou l'API pour installer des agents d'observabilité sur un cluster ou pour modifier votre configuration existante. Les agents Sysdig continuent d'envoyer des métriques à l'instance IBM Cloud Monitoring spécifiée. LogDNA les agents ne peuvent plus envoyer de journaux depuis que IBM Cloud Log Analysis est remplacé par IBM Cloud Logs.

Suppression des agents du plug-in d'observabilité

  • Lorsque l'assistance pour le site ob plugin prend fin, vous devez supprimer chaque composant individuellement.

    1. Nettoyer les daemonsets et les configmaps.
        kubectl delete daemonset logdna-agent -n ibm-observe
        kubectl delete daemonset sysdig-agent -n ibm-observe
        kubectl delete configmap <logdna-configmap> -n ibm-observe
        kubectl delete configmap <sysdig-configmap> -n ibm-observe
        ```
    1. Optionnel : Supprimer l'espace de noms. Si aucune autre ressource n'est en cours d'exécution dans l'espace de noms.
    ```sh {: pre}
        kubectl delete namespace ibm-observe
        ```
    

Une fois le plug-in supprimé, réinstallez les agents de journalisation et de surveillance dans votre cluster à l'aide du tableau de bord du cluster, de Terraform ou manuellement.

Pour plus d'informations, voir les liens suivants :

Acheminement des journaux de cluster et d'application vers un serveur externe

Configurez l'acheminement de journaux pour des clusters standard IBM Cloud Kubernetes Service vers un serveur externe.

Description de l'acheminement des journaux vers un serveur externe

Lorsque vous créez une configuration de journalisation pour une source de votre cluster afin de transférer les données vers un serveur externe, un Fluentd composant est créé dans votre cluster. Fluentd collecte les journaux à partir des chemins de cette source et les transmet à un serveur externe. Le trafic provenant de cette source destiné au service de journalisation sur le port d'ingestion est chiffré.

Pour quelles sources puis-je configurer le transfert des journaux?
Sur l'image ci-dessous, vous pouvez voir la zone correspondant aux sources pour lesquelles vous pouvez configurer la journalisation.

Sources de journaux dans votre cluster.
Sources de journaux dans votre cluster

  1. worker : informations spécifiques à la configuration de l'infrastructure dont vous disposez pour votre noeud worker. Les journaux des utilisateurs sont enregistrés dans syslog et contiennent les événements du système d'exploitation. Dans auth.log vous pouvez trouver des informations sur les demandes d'authentification effectuées après du système d'exploitation.

    Chemins

    • /var/log/syslog
    • /var/log/auth.log
  2. container: Informations enregistrées par un conteneur en cours d'exécution. Chemins d'accès: tout ce qui est écrit dans les fichiers STDOUT ou STDERR.

  3. application : informations sur les événements qui se produisent au niveau de l'application. Il peut s'agir d'une notification signalant qu'un événement s'est produit, comme une connexion réussie, d'un avertissement concernant l'espace de stockage ou d'autres opérations pouvant être effectuées au niveau de l'application. Chemins d'accès: vous pouvez définir les chemins d'accès vers lesquels vos journaux sont transférés. Cependant, pour que les journaux soient envoyés, vous devez utiliser un chemin d'accès absolu dans votre configuration de journalisation pour que les journaux ne puissent être lus. Si votre répertoire est monté sur votre nœud de travail, il se peut qu'un lien symbolique ait été créé. Exemple : si le chemin indiqué est /usr/local/spark/work/app-0546/0/stderr mais que les fichiers journaux sont en réalité stockés à l'adresse /usr/local/spark-1.0-hadoop-1.2/work/app-0546/0/stderr, ceux-ci ne pourront pas être lus.

  4. storage : informations sur le stockage persistant configuré dans votre cluster. Les journaux de stockage peuvent vous aider à configurer des tableaux de bord et des alertes pour identifier les problèmes, dans le cadre des éditions de production et pipeline DevOps. Remarque : les chemins /var/log/kubelet.log et /var/log/syslog contiennent également des journaux de stockage, mais les journaux de ces chemins sont collectés par les sources de journal kubernetes et worker.

    Chemins
    /var/log/ibmc-s3fs.log
    /var/log/ibmc-block.log
    Pods
    portworx-***
    ibmcloud-block-storage-attacher-***
    ibmcloud-block-storage-driver-***
    ibmcloud-block-storage-plugin-***
    ibmcloud-object-storage-plugin-***
  5. kubernetes : informations de kubelet, kube-proxy et en provenance d'autres événements Kubernetes qui se produisent dans l'espace de noms kube-system du noeud worker.

    Chemins
    /var/log/kubelet.log
    /var/log/kube-proxy.log
    /var/log/event-exporter/1..log
  6. ingress : informations sur le trafic réseau qui arrive dans un cluster via l'équilibreur de charge d'application Ingress.

    Chemins
    /var/log/alb/ids/*.log
    /var/log/alb/ids/*.err
    /var/log/alb/customerlogs/*.log
    /var/log/alb/customerlogs/*.err
  7. kube-audit : informations sur les actions associées au cluster qui sont envoyées au serveur d'API Kubernetes, notamment la date et l'heure, l'utilisateur et la ressource concernée. La source kube-audit peut être configurée avec un webhook. Pour plus d'informations, voir Transmission des journaux d'audit d'API Kubernetes à un serveur externe.

Est-ce à moi de veiller à ce que le site Fluentd soit mis à jour?
Pour modifier vos configurations de journalisation ou de filtre, le composant de journalisation Fluentd doit correspondre à la dernière version. Par défaut, les mises à jour automatiques de ce module sont activées. Pour désactiver les mises à jour automatiques, voir Mise à jour de composants de cluster : Fluentd pour la journalisation.
Puis-je transférer certains fichiers journaux, mais pas d'autres, à partir d'une source de mon cluster?
Oui. Si vous avez, par exemple, un pod particulièrement bavard, vous éviterez d'allouer de l'espace de stockage aux journaux de ce pod, tout en autorisant l'acheminement de journaux d'autres pods. Pour empêcher l'acheminement des journaux d'un pod particulier, voir Filtrage des journaux.

Acheminement des journaux de cluster et d'application

Créez une configuration pour la journalisation de cluster et d'application. Vous pouvez distinguer les différentes options de journalisation à l'aide des options.

Le tableau suivant présente les différentes options dont vous disposez lorsque vous configurez la journalisation, ainsi que leur description.

Description des options de configuration de journalisation
Paramètre Description
<cluster_name_or_ID> Nom ou ID du cluster.
--logsource Source depuis laquelle vous désirez acheminer les journaux. Valeurs admises : container, application, worker, kubernetes, ingress et storage. Cette option prend en charge une liste de sources de journaux séparées par des virgules à appliquer à la configuration. Si vous ne fournissez pas de source de journal, des configurations de journalisation sont créées pour les sources de journal container et ingress.
--type syslog La valeur syslog achemine vos journaux vers un serveur externe.
--namespace Facultatif : espace de noms Kubernetes depuis lequel vous désirez acheminer des journaux. L'acheminement des journaux n'est pas pris en charge pour les espaces de noms Kubernetes ibm-system et kube-system. Cette valeur n'est valide que pour la source de journal container. Si vous ne spécifiez pas d'espace de nom, tous les espaces de nom du cluster utilisent cette configuration.
--hostname Indiquez le nom d'hôte ou l'adresse IP du service collecteur de journal.
--port Port d'ingestion. Si vous ne spécifiez pas de port, le port standard 9091 est utilisé. Pour syslog, indiquez le port du serveur collecteur de journal. Si vous ne spécifiez pas de port, le port standard 514 est utilisé.
--app-containers Facultatif : pour acheminer les journaux à partir d'une application, vous pouvez indiquer le nom du conteneur contenant votre application. Vous pouvez spécifier plusieurs conteneurs en utilisant une liste séparée par des virgules. Si aucun conteneur n'est spécifié, les journaux sont transmis à partir de tous les conteneurs qui contiennent les chemins que vous avez fournis.
--app-paths Chemin d'accès à un conteneur utilisé par les applications pour la journalisation. Pour acheminer des journaux avec le type de source application, vous devez indiquer un chemin. Pour indiquer plusieurs chemins, utilisez une liste séparée par des virgules, par exemple, /var/log/myApp1/*,/var/log/myApp2/*
--syslog-protocol Lorsque le type de journalisation est syslog<, le protocole de couche transport. Vous pouvez utiliser les protocoles suivants : udp, tls ou tcp. Lors d'un transfert vers un serveur rsyslog via le protocole udp, les journaux dont la longueur dépasse 1KB sont tronqués.
--ca-cert Obligatoire : lorsque le type de journalisation est syslog et que le protocole est tls, nom du secret Kubernetes qui contient le certificat de l'autorité de certification.
--verify-mode Lorsque le type de journalisation est syslog et que le protocole est tls, mode de vérification. Les valeurs admises sont verify-peer et la valeur par défaut est verify-none.
--skip-validation Facultatif : ignore la validation des noms d'organisation et d'espace lorsqu'ils sont spécifiés. Cette opération permet de réduire le temps de traitement, mais une configuration de journalisation non valide n'achemine pas correctement les journaux.

Acheminement des journaux vers votre propre serveur via les protocoles udp ou tcp

  1. Assurez-vous de disposer de l'Rédacteur en chef ou le rôle d'accès à la plateforme IAM d' Administrateur IBM Cloud.

  2. Pour le cluster où se trouve la source de journal : connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.

  3. Configurez un serveur prenant en charge le protocole syslog de l'une des deux manières suivantes : : Configurez et gérez votre propre serveur ou confiez la gestion du serveur à un fournisseur. Dans ce cas, obtenez le noeud final de journalisation du fournisseur de journalisation.

    : Exécutez « syslog » à partir d'un conteneur. Par exemple, vous pouvez utiliser ce fichier.yaml de déploiement pour récupérer une image publique Docker qui exécute un conteneur dans votre cluster. L'image publie le port 514 sur l'adresse IP du cluster public et utilise cette adresse pour configurer l'hôte syslog.

    Vous pouvez consulter vos journaux au format JSON valide en supprimant les préfixes « syslog ». Pour ce faire, ajoutez le code suivant au début de votre fichier etc/rsyslog.conf sur le serveur où s'exécute votre application rsyslog : $template customFormat,"%msg%\n"$ActionFileDefaultTemplate customFormat

  4. Créer une configuration d'acheminement des journaux. Pour plus d'informations sur les paramètres, voir Description des options de configuration de journalisation.

    ibmcloud ks logging config create --cluster CLUSTER_NAME_OR_ID --logsource LOG_SOURCE --namespace KUBERNETES_NAMESPACE --hostname LOG_SERVER_HOSTNAME_OR_IP --port LOG_SERVER_PORT --type syslog --app-containers CONTAINER1,2 --app-paths PATHS_TO_LOGS --syslog-protocol PROTOCOL
    

Acheminement des journaux vers votre propre serveur via le protocole tls

  1. Vérifiez que vous disposez des rôles IBM Cloud IAM suivants :

    • Rôle d'accès à la plateforme Editeur ou Administrateur pour le cluster
    • Rôle d'accès au service Auteur ou Responsable pour l'espace de noms kube-system
  2. Pour le cluster où se trouve la source de journal : connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.

  3. Configurez un serveur prenant en charge le protocole syslog de l'une des deux manières suivantes :

    • Configurez et gérez votre propre serveur ou confiez la gestion du serveur à un fournisseur. Dans ce cas, obtenez le noeud final de journalisation du fournisseur de journalisation.

    • Exécutez « syslog » à partir d'un conteneur. Par exemple, vous pouvez utiliser ce fichier.yaml de déploiement pour récupérer une image publique Docker qui exécute un conteneur dans votre cluster. L'image publie le port 514 sur l'adresse IP publique du cluster et utilise cette adresse IP publique du cluster pour configurer l'hôte syslog. Vous devez injecter les certificats de l'autorité de certification et les certificats côté serveur appropriés et mettre à jour le fichier syslog.conf pour activer tls sur votre serveur.

  4. Enregistrez votre certificat d'autorité de certification dans un fichier nommé ca-cert. Ce nom doit exactement celui-ci.

  5. Créez un secret dans l'espace de noms kube-system pour le fichier ca-cert. Lorsque vous créez votre configuration de journalisation, utilisez le nom du secret pour l'option « --ca-cert ».

    kubectl -n kube-system create secret generic --from-file=ca-cert
    
  6. Créer une configuration d'acheminement des journaux. Pour plus d'informations sur les paramètres, voir Description des options de configuration de journalisation.

    ibmcloud ks logging config create --cluster <cluster name or id> --logsource <log source> --type syslog --syslog-protocol tls --hostname <ip address of syslog server> --port <port for syslog server, 514 is default> --ca-cert <secret name> --verify-mode <defaults to verify-none>
    

Filtrage des journaux qui sont acheminés

Vous pouvez déterminer les journaux que vous allez acheminer en filtrant des journaux spécifiques sur une période donnée. Vous pouvez distinguer les différentes options de filtrage à l'aide des options.

Description des options de filtrage des journaux
Paramètre Description
<cluster_name_or_ID> Obligatoire : nom ou ID du cluster dont vous souhaitez filtrer les journaux.
<log_type> Type des journaux auquel vous voulez appliquer le filtre. Les types all, container et host sont actuellement pris en charge.
<configs> Facultatif : liste séparée par des virgules contenant les ID de vos configurations de journalisation. S'il n'est pas fourni, le filtre est appliqué à toutes les configurations de consignation de cluster transmises au filtre. Vous pouvez afficher les configurations de journal qui correspondent au filtre en utilisant l'option --show-matching-configs.
<kubernetes_namespace> Facultatif : espace de noms Kubernetes depuis lequel vous désirez acheminer des journaux. Cette option ne s'applique que si vous utilisez le type de journal « container ».
<container_name> Facultatif : nom du conteneur depuis lequel vous voulez filtrer les journaux.
<logging_level> Facultatif : filtre les journaux dont le niveau est inférieur ou égal au niveau spécifié. Les valeurs admises, par ordre canonique, sont : fatal, error, warn/warning, info, debug et trace. Par exemple, si vous avez filtré les journaux au niveau info, les niveaux debug et trace sont également filtrés. Remarque: vous ne pouvez utiliser cette option que si les messages de journal sont au format JSON et contiennent un champ « level ». Pour afficher vos messages au format JSON, ajoutez l'option « --output json » à la commande.
<message> Facultatif : filtre les journaux qui contiennent un message particulier écrit sous forme d'expression régulière.
<filter_ID> Facultatif : ID du filtre de journal.
--show-matching-configs Facultatif : affiche les configurations de journalisation concernant chaque filtre.
--all Facultatif : supprimez tous vos filtres de transfert de journal.
  1. Créez un filtre de journalisation.

    ibmcloud ks logging filter create --cluster CLUSTER_NAME_OR_ID --type LOG_TYPE --logging-configs CONFIGS --namespace KUBERNETES_NAMESPACE --container CONTAINER_NAME --level LOGGING_LEVEL --regex-message MESSAGE
    
  2. Affichez le filtre de journal que vous avez créé.

    ibmcloud ks logging filter get --cluster CLUSTER_NAME_OR_ID --id FILTER_ID --show-matching-configs
    
  3. Mettez à jour le filtre de journal que vous avez créé.

    ibmcloud ks logging filter update --cluster CLUSTER_NAME_OR_ID --id FILTER_ID --type SERVER_TYPE --logging-configs CONFIGS --namespace KUBERNETES_NAMESPACE --container CONTAINER_NAME --level LOGGING_LEVEL --regex-message MESSAGE
    
  4. Supprimez un filtre de journal que vous avez créé.

    ibmcloud ks logging filter rm --cluster CLUSTER_NAME_OR_ID --id FILTER_ID [--all]
    

Vérification, mise à jour et suppression de l'acheminement des journaux

Vérification de l'acheminement des journaux

Vous pouvez vérifier si votre configuration est définie correctement de l'une des deux manières suivantes :

  • Pour répertorier toutes les configurations de journalisation d'un cluster :
    ibmcloud ks logging config get --cluster CLUSTER_NAME_OR_ID
    
  • Pour répertorier les configurations de journalisation d'un seul type de source de journal :
    ibmcloud ks logging config get --cluster CLUSTER_NAME_OR_ID --logsource SOURCE
    

Mise à jour de l'acheminement des journaux

Vous pouvez mettre à jour une configuration de consignation que vous avez déjà créée :

ibmcloud ks logging config update --cluster CLUSTER_NAME_OR_ID --id LOG_CONFIG_ID --namespace NAMESPACE --type SERVER_TYPE --syslog-protocol PROTOCOL --logsource SOURCE --hostname HOSTNAME_OR_INGESTION_URL --port PORT --app-containers CONTAINER1,2 --app-paths PATHS_TO_LOGS

Suppression de l'acheminement des journaux

Vous pouvez arrêter de transférer des journaux en supprimant une ou toutes les configurations de journalisation d'un cluster:

  • Pour supprimer une configuration de journalisation :
    ibmcloud ks logging config rm --cluster CLUSTER_NAME_OR_ID --id LOG_CONFIG_ID
    
  • Pour supprimer toutes les configurations de journalisation d'un espace de noms :
    ibmcloud ks logging config rm --cluster MY_CLUSTER --namespace KUBERNETES_NAMESPACE