Chapitre 10. Transférer les journaux vers des systèmes de journalisation tiers externes


Par défaut, le sous-système de journalisation envoie les journaux des conteneurs et de l'infrastructure au magasin de journaux interne par défaut défini dans la ressource personnalisée ClusterLogging. Cependant, il n'envoie pas les journaux d'audit au magasin interne car il ne fournit pas de stockage sécurisé. Si cette configuration par défaut répond à vos besoins, vous n'avez pas besoin de configurer le Cluster Log Forwarder.

Pour envoyer des logs à d'autres agrégateurs de logs, vous utilisez l'API OpenShift Container Platform Cluster Log Forwarder. Cette API vous permet d'envoyer des journaux de conteneurs, d'infrastructure et d'audit à des points d'extrémité spécifiques à l'intérieur ou à l'extérieur de votre cluster. En outre, vous pouvez envoyer différents types de journaux à divers systèmes afin que différentes personnes puissent accéder à chaque type. Vous pouvez également activer la prise en charge de Transport Layer Security (TLS) pour envoyer les journaux en toute sécurité, selon les besoins de votre organisation.

Note

Pour envoyer les journaux d'audit au magasin de journaux Elasticsearch interne par défaut, utilisez le Cluster Log Forwarder comme décrit dans Transférer les journaux d'audit vers le magasin de journaux.

Lorsque vous transmettez des journaux en externe, le sous-système de journalisation crée ou modifie une carte de configuration Fluentd pour envoyer des journaux en utilisant les protocoles que vous souhaitez. Vous êtes responsable de la configuration du protocole sur l'agrégateur de logs externe.

Important

Vous ne pouvez pas utiliser les méthodes de carte de configuration et le Cluster Log Forwarder dans le même cluster.

10.1. À propos de la transmission des journaux à des systèmes tiers

Pour envoyer des journaux à des points d'extrémité spécifiques à l'intérieur et à l'extérieur de votre cluster OpenShift Container Platform, vous spécifiez une combinaison de outputs et pipelines dans une ressource personnalisée (CR) ClusterLogForwarder. Vous pouvez également utiliser inputs pour transmettre les journaux d'application associés à un projet spécifique à un point de terminaison. L'authentification est fournie par un objet Kubernetes Secret.

output

La destination des données d'enregistrement que vous définissez, ou l'endroit où vous souhaitez que les enregistrements soient envoyés. Une sortie peut être de l'un des types suivants :

  • elasticsearch. Une instance Elasticsearch externe. La sortie elasticsearch peut utiliser une connexion TLS.
  • fluentdForward. Une solution externe d'agrégation de logs qui supporte Fluentd. Cette option utilise les protocoles Fluentd forward. La sortie fluentForward peut utiliser une connexion TCP ou TLS et prend en charge l'authentification par clé partagée en fournissant un champ shared_key dans un secret. L'authentification par clé partagée peut être utilisée avec ou sans TLS.
  • syslog. Une solution externe d'agrégation de journaux qui prend en charge les protocoles syslog RFC3164 ou RFC5424. La sortie syslog peut utiliser une connexion UDP, TCP ou TLS.
  • cloudwatch. Amazon CloudWatch, un service de surveillance et de stockage de journaux hébergé par Amazon Web Services (AWS).
  • loki. Loki, un système d'agrégation de logs horizontalement extensible, hautement disponible et multi-tenant.
  • kafka. Un courtier Kafka. La sortie kafka peut utiliser une connexion TCP ou TLS.
  • default. L'instance interne d'Elasticsearch de OpenShift Container Platform. Vous n'êtes pas obligé de configurer la sortie par défaut. Si vous configurez une sortie default, vous recevez un message d'erreur car la sortie default est réservée à Red Hat OpenShift Logging Operator.
pipeline

Définit le routage simple d'un type de journal vers une ou plusieurs sorties, ou les journaux que vous souhaitez envoyer. Les types de journaux sont les suivants

  • application. Journaux des conteneurs générés par les applications utilisateur exécutées dans le cluster, à l'exception des applications de conteneurs d'infrastructure.
  • infrastructure. Journaux de conteneurs provenant de pods qui s'exécutent dans les projets openshift*, kube*, ou default et journaux provenant du système de fichiers du nœud.
  • audit. Journaux d'audit générés par le système d'audit des nœuds, auditd, le serveur API Kubernetes, le serveur API OpenShift et le réseau OVN.

Vous pouvez ajouter des étiquettes aux messages de journaux sortants en utilisant les paires key:value dans le pipeline. Par exemple, vous pouvez ajouter une étiquette aux messages qui sont transmis à d'autres centres de données ou étiqueter les journaux par type. Les étiquettes ajoutées aux objets sont également transmises avec le message de journal.

input

Transfère les journaux d'application associés à un projet spécifique vers un pipeline.

Dans le pipeline, vous définissez les types de journaux à transférer à l'aide d'un paramètre inputRef et l'endroit où transférer les journaux à l'aide d'un paramètre outputRef.

Secret
Un site key:value map qui contient des données confidentielles telles que des informations d'identification de l'utilisateur.

Il convient de noter ce qui suit :

  • Si un objet CR ClusterLogForwarder existe, les journaux ne sont pas transmis à l'instance Elasticsearch par défaut, sauf s'il existe un pipeline avec la sortie default.
  • Par défaut, le sous-système de journalisation envoie les journaux des conteneurs et de l'infrastructure au magasin de journaux Elasticsearch interne par défaut, défini dans la ressource personnalisée ClusterLogging. Cependant, il n'envoie pas les journaux d'audit au magasin interne car il ne fournit pas de stockage sécurisé. Si cette configuration par défaut répond à vos besoins, ne configurez pas l'API Log Forwarding.
  • Si vous ne définissez pas de pipeline pour un type de journal, les journaux des types non définis sont abandonnés. Par exemple, si vous spécifiez un pipeline pour les types application et audit, mais que vous ne spécifiez pas de pipeline pour le type infrastructure, les journaux infrastructure sont abandonnés.
  • Vous pouvez utiliser plusieurs types de sorties dans la ressource personnalisée (CR) ClusterLogForwarder pour envoyer des journaux à des serveurs qui prennent en charge différents protocoles.
  • L'instance interne d'OpenShift Container Platform Elasticsearch ne fournit pas de stockage sécurisé pour les journaux d'audit. Nous vous recommandons de vous assurer que le système vers lequel vous transmettez les journaux d'audit est conforme aux réglementations de votre organisation et de votre gouvernement et qu'il est correctement sécurisé. Le sous-système de journalisation n'est pas conforme à ces réglementations.

L'exemple suivant transfère les journaux d'audit vers une instance Elasticsearch externe sécurisée, les journaux d'infrastructure vers une instance Elasticsearch externe non sécurisée, les journaux d'application vers un courtier Kafka et les journaux d'application du projet my-apps-logs vers l'instance Elasticsearch interne.

Exemples de sorties et de pipelines de transfert de logs

apiVersion: "logging.openshift.io/v1"
kind: ClusterLogForwarder
metadata:
  name: instance 1
  namespace: openshift-logging 2
spec:
  outputs:
   - name: elasticsearch-secure 3
     type: "elasticsearch"
     url: https://elasticsearch.secure.com:9200
     secret:
        name: elasticsearch
   - name: elasticsearch-insecure 4
     type: "elasticsearch"
     url: http://elasticsearch.insecure.com:9200
   - name: kafka-app 5
     type: "kafka"
     url: tls://kafka.secure.com:9093/app-topic
  inputs: 6
   - name: my-app-logs
     application:
        namespaces:
        - my-project
  pipelines:
   - name: audit-logs 7
     inputRefs:
      - audit
     outputRefs:
      - elasticsearch-secure
      - default
     parse: json 8
     labels:
       secure: "true" 9
       datacenter: "east"
   - name: infrastructure-logs 10
     inputRefs:
      - infrastructure
     outputRefs:
      - elasticsearch-insecure
     labels:
       datacenter: "west"
   - name: my-app 11
     inputRefs:
      - my-app-logs
     outputRefs:
      - default
   - inputRefs: 12
      - application
     outputRefs:
      - kafka-app
     labels:
       datacenter: "south"

1
Le nom du CR ClusterLogForwarder doit être instance.
2
L'espace de noms pour le CR ClusterLogForwarder doit être openshift-logging.
3
Configuration pour une sortie sécurisée d'Elasticsearch utilisant un secret avec une URL sécurisée.
  • Un nom pour décrire la sortie.
  • Le type de sortie : elasticsearch.
  • L'URL et le port sécurisés de l'instance Elasticsearch sous la forme d'une URL absolue valide, y compris le préfixe.
  • Le secret requis par le point final pour la communication TLS. Le secret doit exister dans le projet openshift-logging.
4
Configuration pour une sortie Elasticsearch non sécurisée :
  • Un nom pour décrire la sortie.
  • Le type de sortie : elasticsearch.
  • L'URL et le port non sécurisés de l'instance Elasticsearch sous la forme d'une URL absolue valide, y compris le préfixe.
5
Configuration d'une sortie Kafka utilisant une communication TLS authentifiée par le client via une URL sécurisée
  • Un nom pour décrire la sortie.
  • Le type de sortie : kafka.
  • Spécifiez l'URL et le port du courtier Kafka sous la forme d'une URL absolue valide, y compris le préfixe.
6
Configuration d'une entrée pour filtrer les journaux d'application de l'espace de noms my-project.
7
Configuration d'un pipeline pour l'envoi des journaux d'audit à l'instance Elasticsearch externe sécurisée :
  • Un nom pour décrire le pipeline.
  • L'adresse inputRefs est le type de journal, dans cet exemple audit.
  • outputRefs est le nom de la sortie à utiliser, dans cet exemple elasticsearch-secure pour transmettre à l'instance Elasticsearch sécurisée et default pour transmettre à l'instance Elasticsearch interne.
  • Facultatif : Étiquettes à ajouter aux journaux.
8
Facultatif : Indiquez si les entrées de log JSON structurées doivent être transmises en tant qu'objets JSON dans le champ structured. L'entrée de log doit contenir du JSON structuré valide ; sinon, OpenShift Logging supprime le champ structured et envoie l'entrée de log à l'index par défaut, app-00000x.
9
Facultatif : Chaîne. Une ou plusieurs étiquettes à ajouter aux journaux. Citez des valeurs comme "true" pour qu'elles soient reconnues comme des chaînes de caractères et non comme des booléens.
10
Configuration d'un pipeline pour l'envoi des journaux d'infrastructure à l'instance Elasticsearch externe non sécurisée.
11
Configuration d'un pipeline pour l'envoi des logs du projet my-project vers l'instance Elasticsearch interne.
  • Un nom pour décrire le pipeline.
  • Le site inputRefs est une entrée spécifique : my-app-logs.
  • Le site outputRefs est default.
  • Facultatif : Chaîne. Une ou plusieurs étiquettes à ajouter aux journaux.
12
Configuration d'un pipeline pour envoyer des logs au courtier Kafka, sans nom de pipeline :
  • L'adresse inputRefs est le type de journal, dans cet exemple application.
  • outputRefs est le nom de la sortie à utiliser.
  • Facultatif : Chaîne. Une ou plusieurs étiquettes à ajouter aux journaux.

Gestion des journaux Fluentd lorsque l'agrégateur de journaux externe n'est pas disponible

Si votre agrégateur de logs externe devient indisponible et ne peut pas recevoir les logs, Fluentd continue à collecter les logs et les stocke dans un tampon. Lorsque l'agrégateur de logs devient disponible, la transmission des logs reprend, y compris les logs mis en mémoire tampon. Si le tampon se remplit complètement, Fluentd arrête de collecter les logs. OpenShift Container Platform fait tourner les logs et les supprime. Vous ne pouvez pas ajuster la taille du tampon ou ajouter une revendication de volume persistant (PVC) à l'ensemble de démon Fluentd ou aux pods.

Clés d'autorisation prises en charge

Les types de clés les plus courants sont fournis ici. Certains types de sortie prennent en charge des clés spécialisées supplémentaires, documentées par le champ de configuration spécifique à la sortie. Toutes les clés secrètes sont facultatives. Activez les fonctions de sécurité que vous souhaitez en définissant les clés correspondantes. Vous êtes responsable de la création et de la maintenance de toutes les configurations supplémentaires que les destinations externes pourraient exiger, telles que les clés et les secrets, les comptes de service, les ouvertures de port ou la configuration globale du proxy. Open Shift Logging n'essaiera pas de vérifier une incompatibilité entre les combinaisons d'autorisation.

Sécurité de la couche transport (TLS)

L'utilisation d'une URL TLS ('http://...' ou 'ssl://...') sans secret permet une authentification TLS de base côté serveur. Des fonctions TLS supplémentaires sont activées en incluant un secret et en définissant les champs facultatifs suivants :

  • tls.crt: (chaîne) Nom de fichier contenant un certificat client. Permet l'authentification mutuelle. Nécessite tls.key.
  • tls.key(chaîne) Nom de fichier contenant la clé privée permettant de déverrouiller le certificat du client. Nécessite tls.crt.
  • passphrase: (chaîne) Phrase de passe pour décoder une clé privée TLS encodée. Nécessite tls.key.
  • ca-bundle.crt(chaîne) Nom de fichier d'une autorité de certification cliente pour l'authentification du serveur.
Nom d'utilisateur et mot de passe
  • username: (chaîne) Nom d'utilisateur de l'authentification. Requiert password.
  • password: (chaîne) Mot de passe d'authentification. Requiert username.
Couche de sécurité d'authentification simple (SASL)
  • sasl.enable (booléen) Active ou désactive explicitement SASL. S'il est absent, le SASL est automatiquement activé lorsque l'une des autres clés sasl. est activée.
  • sasl.mechanisms(tableau) Liste des noms de mécanismes SASL autorisés. S'ils sont absents ou vides, les valeurs par défaut du système sont utilisées.
  • sasl.allow-insecure: (booléen) Autorise les mécanismes qui envoient des mots de passe en texte clair. La valeur par défaut est false.

10.1.1. Création d'un secret

Vous pouvez créer un secret dans le répertoire qui contient vos fichiers de certificats et de clés à l'aide de la commande suivante :

$ oc create secret generic -n openshift-logging <my-secret> \
 --from-file=tls.key=<your_key_file>
 --from-file=tls.crt=<your_crt_file>
 --from-file=ca-bundle.crt=<your_bundle_file>
 --from-literal=username=<your_username>
 --from-literal=password=<your_password>
Note

Les secrets génériques ou opaques sont recommandés pour de meilleurs résultats.

Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.