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.
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.
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 sortieelasticsearch
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 sortiefluentForward
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 sortiesyslog
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 sortiekafka
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 sortiedefault
, vous recevez un message d'erreur car la sortiedefault
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 projetsopenshift*
,kube*
, oudefault
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ètreoutputRef
.- 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 sortiedefault
. -
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
etaudit
, mais que vous ne spécifiez pas de pipeline pour le typeinfrastructure
, les journauxinfrastructure
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 êtreinstance
. - 2
- L'espace de noms pour le CR
ClusterLogForwarder
doit êtreopenshift-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 exempleaudit
. -
outputRefs
est le nom de la sortie à utiliser, dans cet exempleelasticsearch-secure
pour transmettre à l'instance Elasticsearch sécurisée etdefault
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 champstructured
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
estdefault
. - 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 exempleapplication
. -
outputRefs
est le nom de la sortie à utiliser. - Facultatif : Chaîne. Une ou plusieurs étiquettes à ajouter aux journaux.
-
L'adresse
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écessitetls.key
. -
tls.key
(chaîne) Nom de fichier contenant la clé privée permettant de déverrouiller le certificat du client. Nécessitetls.crt
. -
passphrase
: (chaîne) Phrase de passe pour décoder une clé privée TLS encodée. Nécessitetls.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. Requiertpassword
. -
password
: (chaîne) Mot de passe d'authentification. Requiertusername
.
-
- 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éssasl.
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>
Les secrets génériques ou opaques sont recommandés pour de meilleurs résultats.