9.4. Configuration du transfert de journaux


Dans un déploiement de journalisation, les journaux de conteneurs et d’infrastructures sont transférés au log store interne défini dans la ressource personnalisée ClusterLogging (CR) par défaut.

Les journaux d’audit ne sont pas transmis au log store interne par défaut, car cela ne fournit pas de stockage sécurisé. Il vous incombe de vous assurer que le système vers lequel vous transmettez les journaux d’audit est conforme à vos réglementations organisationnelles et gouvernementales et qu’il est correctement sécurisé.

Lorsque cette configuration par défaut répond à vos besoins, vous n’avez pas besoin de configurer un ClusterLogForwarder CR. En cas d’existence d’un ClusterLogForwarder CR, les journaux ne sont pas transmis au log store interne à moins qu’un pipeline ne soit défini qui contient la sortie par défaut.

Afin d’envoyer des journaux à des points de terminaison spécifiques à l’intérieur et à l’extérieur de votre service OpenShift Red Hat sur le cluster AWS, vous spécifiez une combinaison de sorties et de pipelines dans une ressource personnalisée ClusterLogForwarder (CR). Il est également possible d’utiliser des entrées pour transmettre les journaux d’applications associés à un projet spécifique vers un point de terminaison. L’authentification est fournie par un objet Kubernetes Secret.

gazoduc

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 l’un des suivants:

  • demande. Journaux de conteneurs générés par les applications utilisateur s’exécutant dans le cluster, à l’exception des applications de conteneurs d’infrastructure.
  • C) Infrastructures. Journaux de conteneurs à partir des pods qui s’exécutent dans les projets openshift*, kube* ou par défaut et journaux de journal provenant du système de fichiers de nœuds.
  • audit. Journaux d’audit générés par le système d’audit des nœuds, audité, serveur API Kubernetes, serveur API OpenShift et réseau OVN.

Il est possible d’ajouter des étiquettes aux messages de log sortants en utilisant des paires key:value dans le pipeline. À titre d’exemple, vous pouvez ajouter une étiquette aux messages qui sont transférés à d’autres centres de données ou étiqueter les journaux par type. Les étiquettes qui sont ajoutées aux objets sont également transmises avec le message journal.

entrée

Transmet les journaux d’application associés à un projet spécifique à un pipeline.

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

Le secret
Carte key:value qui contient des données confidentielles telles que les identifiants d’utilisateur.

À noter ce qui suit:

  • Lorsque vous ne définissez pas de pipeline pour un type de journal, les journaux des types non définis sont supprimés. À titre d’exemple, si vous spécifiez un pipeline pour les types d’application et d’audit, mais que vous ne spécifiez pas un pipeline pour le type d’infrastructure, les journaux d’infrastructure sont supprimés.
  • Il est possible d’utiliser plusieurs types de sorties dans la ressource personnalisée ClusterLogForwarder (CR) pour envoyer des journaux à des serveurs prenant en charge différents protocoles.

L’exemple suivant transmet les journaux d’audit à une instance externe sécurisée Elasticsearch, les journaux d’infrastructure à une instance externe Elasticsearch non sécurisée, les journaux des applications à un courtier Kafka et les journaux d’applications du projet my-apps-logs à l’instance interne Elasticsearch.

Exemple de sortie de journal et de pipelines

apiVersion: "logging.openshift.io/v1"
kind: ClusterLogForwarder
metadata:
  name: <log_forwarder_name> 
1

  namespace: <log_forwarder_namespace> 
2

spec:
  serviceAccountName: <service_account_name> 
3

  outputs:
   - name: elasticsearch-secure 
4

     type: "elasticsearch"
     url: https://elasticsearch.secure.com:9200
     secret:
        name: elasticsearch
   - name: elasticsearch-insecure 
5

     type: "elasticsearch"
     url: http://elasticsearch.insecure.com:9200
   - name: kafka-app 
6

     type: "kafka"
     url: tls://kafka.secure.com:9093/app-topic
  inputs: 
7

   - name: my-app-logs
     application:
        namespaces:
        - my-project
  pipelines:
   - name: audit-logs 
8

     inputRefs:
      - audit
     outputRefs:
      - elasticsearch-secure
      - default
     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"
Copy to Clipboard Toggle word wrap

1
Dans les implémentations antérieures, le nom CR doit être instance. Dans les implémentations de transbordeur de journaux multiples, vous pouvez utiliser n’importe quel nom.
2
Dans les implémentations héritées, l’espace de noms CR doit être ouvert-logging. Dans les implémentations de transfert de journaux multiples, vous pouvez utiliser n’importe quel espace de noms.
3
Le nom de votre compte de service. Le compte de service n’est requis que dans les implémentations de transbordeur de journaux multiples si l’expéditeur de journaux n’est pas déployé dans l’espace de noms openshift-logging.
4
Configuration pour une sortie Elasticsearch sécurisée à l’aide d’un secret avec une URL sécurisée.
  • Il s’agit d’un nom pour décrire la sortie.
  • Le type de sortie: la recherche élastique.
  • L’URL sécurisée et le port de l’instance Elasticsearch en tant qu’URL absolue valide, y compris le préfixe.
  • Le secret requis par le point de terminaison pour la communication TLS. Le secret doit exister dans le projet openshift-logging.
5
Configuration pour une sortie Elasticsearch non sécurisée:
  • Il s’agit d’un nom pour décrire la sortie.
  • Le type de sortie: la recherche élastique.
  • L’URL et le port non sécurisés de l’instance Elasticsearch en tant qu’URL absolue valide, y compris le préfixe.
6
Configuration d’une sortie Kafka à l’aide d’une communication TLS authentifiée par le client via une URL sécurisée:
  • Il s’agit d’un nom pour décrire la sortie.
  • Le type de sortie: kafka.
  • Indiquez l’URL et le port du courtier Kafka comme URL absolue valide, y compris le préfixe.
7
Configuration pour une entrée pour filtrer les journaux des applications à partir de l’espace de noms de mon projet.
8
Configuration d’un pipeline pour envoyer des journaux d’audit à l’instance externe sécurisée Elasticsearch:
  • C’est un nom pour décrire le pipeline.
  • L’entréeRefs est le type de journal, dans cet exemple d’audit.
  • La sortieRefs est le nom de la sortie à utiliser, dans cet exemple élastique-sécurisé pour transmettre à l’instance sécurisée Elasticsearch et par défaut pour transmettre à l’instance interne Elasticsearch.
  • Facultatif: Étiquettes à ajouter aux journaux.
9
Facultatif: String. Il y a une ou plusieurs étiquettes à ajouter aux journaux. Citez des valeurs comme "vrai" afin qu’elles soient reconnues comme des valeurs de chaîne, et non comme un booléen.
10
Configuration d’un pipeline pour envoyer des journaux d’infrastructure à l’instance externe Elasticsearch non sécurisée.
11
Configuration d’un pipeline pour envoyer des journaux du projet de mon projet à l’instance interne Elasticsearch.
  • C’est un nom pour décrire le pipeline.
  • L’entréeRefs est une entrée spécifique: my-app-logs.
  • La sortieRefs est par défaut.
  • Facultatif: String. Il y a une ou plusieurs étiquettes à ajouter aux journaux.
12
Configuration d’un pipeline pour envoyer des journaux au courtier Kafka, sans nom de pipeline:
  • L’entréeRefs est le type de journal, dans cet exemple d’application.
  • La sortieRefs est le nom de la sortie à utiliser.
  • Facultatif: String. Il y a une ou plusieurs étiquettes à ajouter aux journaux.
Gestion du journal Fluentd lorsque l’agrégateur de journal externe n’est pas disponible

Lorsque votre agrégateur de journalisation externe devient indisponible et ne peut pas recevoir de journaux, Fluentd continue de collecter des journaux et de les stocker dans un tampon. Lorsque l’agrégateur de journal devient disponible, le transfert de journaux reprend, y compris les journaux tamponnés. Lorsque le tampon se remplit complètement, Fluentd cesse de collecter les journaux. Le service Red Hat OpenShift sur AWS tourne les journaux et les supprime. Il n’est pas possible d’ajuster la taille du tampon ou d’ajouter une revendication de volume persistant (PVC) à l’ensemble ou aux pods Fluentd daemon.

Clés d’autorisation prises en charge

Les types de clés communs sont fournis ici. Certains types de sortie prennent en charge d’autres clés spécialisées, documentées avec le champ de configuration spécifique à la sortie. Les clés secrètes sont facultatives. Activez les fonctions de sécurité que vous souhaitez en définissant les clés pertinentes. Il vous incombe de créer et de maintenir toute configuration supplémentaire que des destinations externes pourraient nécessiter, telles que des clés et des secrets, des comptes de service, des ouvertures de ports ou une configuration proxy globale. L’enregistrement de décalage ouvert ne tentera pas de vérifier une inadéquation entre les combinaisons d’autorisation.

La sécurité des couches de transport (TLS)

L’utilisation d’une URL TLS (http://... ou ssl://...) sans secret permet une authentification basique côté serveur TLS. Des fonctionnalités TLS supplémentaires sont activées en incluant un secret et en définissant les champs optionnels suivants:

  • phrase de passe: (string) Passphrase pour décoder une clé privée TLS codée. J’ai besoin de tls.key.
  • ca-bundle.crt: (string) Nom du fichier d’une CA client pour l’authentification du serveur.
Nom d’utilisateur et mot de passe
  • nom d’utilisateur: (string) Nom d’utilisateur d’authentification. Demande un mot de passe.
  • mot de passe: (string) Mot de passe d’authentification. Nécessite un nom d’utilisateur.
Couche de sécurité d’authentification simple (SASL)
  • activez ou désactivez explicitement SASL.enable (boolean). En cas de manque, SASL est automatiquement activé lorsque l’une des autres touches sasl.
  • liste des noms de mécanisme SASL.Mécanismes: (array) Liste des noms de mécanisme SASL autorisés. En cas de manque ou de vide, le système par défaut est utilisé.
  • (boolean) Autoriser les mécanismes qui envoient des mots de passe en texte clair. Défaut à false.

9.4.1.1. Créer un secret

Il est possible de créer un secret dans le répertoire qui contient votre certificat et vos fichiers clés à l’aide de la commande suivante:

$ oc create secret generic -n <namespace> <secret_name> \
  --from-file=ca-bundle.crt=<your_bundle_file> \
  --from-literal=username=<your_username> \
  --from-literal=password=<your_password>
Copy to Clipboard Toggle word wrap
Note

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

9.4.2. Création d’un transmetteur de journaux

Afin de créer un transmetteur de journaux, vous devez créer un ClusterLogForwarder CR qui spécifie les types d’entrée de journal que le compte de service peut collecter. Il est également possible de spécifier les sorties vers lesquelles les journaux peuvent être transférés. Lorsque vous utilisez la fonction d’expéditeur multi log, vous devez également consulter le compte de service dans le ClusterLogForwarder CR.

Dans n’importe quel nom, vous pouvez créer des ressources personnalisées ClusterLogForwarder (CRs) dans n’importe quel espace de noms. Lorsque vous utilisez une implémentation héritée, le ClusterLogForwarder CR doit être nommé instance, et doit être créé dans l’espace de noms openshift-logging.

Important

Il vous faut des autorisations d’administrateur pour l’espace de noms où vous créez le ClusterLogForwarder CR.

Exemple de ressource ClusterLogForwarder

apiVersion: logging.openshift.io/v1
kind: ClusterLogForwarder
metadata:
  name: <log_forwarder_name> 
1

  namespace: <log_forwarder_namespace> 
2

spec:
  serviceAccountName: <service_account_name> 
3

  pipelines:
   - inputRefs:
     - <log_type> 
4

     outputRefs:
     - <output_name> 
5

  outputs:
  - name: <output_name> 
6

    type: <output_type> 
7

    url: <log_output_url> 
8

# ...
Copy to Clipboard Toggle word wrap

1
Dans les implémentations antérieures, le nom CR doit être instance. Dans les implémentations de transbordeur de journaux multiples, vous pouvez utiliser n’importe quel nom.
2
Dans les implémentations héritées, l’espace de noms CR doit être ouvert-logging. Dans les implémentations de transfert de journaux multiples, vous pouvez utiliser n’importe quel espace de noms.
3
Le nom de votre compte de service. Le compte de service n’est requis que dans les implémentations de transbordeur de journaux multiples si l’expéditeur de journaux n’est pas déployé dans l’espace de noms openshift-logging.
4
Les types de journaux qui sont collectés. La valeur de ce champ peut être l’audit pour les journaux d’audit, les applications pour les journaux d’applications, l’infrastructure pour les journaux d’infrastructure ou une entrée nommée qui a été définie pour votre application.
5 7
Le type de sortie vers lequel vous souhaitez transférer les journaux. La valeur de ce champ peut être par défaut, loki, kafka, élastique, fluentdForward, syslog ou cloudwatch.
Note

Le type de sortie par défaut n’est pas pris en charge dans les implémentations mutli log forwarder.

6
Le nom de la sortie vers laquelle vous souhaitez transférer les journaux.
8
L’URL de la sortie vers laquelle vous souhaitez transférer les journaux.

9.4.3. Charge utile du journal de réglage et livraison

Dans l’enregistrement des versions 5.9 et plus récentes, la spécification de réglage de la ressource personnalisée ClusterLogForwarder (CR) fournit un moyen de configurer votre déploiement pour prioriser le débit ou la durabilité des journaux.

Ainsi, si vous devez réduire la possibilité de perte de journal lorsque le collecteur redémarre, ou si vous avez besoin de messages de journal recueillis pour survivre à un redémarrage du collecteur pour soutenir les mandats réglementaires, vous pouvez régler votre déploiement pour prioriser la durabilité des journaux. Lorsque vous utilisez des sorties qui ont des limites strictes sur la taille des lots qu’ils peuvent recevoir, vous voudrez peut-être régler votre déploiement pour prioriser le débit des journaux.

Important

Afin d’utiliser cette fonctionnalité, votre déploiement de journalisation doit être configuré pour utiliser le collecteur vectoriel. La spécification de réglage dans le ClusterLogForwarder CR n’est pas prise en charge lors de l’utilisation du collecteur Fluentd.

L’exemple suivant montre les options ClusterLogForwarder CR que vous pouvez modifier pour régler les sorties de l’expéditeur journal:

Exemple ClusterLogForwarder CR options de réglage

apiVersion: logging.openshift.io/v1
kind: ClusterLogForwarder
metadata:
# ...
spec:
  tuning:
    delivery: AtLeastOnce 
1

    compression: none 
2

    maxWrite: <integer> 
3

    minRetryDuration: 1s 
4

    maxRetryDuration: 1s 
5

# ...
Copy to Clipboard Toggle word wrap

1
Indiquez le mode de livraison pour le transfert de journaux.
  • La livraison AtLeastOnce signifie que si l’expéditeur de journaux se bloque ou est redémarré, tous les journaux qui ont été lus avant le crash mais qui n’ont pas été envoyés à leur destination sont réenvoyés. Il est possible que certains journaux soient dupliqués après un crash.
  • La livraison AtMostOnce signifie que l’expéditeur de journaux ne fait aucun effort pour récupérer les journaux perdus lors d’un accident. Ce mode donne un meilleur débit, mais peut entraîner une plus grande perte de log.
2
En spécifiant une configuration de compression, les données sont compressées avant qu’elles ne soient envoyées sur le réseau. Il est à noter que tous les types de sortie ne supportent pas la compression, et si le type de compression spécifié n’est pas pris en charge par la sortie, cela entraîne une erreur. Les valeurs possibles pour cette configuration ne sont pas pour aucune compression, gzip, snappy, zlib ou zstd. la compression lz4 est également disponible si vous utilisez une sortie Kafka. Consultez le tableau « Types de compression soutenus pour les sorties de réglage » pour plus d’informations.
3
Indique une limite pour la charge utile maximale d’une seule opération d’envoi à la sortie.
4
Indique une durée minimale d’attente entre les tentatives avant de réessayer la livraison après un échec. Cette valeur est une chaîne de caractères, et peut être spécifiée comme millisecondes (ms), secondes (s) ou minutes (m).
5
Indique une durée maximale d’attente entre les tentatives avant de réessayer la livraison après un échec. Cette valeur est une chaîne de caractères, et peut être spécifiée comme millisecondes (ms), secondes (s) ou minutes (m).
Expand
Tableau 9.9. Les types de compression pris en charge pour les sorties de réglage
Algorithme de compressionÀ propos de SplunkAmazon CloudwatchElasticsearch 8LokiStackApache KafkaHTTPLe syslogGoogle CloudLa surveillance Microsoft Azure

gzip

A) X

A) X

A) X

A) X

 

A) X

   

C’est un clin d’œil

 

A) X

 

A) X

A) X

A) X

   

le zlib

 

A) X

A) X

  

A) X

   

le zstd

 

A) X

  

A) X

A) X

   

lz4

    

A) X

    

9.4.4. Activer la détection d’exceptions multilignes

Active la détection d’erreurs multilignes des journaux de conteneurs.

Avertissement

L’activation de cette fonctionnalité pourrait avoir des répercussions sur les performances et peut nécessiter des ressources informatiques supplémentaires ou des solutions de journalisation alternatives.

Les analyseurs de journaux identifient souvent de manière incorrecte des lignes distinctes de la même exception que des exceptions distinctes. Cela conduit à des entrées de journal supplémentaires et une vue incomplète ou inexacte des informations tracées.

Exemple d’exception Java

java.lang.NullPointerException: Cannot invoke "String.toString()" because "<param1>" is null
    at testjava.Main.handle(Main.java:47)
    at testjava.Main.printMe(Main.java:19)
    at testjava.Main.main(Main.java:10)
Copy to Clipboard Toggle word wrap

  • Afin de permettre à l’enregistrement de détecter des exceptions multilignes et de les réassembler en une seule entrée de journal, assurez-vous que la ressource personnalisée ClusterLogForwarder (CR) contient un champ DétecterMultilineErrors, avec une valeur de true.

Exemple ClusterLogForwarder CR

apiVersion: logging.openshift.io/v1
kind: ClusterLogForwarder
metadata:
  name: instance
  namespace: openshift-logging
spec:
  pipelines:
    - name: my-app-logs
      inputRefs:
        - application
      outputRefs:
        - default
      detectMultilineErrors: true
Copy to Clipboard Toggle word wrap

9.4.4.1. Détails

Lorsque les messages de log apparaissent comme une séquence consécutive formant une trace de pile d’exception, ils sont combinés en un seul enregistrement de journal unifié. Le contenu du premier message journal est remplacé par le contenu concaténé de tous les champs de message de la séquence.

Expand
Tableau 9.10. Langues prises en charge par collectionneur
LangueFluentdLe vecteur

Java

JS

♪ Ruby ♪

À propos de Python

Golang

À PROPOS DE PHP

Dart

9.4.4.2. Résolution de problèmes

Lorsqu’elle est activée, la configuration du collecteur inclura une nouvelle section avec type:

Exemple de section de configuration vectorielle

[transforms.detect_exceptions_app-logs]
 type = "detect_exceptions"
 inputs = ["application"]
 languages = ["All"]
 group_by = ["kubernetes.namespace_name","kubernetes.pod_name","kubernetes.container_name"]
 expire_after_ms = 2000
 multiline_flush_interval_ms = 1000
Copy to Clipboard Toggle word wrap

Exemple de section de configuration fluide

<label @MULTILINE_APP_LOGS>
  <match kubernetes.**>
    @type detect_exceptions
    remove_tag_prefix 'kubernetes'
    message message
    force_line_breaks true
    multiline_flush_interval .2
  </match>
</label>
Copy to Clipboard Toggle word wrap

9.4.5. Les journaux de transfert vers Splunk

Il est possible d’envoyer les journaux vers le collecteur d’événements Splunk HTTP (HEC) en plus ou au lieu du service interne Red Hat OpenShift sur AWS log store.

Note

Cette fonctionnalité avec Fluentd n’est pas prise en charge.

Conditions préalables

  • L’opérateur de journalisation de Red Hat OpenShift 5.6 ou supérieur
  • Instance ClusterLogging avec vecteur spécifié comme collecteur
  • Base64 encodée jeton HEC Splunk

Procédure

  1. Créez un secret à l’aide de votre jeton Splunk HEC codé Base64.

    $ oc -n openshift-logging create secret generic vector-splunk-secret --from-literal hecToken=<HEC_Token>
    Copy to Clipboard Toggle word wrap
  2. Créez ou modifiez la ressource personnalisée ClusterLogForwarder (CR) en utilisant le modèle ci-dessous:

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: <log_forwarder_name> 
    1
    
      namespace: <log_forwarder_namespace> 
    2
    
    spec:
      serviceAccountName: <service_account_name> 
    3
    
      outputs:
        - name: splunk-receiver 
    4
    
          secret:
            name: vector-splunk-secret 
    5
    
          type: splunk 
    6
    
          url: <http://your.splunk.hec.url:8088> 
    7
    
      pipelines: 
    8
    
        - inputRefs:
            - application
            - infrastructure
          name: 
    9
    
          outputRefs:
            - splunk-receiver 
    10
    Copy to Clipboard Toggle word wrap
    1
    Dans les implémentations antérieures, le nom CR doit être instance. Dans les implémentations de transbordeur de journaux multiples, vous pouvez utiliser n’importe quel nom.
    2
    Dans les implémentations héritées, l’espace de noms CR doit être ouvert-logging. Dans les implémentations de transfert de journaux multiples, vous pouvez utiliser n’importe quel espace de noms.
    3
    Le nom de votre compte de service. Le compte de service n’est requis que dans les implémentations de transbordeur de journaux multiples si l’expéditeur de journaux n’est pas déployé dans l’espace de noms openshift-logging.
    4
    Indiquez un nom pour la sortie.
    5
    Indiquez le nom du secret qui contient votre jeton HEC.
    6
    Indiquez le type de sortie comme splunk.
    7
    Indiquez l’URL (y compris le port) de votre Splunk HEC.
    8
    Indiquez les types de journaux à transmettre en utilisant le pipeline : application, infrastructure ou vérification.
    9
    Facultatif : Spécifiez un nom pour le pipeline.
    10
    Indiquez le nom de la sortie à utiliser lors de la transmission des journaux avec ce pipeline.

9.4.6. Envoi des journaux sur HTTP

Les journaux de transfert sur HTTP sont pris en charge pour les collecteurs de journaux Fluentd et Vector. Afin d’activer, spécifiez http comme type de sortie dans la ressource personnalisée ClusterLogForwarder (CR).

Procédure

  • Créez ou modifiez le ClusterLogForwarder CR en utilisant le modèle ci-dessous:

    Exemple ClusterLogForwarder CR

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: <log_forwarder_name> 
    1
    
      namespace: <log_forwarder_namespace> 
    2
    
    spec:
      serviceAccountName: <service_account_name> 
    3
    
      outputs:
        - name: httpout-app
          type: http
          url: 
    4
    
          http:
            headers: 
    5
    
              h1: v1
              h2: v2
            method: POST
          secret:
            name: 
    6
    
          tls:
            insecureSkipVerify: 
    7
    
      pipelines:
        - name:
          inputRefs:
            - application
          outputRefs:
            - httpout-app 
    8
    Copy to Clipboard Toggle word wrap

    1
    Dans les implémentations antérieures, le nom CR doit être instance. Dans les implémentations de transbordeur de journaux multiples, vous pouvez utiliser n’importe quel nom.
    2
    Dans les implémentations héritées, l’espace de noms CR doit être ouvert-logging. Dans les implémentations de transfert de journaux multiples, vous pouvez utiliser n’importe quel espace de noms.
    3
    Le nom de votre compte de service. Le compte de service n’est requis que dans les implémentations de transbordeur de journaux multiples si l’expéditeur de journaux n’est pas déployé dans l’espace de noms openshift-logging.
    4
    Adresse de destination pour les journaux.
    5
    En-têtes supplémentaires à envoyer avec l’enregistrement du journal.
    6
    Le nom secret des informations d’identification de destination.
    7
    Les valeurs sont vraies ou fausses.
    8
    Cette valeur devrait être la même que le nom de sortie.

9.4.7. Envoi vers Azure Monitor Logs

Avec l’enregistrement 5.9 et ultérieur, vous pouvez transférer les journaux vers Azure Monitor Logs en plus ou à la place du log store par défaut. Cette fonctionnalité est fournie par l’évier Vector Azure Monitor Logs.

Conditions préalables

  • Il est familier avec la façon d’administrer et de créer une instance ClusterLogging de ressource personnalisée (CR).
  • Il est familier avec la façon d’administrer et de créer une instance ClusterLogForwarder CR.
  • Les spécifications ClusterLogForwarder CR sont bien comprises.
  • Familiarité de base avec les services Azure.
  • Il y a un compte Azure configuré pour l’accès Azure Portal ou Azure CLI.
  • Le fichier Azure Monitor Logs vous permet d’obtenir la clé de sécurité primaire ou secondaire.
  • C’est vous qui avez déterminé les types de journaux à transmettre.

Activer le transfert de journaux vers Azure Monitor Logs via l’API HTTP Data Collector:

Créez un secret avec votre clé partagée:

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
  namespace: openshift-logging
type: Opaque
data:
  shared_key: <your_shared_key> 
1
Copy to Clipboard Toggle word wrap
1
Doit contenir une clé primaire ou secondaire pour l’espace de travail Log Analytics faisant la demande.

Afin d’obtenir une clé partagée, vous pouvez utiliser cette commande dans Azure CLI:

Get-AzOperationalInsightsWorkspaceSharedKey -ResourceGroupName "<resource_name>" -Name "<workspace_name>”
Copy to Clipboard Toggle word wrap

Créez ou modifiez votre ClusterLogForwarder CR en utilisant le modèle correspondant à votre sélection de journal.

Envoyer tous les journaux

apiVersion: "logging.openshift.io/v1"
kind: "ClusterLogForwarder"
metadata:
  name: instance
  namespace: openshift-logging
spec:
  outputs:
  - name: azure-monitor
    type: azureMonitor
    azureMonitor:
      customerId: my-customer-id 
1

      logType: my_log_type 
2

    secret:
       name: my-secret
  pipelines:
  - name: app-pipeline
    inputRefs:
    - application
    outputRefs:
    - azure-monitor
Copy to Clipboard Toggle word wrap

1
Identifiant unique pour l’espace de travail Log Analytics. Champ requis.
2
Azure enregistre le type de données soumises. Il ne peut contenir que des lettres, des chiffres et des accents (_), et ne peut pas dépasser 100 caractères.

Journaux d’applications et d’infrastructures

apiVersion: "logging.openshift.io/v1"
kind: "ClusterLogForwarder"
metadata:
  name: instance
  namespace: openshift-logging
spec:
  outputs:
  - name: azure-monitor-app
    type: azureMonitor
    azureMonitor:
      customerId: my-customer-id
      logType: application_log 
1

    secret:
      name: my-secret
  - name: azure-monitor-infra
    type: azureMonitor
    azureMonitor:
      customerId: my-customer-id
      logType: infra_log #
    secret:
      name: my-secret
  pipelines:
    - name: app-pipeline
      inputRefs:
      - application
      outputRefs:
      - azure-monitor-app
    - name: infra-pipeline
      inputRefs:
      - infrastructure
      outputRefs:
      - azure-monitor-infra
Copy to Clipboard Toggle word wrap

1
Azure enregistre le type de données soumises. Il ne peut contenir que des lettres, des chiffres et des accents (_), et ne peut pas dépasser 100 caractères.

Des options de configuration avancées

apiVersion: "logging.openshift.io/v1"
kind: "ClusterLogForwarder"
metadata:
  name: instance
  namespace: openshift-logging
spec:
  outputs:
  - name: azure-monitor
    type: azureMonitor
    azureMonitor:
      customerId: my-customer-id
      logType: my_log_type
      azureResourceId: "/subscriptions/111111111" 
1

      host: "ods.opinsights.azure.com" 
2

    secret:
       name: my-secret
  pipelines:
   - name: app-pipeline
    inputRefs:
    - application
    outputRefs:
    - azure-monitor
Copy to Clipboard Toggle word wrap

1
ID de ressource de la ressource Azure auxquelles les données doivent être associées. Champ facultatif.
2
Hôte alternatif pour les régions Azure dédiées. Champ facultatif. La valeur par défaut est ods.opinsights.azure.com. La valeur par défaut pour Azure Government est ods.opinsights.azure.us.

Il est possible d’envoyer une copie des journaux de l’application de projets spécifiques à un agrégateur de journaux externe, en plus ou au lieu d’utiliser le log store interne. Il faut également configurer l’agrégateur de journal externe pour recevoir les données de journal de Red Hat OpenShift Service sur AWS.

Afin de configurer les journaux d’applications d’un projet, vous devez créer une ressource personnalisée ClusterLogForwarder (CR) avec au moins une entrée d’un projet, des sorties optionnelles pour d’autres agrégateurs de journaux et des pipelines qui utilisent ces entrées et sorties.

Conditions préalables

  • Il faut avoir un serveur de journalisation configuré pour recevoir les données de journalisation à l’aide du protocole ou du format spécifié.

Procédure

  1. Créer ou modifier un fichier YAML qui définit le ClusterLogForwarder CR:

    Exemple ClusterLogForwarder CR

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: instance 
    1
    
      namespace: openshift-logging 
    2
    
    spec:
      outputs:
       - name: fluentd-server-secure 
    3
    
         type: fluentdForward 
    4
    
         url: 'tls://fluentdserver.security.example.com:24224' 
    5
    
         secret: 
    6
    
            name: fluentd-secret
       - name: fluentd-server-insecure
         type: fluentdForward
         url: 'tcp://fluentdserver.home.example.com:24224'
      inputs: 
    7
    
       - name: my-app-logs
         application:
            namespaces:
            - my-project 
    8
    
      pipelines:
       - name: forward-to-fluentd-insecure 
    9
    
         inputRefs: 
    10
    
         - my-app-logs
         outputRefs: 
    11
    
         - fluentd-server-insecure
         labels:
           project: "my-project" 
    12
    
       - name: forward-to-fluentd-secure 
    13
    
         inputRefs:
         - application 
    14
    
         - audit
         - infrastructure
         outputRefs:
         - fluentd-server-secure
         - default
         labels:
           clusterId: "C1234"
    Copy to Clipboard Toggle word wrap

    1
    Le nom du ClusterLogForwarder CR doit être instance.
    2
    L’espace de noms du ClusterLogForwarder CR doit être ouvert-logging.
    3
    Le nom de la sortie.
    4
    Le type de sortie: recherche élastique, fluentdForward, syslog, ou kafka.
    5
    L’URL et le port de l’agrégateur de journal externe en tant qu’URL absolue valide. Lorsque le proxy à l’échelle du cluster utilisant l’annotation CIDR est activé, la sortie doit être un nom de serveur ou un FQDN, et non une adresse IP.
    6
    En utilisant un préfixe tls, vous devez spécifier le nom du secret requis par le point de terminaison pour la communication TLS. Le secret doit exister dans le projet openshift-logging et avoir des touches tls.crt, tls.key et ca-bundle.crt qui pointent vers les certificats qu’ils représentent.
    7
    La configuration d’une entrée pour filtrer les journaux des applications à partir des projets spécifiés.
    8
    En l’absence d’espace de noms, les journaux sont recueillis dans tous les espaces de noms.
    9
    La configuration du pipeline dirige les journaux d’une entrée nommée vers une sortie nommée. Dans cet exemple, un pipeline nommé forward-to-fluentd-insécurité enregistre des logs d’une entrée nommée my-app-logs à un produit nommé couramment serveur non sécurisé.
    10
    Liste des entrées.
    11
    Le nom de la sortie à utiliser.
    12
    Facultatif: String. Il y a une ou plusieurs étiquettes à ajouter aux journaux.
    13
    Configuration pour qu’un pipeline envoie des journaux à d’autres agrégateurs de journaux.
    • Facultatif : Spécifiez un nom pour le pipeline.
    • Indiquez les types de journaux à transmettre en utilisant le pipeline : application, infrastructure ou vérification.
    • Indiquez le nom de la sortie à utiliser lors de la transmission des journaux avec ce pipeline.
    • Facultatif : Spécifiez la sortie par défaut pour transférer les journaux vers le log store par défaut.
    • Facultatif: String. Il y a une ou plusieurs étiquettes à ajouter aux journaux.
    14
    Les journaux d’applications de tous les espaces de noms sont recueillis lors de l’utilisation de cette configuration.
  2. Appliquez le ClusterLogForwarder CR en exécutant la commande suivante:

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

En tant qu’administrateur de cluster, vous pouvez utiliser les étiquettes de pod Kubernetes pour recueillir des données de log à partir de pods spécifiques et les transmettre à un collecteur de journaux.

Imaginez que vous avez une application composée de pods fonctionnant aux côtés d’autres pods dans divers espaces de noms. Lorsque ces pods ont des étiquettes qui identifient l’application, vous pouvez collecter et afficher leurs données de journal à un collecteur de journaux spécifique.

Afin de spécifier les étiquettes de pod, vous utilisez une ou plusieurs paires de clés-valeur matchLabels. Lorsque vous spécifiez plusieurs paires de clés-valeur, les gousses doivent correspondre à toutes les paires pour être sélectionnées.

Procédure

  1. Créez ou modifiez un fichier YAML qui définit l’objet ClusterLogForwarder CR. Dans le fichier, spécifiez les étiquettes de pod en utilisant des sélecteurs simples basés sur l’égalité sous input[].name.application.selector.matchLabels, comme indiqué dans l’exemple suivant.

    Exemple de fichier ClusterLogForwarder CR YAML

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: <log_forwarder_name> 
    1
    
      namespace: <log_forwarder_namespace> 
    2
    
    spec:
      pipelines:
        - inputRefs: [ myAppLogData ] 
    3
    
          outputRefs: [ default ] 
    4
    
      inputs: 
    5
    
        - name: myAppLogData
          application:
            selector:
              matchLabels: 
    6
    
                environment: production
                app: nginx
            namespaces: 
    7
    
            - app1
            - app2
      outputs: 
    8
    
        - <output_name>
        ...
    Copy to Clipboard Toggle word wrap

    1
    Dans les implémentations antérieures, le nom CR doit être instance. Dans les implémentations de transbordeur de journaux multiples, vous pouvez utiliser n’importe quel nom.
    2
    Dans les implémentations héritées, l’espace de noms CR doit être ouvert-logging. Dans les implémentations de transfert de journaux multiples, vous pouvez utiliser n’importe quel espace de noms.
    3
    Indiquez une ou plusieurs valeurs séparées par des virgules à partir des entrées[].name.
    4
    Indiquez une ou plusieurs valeurs séparées par les virgules des sorties[].
    5
    Définissez une entrée unique[].nom pour chaque application qui a un ensemble unique d’étiquettes de pod.
    6
    Indiquez les paires clés-valeur d’étiquettes de pod dont vous souhaitez recueillir les données de journal. Il faut spécifier à la fois une clé et une valeur, pas seulement une clé. Afin d’être sélectionnés, les gousses doivent correspondre à toutes les paires clé-valeur.
    7
    Facultatif : Spécifiez un ou plusieurs espaces de noms.
    8
    Indiquez une ou plusieurs sorties pour transmettre vos données de journal.
  2. Facultatif: Pour limiter la collecte de données de journal à des espaces de noms spécifiques, utilisez les entrées[].name.application.namespaces, comme indiqué dans l’exemple précédent.
  3. Facultatif: Vous pouvez envoyer des données de log à partir d’applications supplémentaires qui ont des étiquettes de pod différentes vers le même pipeline.

    1. Dans chaque combinaison unique d’étiquettes de pod, créez une section d’entrées supplémentaires similaire à celle affichée.
    2. Actualisez les sélecteurs pour correspondre aux étiquettes de pod de cette application.
    3. Ajoutez la nouvelle valeur d’entrée[].name à inputRefs. À titre d’exemple:

      - inputRefs: [ myAppLogData, myOtherAppLogData ]
      Copy to Clipboard Toggle word wrap
  4. Créer l’objet CR:

    $ oc create -f <file-name>.yaml
    Copy to Clipboard Toggle word wrap

9.4.10. Aperçu du filtre d’audit API

Les serveurs API OpenShift génèrent des événements d’audit pour chaque appel API, en détaillant la demande, la réponse et l’identité du demandeur, ce qui conduit à de grands volumes de données. Le filtre API Audit utilise des règles pour permettre l’exclusion des événements non essentiels et la réduction de la taille des événements, facilitant ainsi une piste d’audit plus gérable. Les règles sont vérifiées dans l’ordre, vérifier les arrêts au premier match. La quantité de données incluses dans un événement est déterminée par la valeur du champ de niveau:

  • Aucun : L’événement est abandonné.
  • Les métadonnées de l’audit sont incluses, les organismes de demande et de réponse sont supprimés.
  • Demande : Les métadonnées d’audit et l’organisme de demande sont inclus, le corps de réponse est supprimé.
  • RequestResponse: Toutes les données sont incluses: métadonnées, corps de requête et corps de réponse. Le corps de réponse peut être très grand. À titre d’exemple, oc get pods -A génère un corps de réponse contenant la description YAML de chaque pod dans le cluster.
Note

Cette fonctionnalité ne peut être utilisée que si le collecteur vectoriel est configuré dans votre déploiement de journalisation.

Dans l’enregistrement 5.8 et ultérieur, la ressource personnalisée ClusterLogForwarder (CR) utilise le même format que la politique d’audit standard Kubernetes, tout en fournissant les fonctions supplémentaires suivantes:

Les wildcards
Les noms d’utilisateurs, de groupes, d’espaces de noms et de ressources peuvent avoir un caractère d’astérisque principal ou suivi *. À titre d’exemple, namespace openshift-\* correspond à openshift-apiserver ou openshift-authentication. La ressource \*/status correspond à Pod/status ou Déploiement/status.
Les règles par défaut

Les événements qui ne correspondent à aucune règle de la politique sont filtrés comme suit:

  • Les événements système en lecture seule tels que get, list, watch sont supprimés.
  • Les événements d’écriture de compte de service qui se produisent dans le même espace de noms que le compte de service sont supprimés.
  • Les autres événements sont transmis, sous réserve des limites de taux configurées.

Afin de désactiver ces valeurs par défaut, terminez votre liste de règles avec une règle qui n’a qu’un champ de niveau ou ajoutez une règle vide.

Omettre les codes de réponse
Liste des codes de statut entiers à omettre. Dans la réponse, vous pouvez supprimer les événements en fonction du code d’état HTTP en utilisant le champ OmitResponseCodes, une liste de code d’état HTTP pour lequel aucun événement n’est créé. La valeur par défaut est [404, 409, 422, 429]. Lorsque la valeur est une liste vide, [], alors aucun code d’état n’est omis.

La politique d’audit ClusterLogForwarder CR agit en plus du Red Hat OpenShift Service sur la politique d’audit AWS. Le filtre d’audit ClusterLogForwarder CR modifie ce que le collecteur de journaux avance et permet de filtrer par verbe, utilisateur, groupe, espace de noms ou ressource. Il est possible de créer plusieurs filtres pour envoyer différents résumés du même flux d’audit à différents endroits. À titre d’exemple, vous pouvez envoyer un flux détaillé au magasin de journal de cluster local et un flux moins détaillé vers un site distant.

Note

L’exemple fourni vise à illustrer l’éventail des règles possibles dans une politique d’audit et n’est pas une configuration recommandée.

Exemple de politique d’audit

apiVersion: logging.openshift.io/v1
kind: ClusterLogForwarder
metadata:
  name: instance
  namespace: openshift-logging
spec:
  pipelines:
    - name: my-pipeline
      inputRefs: audit 
1

      filterRefs: my-policy 
2

      outputRefs: default
  filters:
    - name: my-policy
      type: kubeAPIAudit
      kubeAPIAudit:
        # Don't generate audit events for all requests in RequestReceived stage.
        omitStages:
          - "RequestReceived"

        rules:
          # Log pod changes at RequestResponse level
          - level: RequestResponse
            resources:
            - group: ""
              resources: ["pods"]

          # Log "pods/log", "pods/status" at Metadata level
          - level: Metadata
            resources:
            - group: ""
              resources: ["pods/log", "pods/status"]

          # Don't log requests to a configmap called "controller-leader"
          - level: None
            resources:
            - group: ""
              resources: ["configmaps"]
              resourceNames: ["controller-leader"]

          # Don't log watch requests by the "system:kube-proxy" on endpoints or services
          - level: None
            users: ["system:kube-proxy"]
            verbs: ["watch"]
            resources:
            - group: "" # core API group
              resources: ["endpoints", "services"]

          # Don't log authenticated requests to certain non-resource URL paths.
          - level: None
            userGroups: ["system:authenticated"]
            nonResourceURLs:
            - "/api*" # Wildcard matching.
            - "/version"

          # Log the request body of configmap changes in kube-system.
          - level: Request
            resources:
            - group: "" # core API group
              resources: ["configmaps"]
            # This rule only applies to resources in the "kube-system" namespace.
            # The empty string "" can be used to select non-namespaced resources.
            namespaces: ["kube-system"]

          # Log configmap and secret changes in all other namespaces at the Metadata level.
          - level: Metadata
            resources:
            - group: "" # core API group
              resources: ["secrets", "configmaps"]

          # Log all other resources in core and extensions at the Request level.
          - level: Request
            resources:
            - group: "" # core API group
            - group: "extensions" # Version of group should NOT be included.

          # A catch-all rule to log all other requests at the Metadata level.
          - level: Metadata
Copy to Clipboard Toggle word wrap

1
Les types de journaux qui sont collectés. La valeur de ce champ peut être l’audit pour les journaux d’audit, les applications pour les journaux d’applications, l’infrastructure pour les journaux d’infrastructure ou une entrée nommée qui a été définie pour votre application.
2
Le nom de votre politique d’audit.

Les journaux peuvent être transférés vers un système d’enregistrement Loki externe en plus ou au lieu du log store par défaut.

Afin de configurer le transfert de journaux vers Loki, vous devez créer une ressource personnalisée ClusterLogForwarder (CR) avec une sortie vers Loki, et un pipeline qui utilise la sortie. La sortie vers Loki peut utiliser la connexion HTTP (non sécurisée) ou HTTPS (sécurisé HTTP).

Conditions préalables

  • Il faut avoir un système d’enregistrement Loki en cours d’exécution à l’URL que vous spécifiez avec le champ url dans le CR.

Procédure

  1. Créer ou modifier un fichier YAML qui définit l’objet ClusterLogForwarder CR:

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: <log_forwarder_name> 
    1
    
      namespace: <log_forwarder_namespace> 
    2
    
    spec:
      serviceAccountName: <service_account_name> 
    3
    
      outputs:
      - name: loki-insecure 
    4
    
        type: "loki" 
    5
    
        url: http://loki.insecure.com:3100 
    6
    
        loki:
          tenantKey: kubernetes.namespace_name
          labelKeys:
          - kubernetes.labels.foo
      - name: loki-secure 
    7
    
        type: "loki"
        url: https://loki.secure.com:3100
        secret:
          name: loki-secret 
    8
    
        loki:
          tenantKey: kubernetes.namespace_name 
    9
    
          labelKeys:
          - kubernetes.labels.foo 
    10
    
      pipelines:
      - name: application-logs 
    11
    
        inputRefs:  
    12
    
        - application
        - audit
        outputRefs: 
    13
    
        - loki-secure
    Copy to Clipboard Toggle word wrap
    1
    Dans les implémentations antérieures, le nom CR doit être instance. Dans les implémentations de transbordeur de journaux multiples, vous pouvez utiliser n’importe quel nom.
    2
    Dans les implémentations héritées, l’espace de noms CR doit être ouvert-logging. Dans les implémentations de transfert de journaux multiples, vous pouvez utiliser n’importe quel espace de noms.
    3
    Le nom de votre compte de service. Le compte de service n’est requis que dans les implémentations de transbordeur de journaux multiples si l’expéditeur de journaux n’est pas déployé dans l’espace de noms openshift-logging.
    4
    Indiquez un nom pour la sortie.
    5
    Indiquez le type comme "loki".
    6
    Indiquez l’URL et le port du système Loki en tant qu’URL absolue valide. Il est possible d’utiliser le protocole http (non sécurisé) ou https (sécurisé HTTP). Lorsque le proxy à l’échelle du cluster utilisant l’annotation CIDR est activé, la sortie doit être un nom de serveur ou un FQDN, et non une adresse IP. Le port par défaut de Loki pour la communication HTTP(S) est 3100.
    7
    Dans le cas d’une connexion sécurisée, vous pouvez spécifier une URL https ou http que vous authentifiez en spécifiant un secret.
    8
    Dans le cas d’un préfixe https, spécifiez le nom du secret requis par le point de terminaison pour la communication TLS. Le secret doit contenir une clé ca-bundle.crt qui pointe vers les certificats qu’il représente. Autrement, pour les préfixes http et https, vous pouvez spécifier un secret qui contient un nom d’utilisateur et un mot de passe. Dans les implémentations héritées, le secret doit exister dans le projet d’exploitation en openshift. En savoir plus, voir « Exemple : Configurer un secret qui contient un nom d’utilisateur et un mot de passe ».
    9
    Facultatif : Spécifiez un champ clé de métadonnées pour générer des valeurs pour le champ TenantID dans Loki. À titre d’exemple, le paramètre tenantKey: kubernetes.namespace_name utilise les noms des espaces de noms Kubernetes comme valeurs pour les identifiants de locataire dans Loki. Afin de voir les autres champs d’enregistrement de journaux que vous pouvez spécifier, consultez le lien « Champs d’enregistrement de registre » dans la section suivante « Ressources supplémentaires ».
    10
    Facultatif: Spécifiez une liste de touches de champ de métadonnées pour remplacer les étiquettes Loki par défaut. Les noms d’étiquettes Loki doivent correspondre à l’expression régulière [a-zA-Z_:][a-zA-Z0-9_:]*. Les caractères illégaux dans les clés de métadonnées sont remplacés par _ pour former le nom de l’étiquette. Ainsi, la clé de métadonnées kubernetes.labels.foo devient le label Loki kubernetes_labels_foo. Dans le cas où vous ne définissez pas de baliseKeys, la valeur par défaut est : [log_type, kubernetes.namespace_name, kubernetes.pod_name, kubernetes_host]. Gardez l’ensemble d’étiquettes petit car Loki limite la taille et le nombre d’étiquettes autorisées. Consultez Configuring Loki, limit_config. Cependant, vous pouvez toujours interroger en fonction de n’importe quel champ d’enregistrement de journal à l’aide de filtres de requête.
    11
    Facultatif : Spécifiez un nom pour le pipeline.
    12
    Indiquez les types de journaux à transmettre en utilisant le pipeline : application, infrastructure ou vérification.
    13
    Indiquez le nom de la sortie à utiliser lors de la transmission des journaux avec ce pipeline.
    Note

    Étant donné que Loki exige que les flux de journaux soient correctement commandés par horodatage, labelKeys inclut toujours l’ensemble d’étiquettes kubernetes_host, même si vous ne le spécifiez pas. Cette inclusion garantit que chaque flux provient d’un seul hôte, ce qui empêche les horodatages de devenir désordonnés en raison des différences d’horloge sur différents hôtes.

  2. Appliquez l’objet ClusterLogForwarder CR en exécutant la commande suivante:

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

Les journaux peuvent être transférés vers une instance externe Elasticsearch en plus ou au lieu du log store interne. Il vous incombe de configurer l’agrégateur de journaux externe pour recevoir les données de log de Red Hat OpenShift Service sur AWS.

Afin de configurer le transfert de journaux vers une instance externe Elasticsearch, vous devez créer une ressource personnalisée ClusterLogForwarder (CR) avec une sortie vers cette instance, et un pipeline qui utilise la sortie. La sortie externe Elasticsearch peut utiliser la connexion HTTP (non sécurisée) ou HTTPS (sécurisé HTTP).

Afin de transmettre les journaux à une instance externe et interne d’Elasticsearch, créez des sorties et des pipelines vers l’instance externe et un pipeline qui utilise la sortie par défaut pour transmettre les journaux à l’instance interne.

Note

Il n’est pas nécessaire de créer un ClusterLogForwarder CR si vous voulez seulement transférer les journaux vers une instance interne Elasticsearch.

Conditions préalables

  • Il faut avoir un serveur de journalisation configuré pour recevoir les données de journalisation à l’aide du protocole ou du format spécifié.

Procédure

  1. Créer ou modifier un fichier YAML qui définit le ClusterLogForwarder CR:

    Exemple ClusterLogForwarder CR

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: <log_forwarder_name> 
    1
    
      namespace: <log_forwarder_namespace> 
    2
    
    spec:
      serviceAccountName: <service_account_name> 
    3
    
      outputs:
       - name: elasticsearch-example 
    4
    
         type: elasticsearch 
    5
    
         elasticsearch:
           version: 8 
    6
    
         url: http://elasticsearch.example.com:9200 
    7
    
         secret:
           name: es-secret 
    8
    
      pipelines:
       - name: application-logs 
    9
    
         inputRefs: 
    10
    
         - application
         - audit
         outputRefs:
         - elasticsearch-example 
    11
    
         - default 
    12
    
         labels:
           myLabel: "myValue" 
    13
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    Dans les implémentations antérieures, le nom CR doit être instance. Dans les implémentations de transbordeur de journaux multiples, vous pouvez utiliser n’importe quel nom.
    2
    Dans les implémentations héritées, l’espace de noms CR doit être ouvert-logging. Dans les implémentations de transfert de journaux multiples, vous pouvez utiliser n’importe quel espace de noms.
    3
    Le nom de votre compte de service. Le compte de service n’est requis que dans les implémentations de transbordeur de journaux multiples si l’expéditeur de journaux n’est pas déployé dans l’espace de noms openshift-logging.
    4
    Indiquez un nom pour la sortie.
    5
    Indiquez le type de recherche élastique.
    6
    Indiquez la version Elasticsearch. Cela peut être 6, 7 ou 8.
    7
    Indiquez l’URL et le port de l’instance externe Elasticsearch comme URL absolue valide. Il est possible d’utiliser le protocole http (non sécurisé) ou https (sécurisé HTTP). Lorsque le proxy à l’échelle du cluster utilisant l’annotation CIDR est activé, la sortie doit être un nom de serveur ou un FQDN, et non une adresse IP.
    8
    Dans le cas d’un préfixe https, spécifiez le nom du secret requis par le point de terminaison pour la communication TLS. Le secret doit contenir une clé ca-bundle.crt qui pointe vers le certificat qu’il représente. Autrement, pour les préfixes http et https, vous pouvez spécifier un secret qui contient un nom d’utilisateur et un mot de passe. Dans les implémentations héritées, le secret doit exister dans le projet d’exploitation en openshift. En savoir plus, voir « Exemple : Configurer un secret qui contient un nom d’utilisateur et un mot de passe ».
    9
    Facultatif : Spécifiez un nom pour le pipeline.
    10
    Indiquez les types de journaux à transmettre en utilisant le pipeline : application, infrastructure ou vérification.
    11
    Indiquez le nom de la sortie à utiliser lors de la transmission des journaux avec ce pipeline.
    12
    Facultatif : Spécifiez la sortie par défaut pour envoyer les journaux à l’instance interne Elasticsearch.
    13
    Facultatif: String. Il y a une ou plusieurs étiquettes à ajouter aux journaux.
  2. Appliquer le ClusterLogForwarder CR:

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

Exemple : Définir un secret contenant un nom d’utilisateur et un mot de passe

Il est possible d’utiliser un secret contenant un nom d’utilisateur et un mot de passe pour authentifier une connexion sécurisée à une instance externe Elasticsearch.

Ainsi, si vous ne pouvez pas utiliser les touches TLS (mTLS) mutuelles parce qu’un tiers exploite l’instance Elasticsearch, vous pouvez utiliser HTTP ou HTTPS et définir un secret contenant le nom d’utilisateur et le mot de passe.

  1. Créez un fichier Secret YAML similaire à l’exemple suivant. Les valeurs encodées base64 sont utilisées pour les champs nom d’utilisateur et mot de passe. Le type secret est opaque par défaut.

    apiVersion: v1
    kind: Secret
    metadata:
      name: openshift-test-secret
    data:
      username: <username>
      password: <password>
    # ...
    Copy to Clipboard Toggle word wrap
  2. Créer le secret:

    $ oc create secret -n openshift-logging openshift-test-secret.yaml
    Copy to Clipboard Toggle word wrap
  3. Indiquez le nom du secret dans le ClusterLogForwarder CR:

    kind: ClusterLogForwarder
    metadata:
      name: instance
      namespace: openshift-logging
    spec:
      outputs:
       - name: elasticsearch
         type: "elasticsearch"
         url: https://elasticsearch.secure.com:9200
         secret:
            name: openshift-test-secret
    # ...
    Copy to Clipboard Toggle word wrap
    Note

    Dans la valeur du champ url, le préfixe peut être http ou https.

  4. Appliquer l’objet CR:

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

Il est possible d’utiliser le protocole Fluentd forward pour envoyer une copie de vos journaux à un agrégateur de journal externe configuré pour accepter le protocole au lieu du magasin de journal Elasticsearch par défaut ou en plus. Il vous incombe de configurer l’agrégateur de journaux externe pour recevoir les journaux de Red Hat OpenShift Service sur AWS.

Afin de configurer le transfert de journaux à l’aide du protocole avant, vous devez créer une ressource personnalisée ClusterLogForwarder (CR) avec une ou plusieurs sorties vers les serveurs Fluentd, et des pipelines qui utilisent ces sorties. La sortie Fluentd peut utiliser une connexion TCP (non sécurisée) ou TLS (TCP sécurisé).

Conditions préalables

  • Il faut avoir un serveur de journalisation configuré pour recevoir les données de journalisation à l’aide du protocole ou du format spécifié.

Procédure

  1. Créer ou modifier un fichier YAML qui définit l’objet ClusterLogForwarder CR:

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: instance 
    1
    
      namespace: openshift-logging 
    2
    
    spec:
      outputs:
       - name: fluentd-server-secure 
    3
    
         type: fluentdForward 
    4
    
         url: 'tls://fluentdserver.security.example.com:24224' 
    5
    
         secret: 
    6
    
            name: fluentd-secret
       - name: fluentd-server-insecure
         type: fluentdForward
         url: 'tcp://fluentdserver.home.example.com:24224'
      pipelines:
       - name: forward-to-fluentd-secure 
    7
    
         inputRefs:  
    8
    
         - application
         - audit
         outputRefs:
         - fluentd-server-secure 
    9
    
         - default 
    10
    
         labels:
           clusterId: "C1234" 
    11
    
       - name: forward-to-fluentd-insecure 
    12
    
         inputRefs:
         - infrastructure
         outputRefs:
         - fluentd-server-insecure
         labels:
           clusterId: "C1234"
    Copy to Clipboard Toggle word wrap
    1
    Le nom du ClusterLogForwarder CR doit être instance.
    2
    L’espace de noms du ClusterLogForwarder CR doit être ouvert-logging.
    3
    Indiquez un nom pour la sortie.
    4
    Indiquez le type fluentdForward.
    5
    Indiquez l’URL et le port de l’instance Fluentd externe comme URL absolue valide. Il est possible d’utiliser le protocole tcp (non sécurisé) ou tls (TCP sécurisé). Lorsque le proxy à l’échelle du cluster utilisant l’annotation CIDR est activé, la sortie doit être un nom de serveur ou un FQDN, et non une adresse IP.
    6
    Lorsque vous utilisez un préfixe tls, vous devez spécifier le nom du secret requis par le point de terminaison pour la communication TLS. Le secret doit exister dans le projet openshift-logging et doit contenir une clé ca-bundle.crt qui pointe vers le certificat qu’il représente.
    7
    Facultatif : Spécifiez un nom pour le pipeline.
    8
    Indiquez les types de journaux à transmettre en utilisant le pipeline : application, infrastructure ou vérification.
    9
    Indiquez le nom de la sortie à utiliser lors de la transmission des journaux avec ce pipeline.
    10
    Facultatif : Spécifiez la sortie par défaut pour transmettre les journaux à l’instance interne Elasticsearch.
    11
    Facultatif: String. Il y a une ou plusieurs étiquettes à ajouter aux journaux.
    12
    Facultatif: Configurez plusieurs sorties pour transmettre les journaux à d’autres agrégateurs de journaux externes de tout type pris en charge:
    • C’est un nom pour décrire le pipeline.
    • L’entréeRefs est le type de journal à transmettre en utilisant le pipeline : application, infrastructure ou vérification.
    • La sortieRefs est le nom de la sortie à utiliser.
    • Facultatif: String. Il y a une ou plusieurs étiquettes à ajouter aux journaux.
  2. Créer l’objet CR:

    $ oc create -f <file-name>.yaml
    Copy to Clipboard Toggle word wrap

Afin que Logstash puisse ingérer des données de log à partir de fluentd, vous devez activer la précision nanoseconde dans le fichier de configuration Logstash.

Procédure

  • Dans le fichier de configuration Logstash, définissez nanosecond_précision sur true.

Exemple de fichier de configuration Logstash

input { tcp { codec => fluent { nanosecond_precision => true } port => 24114 } }
filter { }
output { stdout { codec => rubydebug } }
Copy to Clipboard Toggle word wrap

9.4.14. Journaux de transfert à l’aide du protocole syslog

Il est possible d’utiliser le protocole syslog RFC3164 ou RFC5424 pour envoyer une copie de vos journaux à un agrégateur de journal externe configuré pour accepter le protocole au lieu du magasin de journal Elasticsearch par défaut ou en plus. Il vous incombe de configurer l’agrégateur de journal externe, tel qu’un serveur syslog, pour recevoir les journaux de Red Hat OpenShift Service sur AWS.

Afin de configurer le transfert de journaux à l’aide du protocole syslog, vous devez créer une ressource personnalisée ClusterLogForwarder (CR) avec une ou plusieurs sorties vers les serveurs syslog, et des pipelines qui utilisent ces sorties. La sortie syslog peut utiliser une connexion UDP, TCP ou TLS.

Conditions préalables

  • Il faut avoir un serveur de journalisation configuré pour recevoir les données de journalisation à l’aide du protocole ou du format spécifié.

Procédure

  1. Créer ou modifier un fichier YAML qui définit l’objet ClusterLogForwarder CR:

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: <log_forwarder_name> 
    1
    
      namespace: <log_forwarder_namespace> 
    2
    
    spec:
      serviceAccountName: <service_account_name> 
    3
    
      outputs:
       - name: rsyslog-east 
    4
    
         type: syslog 
    5
    
         syslog: 
    6
    
           facility: local0
           rfc: RFC3164
           payloadKey: message
           severity: informational
         url: 'tls://rsyslogserver.east.example.com:514' 
    7
    
         secret: 
    8
    
            name: syslog-secret
       - name: rsyslog-west
         type: syslog
         syslog:
          appName: myapp
          facility: user
          msgID: mymsg
          procID: myproc
          rfc: RFC5424
          severity: debug
         url: 'tcp://rsyslogserver.west.example.com:514'
      pipelines:
       - name: syslog-east 
    9
    
         inputRefs: 
    10
    
         - audit
         - application
         outputRefs: 
    11
    
         - rsyslog-east
         - default 
    12
    
         labels:
           secure: "true" 
    13
    
           syslog: "east"
       - name: syslog-west 
    14
    
         inputRefs:
         - infrastructure
         outputRefs:
         - rsyslog-west
         - default
         labels:
           syslog: "west"
    Copy to Clipboard Toggle word wrap
    1
    Dans les implémentations antérieures, le nom CR doit être instance. Dans les implémentations de transbordeur de journaux multiples, vous pouvez utiliser n’importe quel nom.
    2
    Dans les implémentations héritées, l’espace de noms CR doit être ouvert-logging. Dans les implémentations de transfert de journaux multiples, vous pouvez utiliser n’importe quel espace de noms.
    3
    Le nom de votre compte de service. Le compte de service n’est requis que dans les implémentations de transbordeur de journaux multiples si l’expéditeur de journaux n’est pas déployé dans l’espace de noms openshift-logging.
    4
    Indiquez un nom pour la sortie.
    5
    Indiquez le type de syslog.
    6
    Facultatif: Spécifiez les paramètres de syslog, énumérés ci-dessous.
    7
    Indiquez l’URL et le port de l’instance syslog externe. Il est possible d’utiliser le protocole udp (non sécurisé), tcp (non sécurisé) ou tls (TCP sécurisé). Lorsque le proxy à l’échelle du cluster utilisant l’annotation CIDR est activé, la sortie doit être un nom de serveur ou un FQDN, et non une adresse IP.
    8
    En utilisant un préfixe tls, vous devez spécifier le nom du secret requis par le point de terminaison pour la communication TLS. Le secret doit contenir une clé ca-bundle.crt qui pointe vers le certificat qu’il représente. Dans les implémentations héritées, le secret doit exister dans le projet d’exploitation en openshift.
    9
    Facultatif : Spécifiez un nom pour le pipeline.
    10
    Indiquez les types de journaux à transmettre en utilisant le pipeline : application, infrastructure ou vérification.
    11
    Indiquez le nom de la sortie à utiliser lors de la transmission des journaux avec ce pipeline.
    12
    Facultatif : Spécifiez la sortie par défaut pour transmettre les journaux à l’instance interne Elasticsearch.
    13
    Facultatif: String. Il y a une ou plusieurs étiquettes à ajouter aux journaux. Citez des valeurs comme "vrai" afin qu’elles soient reconnues comme des valeurs de chaîne, et non comme un booléen.
    14
    Facultatif: Configurez plusieurs sorties pour transmettre les journaux à d’autres agrégateurs de journaux externes de tout type pris en charge:
    • C’est un nom pour décrire le pipeline.
    • L’entréeRefs est le type de journal à transmettre en utilisant le pipeline : application, infrastructure ou vérification.
    • La sortieRefs est le nom de la sortie à utiliser.
    • Facultatif: String. Il y a une ou plusieurs étiquettes à ajouter aux journaux.
  2. Créer l’objet CR:

    $ oc create -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

Il est possible d’ajouter des éléments namespace_name, pod_name et container_name au champ de message de l’enregistrement en ajoutant le champ AddLogSource à votre ressource personnalisée ClusterLogForwarder (CR).

  spec:
    outputs:
    - name: syslogout
      syslog:
        addLogSource: true
        facility: user
        payloadKey: message
        rfc: RFC3164
        severity: debug
        tag: mytag
      type: syslog
      url: tls://syslog-receiver.openshift-logging.svc:24224
    pipelines:
    - inputRefs:
      - application
      name: test-app
      outputRefs:
      - syslogout
Copy to Clipboard Toggle word wrap
Note

Cette configuration est compatible avec les RFC3164 et RFC5424.

Exemple de sortie de message syslog sans AddLogSource

<15>1 2020-11-15T17:06:14+00:00 fluentd-9hkb4 mytag - - -  {"msgcontent"=>"Message Contents", "timestamp"=>"2020-11-15 17:06:09", "tag_key"=>"rec_tag", "index"=>56}
Copy to Clipboard Toggle word wrap

Exemple de sortie de message syslog avec AddLogSource

<15>1 2020-11-16T10:49:37+00:00 crc-j55b9-master-0 mytag - - -  namespace_name=clo-test-6327,pod_name=log-generator-ff9746c49-qxm7l,container_name=log-generator,message={"msgcontent":"My life is my message", "timestamp":"2020-11-16 10:49:36", "tag_key":"rec_tag", "index":76}
Copy to Clipboard Toggle word wrap

9.4.14.2. Les paramètres de syslog

Il est possible de configurer ce qui suit pour les sorties syslog. Consultez le syslog RFC3164 ou RFC5424 RFC pour plus d’informations.

  • facilité: L’installation de syslog. La valeur peut être un entier décimal ou un mot-clé insensible à la casse:

    • 0 ou kern pour les messages du noyau
    • 1 ou utilisateur pour les messages de niveau utilisateur, par défaut.
    • 2 ou courrier pour le système de courrier
    • 3 ou démon pour les démons système
    • 4 ou auth pour les messages de sécurité / d’authentification
    • 5 ou syslog pour les messages générés en interne par syslogd
    • 6 ou lpr pour le sous-système d’imprimante de ligne
    • 7 ou nouvelles pour le sous-système d’actualités réseau
    • 8 ou uucp pour le sous-système UUCP
    • 9 ou cron pour le démon d’horloge
    • 10 ou authpriv pour les messages d’authentification de sécurité
    • 11 ou ftp pour le démon FTP
    • 12 ou ntp pour le sous-système NTP
    • 13 ou sécurité pour le journal d’audit syslog
    • 14 ou console pour le journal d’alerte syslog
    • 15 ou solaris-cron pour le démon de planification
    • 16-23 ou local0 - local7 pour les installations d’utilisation locale
  • Facultatif: payloadKey: Le champ d’enregistrement à utiliser comme charge utile pour le message syslog.

    Note

    La configuration du paramètre PayloadKey empêche d’autres paramètres d’être transmis au syslog.

  • la RFC à utiliser pour l’envoi de journaux à l’aide de syslog. La valeur par défaut est RFC5424.
  • gravité: La sévérité du syslog à établir sur les enregistrements de syslog sortants. La valeur peut être un entier décimal ou un mot-clé insensible à la casse:

    • 0 ou urgence pour les messages indiquant que le système est inutilisable
    • 1 ou Alerte pour les messages indiquant les actions doivent être prises immédiatement
    • 2 ou critique pour les messages indiquant des conditions critiques
    • 3 ou Erreur pour les messages indiquant les conditions d’erreur
    • 4 ou avertissement pour les messages indiquant les conditions d’avertissement
    • 5 ou Avis pour les messages indiquant des conditions normales mais significatives
    • 6 ou Information pour les messages indiquant des messages d’information
    • 7 ou Debug pour les messages indiquant le niveau de débogage, la valeur par défaut
  • balise: Tag spécifie un champ d’enregistrement à utiliser comme balise sur le message syslog.
  • trimPrefix: Supprimer le préfixe spécifié de la balise.

9.4.14.3. Autres paramètres RFC5424 syslog

Les paramètres suivants s’appliquent à la RFC5424:

  • Appname: L’APP-NAME est une chaîne de texte libre qui identifie l’application qui a envoyé le journal. Doit être spécifié pour la RFC5424.
  • Le MSGID est une chaîne de texte libre qui identifie le type de message. Doit être spécifié pour la RFC5424.
  • le PROCID est une chaîne de texte libre. La modification de la valeur indique une discontinuité dans le rapport syslog. Doit être spécifié pour la RFC5424.

9.4.15. Envoi de journaux à un courtier Kafka

Les journaux peuvent être transférés à un courtier Kafka externe en plus ou à la place du log store par défaut.

Afin de configurer le transfert de journaux vers une instance Kafka externe, vous devez créer une ressource personnalisée ClusterLogForwarder (CR) avec une sortie vers cette instance, et un pipeline qui utilise la sortie. Il est possible d’inclure un sujet Kafka spécifique dans la sortie ou d’utiliser la valeur par défaut. La sortie Kafka peut utiliser une connexion TCP (non sécurisée) ou TLS (TCP sécurisé).

Procédure

  1. Créer ou modifier un fichier YAML qui définit l’objet ClusterLogForwarder CR:

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: <log_forwarder_name> 
    1
    
      namespace: <log_forwarder_namespace> 
    2
    
    spec:
      serviceAccountName: <service_account_name> 
    3
    
      outputs:
       - name: app-logs 
    4
    
         type: kafka 
    5
    
         url: tls://kafka.example.devlab.com:9093/app-topic 
    6
    
         secret:
           name: kafka-secret 
    7
    
       - name: infra-logs
         type: kafka
         url: tcp://kafka.devlab2.example.com:9093/infra-topic 
    8
    
       - name: audit-logs
         type: kafka
         url: tls://kafka.qelab.example.com:9093/audit-topic
         secret:
            name: kafka-secret-qe
      pipelines:
       - name: app-topic 
    9
    
         inputRefs: 
    10
    
         - application
         outputRefs: 
    11
    
         - app-logs
         labels:
           logType: "application" 
    12
    
       - name: infra-topic 
    13
    
         inputRefs:
         - infrastructure
         outputRefs:
         - infra-logs
         labels:
           logType: "infra"
       - name: audit-topic
         inputRefs:
         - audit
         outputRefs:
         - audit-logs
         labels:
           logType: "audit"
    Copy to Clipboard Toggle word wrap
    1
    Dans les implémentations antérieures, le nom CR doit être instance. Dans les implémentations de transbordeur de journaux multiples, vous pouvez utiliser n’importe quel nom.
    2
    Dans les implémentations héritées, l’espace de noms CR doit être ouvert-logging. Dans les implémentations de transfert de journaux multiples, vous pouvez utiliser n’importe quel espace de noms.
    3
    Le nom de votre compte de service. Le compte de service n’est requis que dans les implémentations de transbordeur de journaux multiples si l’expéditeur de journaux n’est pas déployé dans l’espace de noms openshift-logging.
    4
    Indiquez un nom pour la sortie.
    5
    Indiquez le type kafka.
    6
    Indiquez l’URL et le port du courtier Kafka en tant qu’URL absolue valide, éventuellement avec un sujet spécifique. Il est possible d’utiliser le protocole tcp (non sécurisé) ou tls (TCP sécurisé). Lorsque le proxy à l’échelle du cluster utilisant l’annotation CIDR est activé, la sortie doit être un nom de serveur ou un FQDN, et non une adresse IP.
    7
    Lorsque vous utilisez un préfixe tls, vous devez spécifier le nom du secret requis par le point de terminaison pour la communication TLS. Le secret doit contenir une clé ca-bundle.crt qui pointe vers le certificat qu’il représente. Dans les implémentations héritées, le secret doit exister dans le projet d’exploitation en openshift.
    8
    Facultatif: Pour envoyer une sortie non sécurisée, utilisez un préfixe tcp devant l’URL. Également omettre la clé secrète et son nom de cette sortie.
    9
    Facultatif : Spécifiez un nom pour le pipeline.
    10
    Indiquez les types de journaux à transmettre en utilisant le pipeline : application, infrastructure ou vérification.
    11
    Indiquez le nom de la sortie à utiliser lors de la transmission des journaux avec ce pipeline.
    12
    Facultatif: String. Il y a une ou plusieurs étiquettes à ajouter aux journaux.
    13
    Facultatif: Configurez plusieurs sorties pour transmettre les journaux à d’autres agrégateurs de journaux externes de tout type pris en charge:
    • C’est un nom pour décrire le pipeline.
    • L’entréeRefs est le type de journal à transmettre en utilisant le pipeline : application, infrastructure ou vérification.
    • La sortieRefs est le nom de la sortie à utiliser.
    • Facultatif: String. Il y a une ou plusieurs étiquettes à ajouter aux journaux.
  2. Facultatif: Pour transférer une seule sortie à plusieurs courtiers Kafka, spécifiez un éventail de courtiers Kafka comme indiqué dans l’exemple suivant:

    # ...
    spec:
      outputs:
      - name: app-logs
        type: kafka
        secret:
          name: kafka-secret-dev
        kafka:  
    1
    
          brokers: 
    2
    
            - tls://kafka-broker1.example.com:9093/
            - tls://kafka-broker2.example.com:9093/
          topic: app-topic 
    3
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    Indiquez une clé kafka qui a une clé de courtier et de sujet.
    2
    Faites appel à la clé des courtiers pour spécifier un éventail d’un ou plusieurs courtiers.
    3
    La clé de sujet permet de spécifier le sujet cible qui reçoit les journaux.
  3. Appliquez le ClusterLogForwarder CR en exécutant la commande suivante:

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

9.4.16. Envoi de journaux vers Amazon CloudWatch

Les journaux peuvent être transmis à Amazon CloudWatch, un service de surveillance et de stockage log hébergé par Amazon Web Services (AWS). Les journaux peuvent être transférés vers CloudWatch en plus ou au lieu du log store par défaut.

Afin de configurer le transfert de journaux vers CloudWatch, vous devez créer une ressource personnalisée ClusterLogForwarder (CR) avec une sortie pour CloudWatch et un pipeline qui utilise la sortie.

Procédure

  1. Créez un fichier Secret YAML qui utilise les champs aws_access_key_id et aws_secret_access_key pour spécifier vos identifiants AWS codés base64. À titre d’exemple:

    apiVersion: v1
    kind: Secret
    metadata:
      name: cw-secret
      namespace: openshift-logging
    data:
      aws_access_key_id: QUtJQUlPU0ZPRE5ON0VYQU1QTEUK
      aws_secret_access_key: d0phbHJYVXRuRkVNSS9LN01ERU5HL2JQeFJmaUNZRVhBTVBMRUtFWQo=
    Copy to Clipboard Toggle word wrap
  2. Créez le secret. À titre d’exemple:

    $ oc apply -f cw-secret.yaml
    Copy to Clipboard Toggle word wrap
  3. Créez ou modifiez un fichier YAML qui définit l’objet ClusterLogForwarder CR. Dans le fichier, spécifiez le nom du secret. À titre d’exemple:

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: <log_forwarder_name> 
    1
    
      namespace: <log_forwarder_namespace> 
    2
    
    spec:
      serviceAccountName: <service_account_name> 
    3
    
      outputs:
       - name: cw 
    4
    
         type: cloudwatch 
    5
    
         cloudwatch:
           groupBy: logType 
    6
    
           groupPrefix: <group prefix> 
    7
    
           region: us-east-2 
    8
    
         secret:
            name: cw-secret 
    9
    
      pipelines:
        - name: infra-logs 
    10
    
          inputRefs: 
    11
    
            - infrastructure
            - audit
            - application
          outputRefs:
            - cw 
    12
    Copy to Clipboard Toggle word wrap
    1
    Dans les implémentations antérieures, le nom CR doit être instance. Dans les implémentations de transbordeur de journaux multiples, vous pouvez utiliser n’importe quel nom.
    2
    Dans les implémentations héritées, l’espace de noms CR doit être ouvert-logging. Dans les implémentations de transfert de journaux multiples, vous pouvez utiliser n’importe quel espace de noms.
    3
    Le nom de votre compte de service. Le compte de service n’est requis que dans les implémentations de transbordeur de journaux multiples si l’expéditeur de journaux n’est pas déployé dans l’espace de noms openshift-logging.
    4
    Indiquez un nom pour la sortie.
    5
    Indiquez le type de cloudwatch.
    6
    Facultatif: Spécifiez comment regrouper les journaux:
    • logType crée des groupes de journaux pour chaque type de journal.
    • namespaceName crée un groupe de journal pour chaque espace de noms d’application. Il crée également des groupes de journaux distincts pour l’infrastructure et les journaux d’audit.
    • namespaceUUID crée un nouveau groupe de journaux pour chaque espace de noms d’application UUID. Il crée également des groupes de journaux distincts pour l’infrastructure et les journaux d’audit.
    7
    Facultatif : Spécifiez une chaîne de caractères pour remplacer le préfixe par défaut d’infrastructureName dans les noms des groupes de journaux.
    8
    Indiquez la région AWS.
    9
    Indiquez le nom du secret qui contient vos identifiants AWS.
    10
    Facultatif : Spécifiez un nom pour le pipeline.
    11
    Indiquez les types de journaux à transmettre en utilisant le pipeline : application, infrastructure ou vérification.
    12
    Indiquez le nom de la sortie à utiliser lors de la transmission des journaux avec ce pipeline.
  4. Créer l’objet CR:

    $ oc create -f <file-name>.yaml
    Copy to Clipboard Toggle word wrap

Exemple : Utiliser ClusterLogForwarder avec Amazon CloudWatch

Ici, vous voyez un exemple de ressource personnalisée ClusterLogForwarder (CR) et les données de log qu’elle génère sur Amazon CloudWatch.

Imaginez que vous dirigez un cluster ROSA nommé mycluster. La commande suivante renvoie l’infrastructure du clusterName, que vous utiliserez pour composer des commandes aws plus tard:

$ oc get Infrastructure/cluster -ojson | jq .status.infrastructureName
"mycluster-7977k"
Copy to Clipboard Toggle word wrap

Afin de générer des données de journal pour cet exemple, vous exécutez un pod de boîte de travail dans un espace de noms appelé application. Le pod busybox écrit un message à stdout toutes les trois secondes:

$ oc run busybox --image=busybox -- sh -c 'while true; do echo "My life is my message"; sleep 3; done'
$ oc logs -f busybox
My life is my message
My life is my message
My life is my message
...
Copy to Clipboard Toggle word wrap

Consultez l’UUID de l’espace de noms de l’application où s’exécute le pod busybox:

$ oc get ns/app -ojson | jq .metadata.uid
"794e1e1a-b9f5-4958-a190-e76a9b53d7bf"
Copy to Clipboard Toggle word wrap

Dans votre ressource personnalisée ClusterLogForwarder (CR), vous configurez les types d’infrastructure, d’audit et de journal des applications en tant qu’entrées dans le pipeline de tous les journaux. En outre, vous connectez ce pipeline à la sortie cw, qui transmet les journaux à une instance CloudWatch dans la région us-est-2:

apiVersion: "logging.openshift.io/v1"
kind: ClusterLogForwarder
metadata:
  name: instance
  namespace: openshift-logging
spec:
  outputs:
   - name: cw
     type: cloudwatch
     cloudwatch:
       groupBy: logType
       region: us-east-2
     secret:
        name: cw-secret
  pipelines:
    - name: all-logs
      inputRefs:
        - infrastructure
        - audit
        - application
      outputRefs:
        - cw
Copy to Clipboard Toggle word wrap

Chaque région de CloudWatch contient trois niveaux d’objets:

  • groupe de journal

    • flux de journal

      • événement de log

Avec groupBy: logType dans le ClusterLogForwarding CR, les trois types de log dans l’entréeRefs produisent trois groupes de log dans Amazon Cloudwatch:

$ aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
"mycluster-7977k.application"
"mycluster-7977k.audit"
"mycluster-7977k.infrastructure"
Copy to Clipboard Toggle word wrap

Chacun des groupes de journaux contient des flux de journaux:

$ aws --output json logs describe-log-streams --log-group-name mycluster-7977k.application | jq .logStreams[].logStreamName
"kubernetes.var.log.containers.busybox_app_busybox-da085893053e20beddd6747acdbaf98e77c37718f85a7f6a4facf09ca195ad76.log"
Copy to Clipboard Toggle word wrap
$ aws --output json logs describe-log-streams --log-group-name mycluster-7977k.audit | jq .logStreams[].logStreamName
"ip-10-0-131-228.us-east-2.compute.internal.k8s-audit.log"
"ip-10-0-131-228.us-east-2.compute.internal.linux-audit.log"
"ip-10-0-131-228.us-east-2.compute.internal.openshift-audit.log"
...
Copy to Clipboard Toggle word wrap
$ aws --output json logs describe-log-streams --log-group-name mycluster-7977k.infrastructure | jq .logStreams[].logStreamName
"ip-10-0-131-228.us-east-2.compute.internal.kubernetes.var.log.containers.apiserver-69f9fd9b58-zqzw5_openshift-oauth-apiserver_oauth-apiserver-453c5c4ee026fe20a6139ba6b1cdd1bed25989c905bf5ac5ca211b7cbb5c3d7b.log"
"ip-10-0-131-228.us-east-2.compute.internal.kubernetes.var.log.containers.apiserver-797774f7c5-lftrx_openshift-apiserver_openshift-apiserver-ce51532df7d4e4d5f21c4f4be05f6575b93196336be0027067fd7d93d70f66a4.log"
"ip-10-0-131-228.us-east-2.compute.internal.kubernetes.var.log.containers.apiserver-797774f7c5-lftrx_openshift-apiserver_openshift-apiserver-check-endpoints-82a9096b5931b5c3b1d6dc4b66113252da4a6472c9fff48623baee761911a9ef.log"
...
Copy to Clipboard Toggle word wrap

Chaque flux de journal contient des événements de journal. Afin de voir un événement journal à partir du Pod de la boîte de données, vous spécifiez son flux de journal à partir du groupe de journal de l’application:

$ aws logs get-log-events --log-group-name mycluster-7977k.application --log-stream-name kubernetes.var.log.containers.busybox_app_busybox-da085893053e20beddd6747acdbaf98e77c37718f85a7f6a4facf09ca195ad76.log
{
    "events": [
        {
            "timestamp": 1629422704178,
            "message": "{\"docker\":{\"container_id\":\"da085893053e20beddd6747acdbaf98e77c37718f85a7f6a4facf09ca195ad76\"},\"kubernetes\":{\"container_name\":\"busybox\",\"namespace_name\":\"app\",\"pod_name\":\"busybox\",\"container_image\":\"docker.io/library/busybox:latest\",\"container_image_id\":\"docker.io/library/busybox@sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60\",\"pod_id\":\"870be234-90a3-4258-b73f-4f4d6e2777c7\",\"host\":\"ip-10-0-216-3.us-east-2.compute.internal\",\"labels\":{\"run\":\"busybox\"},\"master_url\":\"https://kubernetes.default.svc\",\"namespace_id\":\"794e1e1a-b9f5-4958-a190-e76a9b53d7bf\",\"namespace_labels\":{\"kubernetes_io/metadata_name\":\"app\"}},\"message\":\"My life is my message\",\"level\":\"unknown\",\"hostname\":\"ip-10-0-216-3.us-east-2.compute.internal\",\"pipeline_metadata\":{\"collector\":{\"ipaddr4\":\"10.0.216.3\",\"inputname\":\"fluent-plugin-systemd\",\"name\":\"fluentd\",\"received_at\":\"2021-08-20T01:25:08.085760+00:00\",\"version\":\"1.7.4 1.6.0\"}},\"@timestamp\":\"2021-08-20T01:25:04.178986+00:00\",\"viaq_index_name\":\"app-write\",\"viaq_msg_id\":\"NWRjZmUyMWQtZjgzNC00MjI4LTk3MjMtNTk3NmY3ZjU4NDk1\",\"log_type\":\"application\",\"time\":\"2021-08-20T01:25:04+00:00\"}",
            "ingestionTime": 1629422744016
        },
...
Copy to Clipboard Toggle word wrap

Exemple : Personnaliser le préfixe dans les noms de groupes de journaux

Dans les noms de groupe de journaux, vous pouvez remplacer le préfixe par défaut InfrastructureName, mycluster-7977k, par une chaîne arbitraire comme demo-group-prefix. Afin d’effectuer cette modification, vous mettez à jour le champ groupPrefix dans le ClusterLogForwarding CR:

cloudwatch:
    groupBy: logType
    groupPrefix: demo-group-prefix
    region: us-east-2
Copy to Clipboard Toggle word wrap

La valeur de groupPrefix remplace le préfixe infrastructure par défautName:

$ aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
"demo-group-prefix.application"
"demo-group-prefix.audit"
"demo-group-prefix.infrastructure"
Copy to Clipboard Toggle word wrap

Exemple: Nom des groupes de journaux après les noms de l’espace de noms de l’application

Dans chaque espace de noms d’applications de votre cluster, vous pouvez créer un groupe de journaux dans CloudWatch dont le nom est basé sur le nom de l’espace de noms de l’application.

Lorsque vous supprimez un objet d’espace de noms d’application et créez un nouvel objet portant le même nom, CloudWatch continue d’utiliser le même groupe de journaux qu’auparavant.

Lorsque vous considérez des objets d’espace de noms d’application successifs qui ont le même nom comme équivalents les uns aux autres, utilisez l’approche décrite dans cet exemple. Dans le cas contraire, si vous devez distinguer les groupes de journaux résultants les uns des autres, consultez la section suivante "Noming log groups for application namespace UUIDs" section à la place.

Afin de créer des groupes de journaux d’applications dont les noms sont basés sur les noms des espaces de noms de l’application, vous définissez la valeur du groupePar le champ namespaceName dans le ClusterLogForwarder CR:

cloudwatch:
    groupBy: namespaceName
    region: us-east-2
Copy to Clipboard Toggle word wrap

Le groupe de configurationPar à namespaceName affecte uniquement le groupe de journal de l’application. Cela n’affecte pas les groupes d’audit et de journal de l’infrastructure.

Dans Amazon Cloudwatch, le nom de l’espace de noms apparaît à la fin de chaque nom de groupe de journal. Comme il y a un seul espace de noms d’application, "app", la sortie suivante montre un nouveau groupe de journaux mycluster-7977k.app au lieu de mycluster-7977k.application:

$ aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
"mycluster-7977k.app"
"mycluster-7977k.audit"
"mycluster-7977k.infrastructure"
Copy to Clipboard Toggle word wrap

Lorsque le cluster de cet exemple contenait plusieurs espaces de noms d’applications, la sortie afficherait plusieurs groupes de journaux, un pour chaque espace de noms.

Le champ groupBy affecte uniquement le groupe de journal des applications. Cela n’affecte pas les groupes d’audit et de journal de l’infrastructure.

Exemple: Nom des groupes de journaux après l’espace de noms de l’application UUIDs

Dans chaque espace de noms d’applications de votre cluster, vous pouvez créer un groupe de journaux dans CloudWatch dont le nom est basé sur l’UUID de l’espace de noms de l’application.

Lorsque vous supprimez un objet d’espace de noms d’application et créez un nouvel objet, CloudWatch crée un nouveau groupe de journaux.

Lorsque vous considérez des objets d’espace de noms d’application successifs avec le même nom comme différents les uns des autres, utilisez l’approche décrite dans cet exemple. Dans le cas contraire, voir la section « Exemple : Nom des groupes de journaux pour les noms d’espace de noms d’applications » à la place.

Afin de nommer les groupes de journaux après les UUIDs de l’espace de noms de l’application, vous définissez la valeur du groupePar le champ namespaceUUID dans le ClusterLogForwarder CR:

cloudwatch:
    groupBy: namespaceUUID
    region: us-east-2
Copy to Clipboard Toggle word wrap

Dans Amazon Cloudwatch, l’UUID de namespace apparaît à la fin de chaque nom de groupe de journal. Comme il y a un seul espace de noms d’application, "app", la sortie suivante montre un nouveau groupe de journaux mycluster-7977k.794e1a-b9f5-4958-a190-e76a9b53d7bf au lieu de mycluster-7977k.application:

$ aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
"mycluster-7977k.794e1e1a-b9f5-4958-a190-e76a9b53d7bf" // uid of the "app" namespace
"mycluster-7977k.audit"
"mycluster-7977k.infrastructure"
Copy to Clipboard Toggle word wrap

Le champ groupBy affecte uniquement le groupe de journal des applications. Cela n’affecte pas les groupes d’audit et de journal de l’infrastructure.

Lorsque vous avez un rôle existant pour AWS, vous pouvez créer un secret pour AWS avec STS en utilisant la commande oc create secret -- from-littéral.

Procédure

  • Dans le CLI, entrez ce qui suit pour générer un secret pour AWS:

    $ oc create secret generic cw-sts-secret -n openshift-logging --from-literal=role_arn=arn:aws:iam::123456789012:role/my-role_with-permissions
    Copy to Clipboard Toggle word wrap

    Exemple secret

    apiVersion: v1
    kind: Secret
    metadata:
      namespace: openshift-logging
      name: my-secret-name
    stringData:
      role_arn: arn:aws:iam::123456789012:role/my-role_with-permissions
    Copy to Clipboard Toggle word wrap

Dans le cas des clusters avec AWS Security Token Service (STS) activés, vous devez créer les rôles et les politiques AWS IAM qui permettent le transfert de journaux, et une ressource personnalisée ClusterLogForwarder (CR) avec une sortie pour CloudWatch.

Conditions préalables

  • Journalisation pour Red Hat OpenShift: 5.5 et versions ultérieures

Procédure

  1. Créer le compte AWS:

    1. Créez un fichier JSON de stratégie IAM avec le contenu suivant:

      {
      "Version": "2012-10-17",
      "Statement": [
          {
          "Effect": "Allow",
          "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:DescribeLogGroups",
            "logs:DescribeLogStreams",
            "logs:PutLogEvents",
            "logs:PutRetentionPolicy"
          ],
          "Resource": "arn:aws:logs:*:*:*"
          }
        ]
      }
      Copy to Clipboard Toggle word wrap
    2. Créez un fichier JSON de confiance IAM avec le contenu suivant:

      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Federated": "arn:aws:iam::<your_aws_account_id>:oidc-provider/<openshift_oidc_provider>" 
      1
      
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
              "StringEquals": {
                "<openshift_oidc_provider>:sub": "system:serviceaccount:openshift-logging:logcollector" 
      2
      
              }
            }
          }
        ]
      }
      Copy to Clipboard Toggle word wrap
      1
      Indiquez votre identifiant de compte AWS et le point de terminaison du fournisseur OpenShift OIDC. Obtenez le point de terminaison en exécutant la commande suivante:
      $ rosa describe cluster \
        -c $(oc get clusterversion -o jsonpath='{.items[].spec.clusterID}{"\n"}') \
        -o yaml | awk '/oidc_endpoint_url/ {print $2}' | cut -d '/' -f 3,4
      Copy to Clipboard Toggle word wrap
      2
      Indiquez à nouveau le point de terminaison OpenShift OIDC.
    3. Créer le rôle de l’IAM:

      $ aws iam create-role
        --role-name “<your_rosa_cluster_name>-RosaCloudWatch” \
        --assume-role-policy-document file://<your_trust_file_name>.json \
        --query Role.Arn \
        --output text
      Copy to Clipboard Toggle word wrap

      Enregistrez la sortie. Dans les prochaines étapes, vous l’utiliserez.

    4. Créer la politique IAM:

      $ aws iam create-policy \
      --policy-name "RosaCloudWatch" \
      --policy-document file:///<your_policy_file_name>.json \
      --query Policy.Arn \
      --output text
      Copy to Clipboard Toggle word wrap

      Enregistrez la sortie. Dans les prochaines étapes, vous l’utiliserez.

    5. Attacher la politique de l’IAM au rôle de l’IAM:

      $ aws iam attach-role-policy \
       --role-name “<your_rosa_cluster_name>-RosaCloudWatch” \
       --policy-arn <policy_ARN> 
      1
      Copy to Clipboard Toggle word wrap
      1
      Remplace policy_ARN par la sortie que vous avez enregistrée lors de la création de la stratégie.
  2. Créer un fichier Secret YAML pour le Red Hat OpenShift Logging Operator:

    apiVersion: v1
    kind: Secret
    metadata:
      name: cloudwatch-credentials
      namespace: openshift-logging
    stringData:
      credentials: |-
        [default]
        sts_regional_endpoints = regional
        role_arn: <role_ARN>  
    1
    
        web_identity_token_file = /var/run/secrets/openshift/serviceaccount/token
    Copy to Clipboard Toggle word wrap
    1
    Il suffit de remplacer role_ARN par la sortie que vous avez enregistrée lors de la création du rôle.
  3. Créer le secret:

    $ oc apply -f cloudwatch-credentials.yaml
    Copy to Clipboard Toggle word wrap
  4. Créer ou modifier une ressource personnalisée ClusterLogForwarder:

    apiVersion: logging.openshift.io/v1
    kind: ClusterLogForwarder
    metadata:
      name: <log_forwarder_name> 
    1
    
      namespace: <log_forwarder_namespace> 
    2
    
    spec:
      serviceAccountName: <service_account_name> 
    3
    
      outputs:
       - name: cw 
    4
    
         type: cloudwatch 
    5
    
         cloudwatch:
           groupBy: logType 
    6
    
           groupPrefix: <group prefix> 
    7
    
           region: us-east-2 
    8
    
         secret:
            name: <your_secret_name> 
    9
    
      pipelines:
        - name: to-cloudwatch 
    10
    
          inputRefs: 
    11
    
            - infrastructure
            - audit
            - application
          outputRefs:
            - cw 
    12
    Copy to Clipboard Toggle word wrap
    1
    Dans les implémentations antérieures, le nom CR doit être instance. Dans les implémentations de transbordeur de journaux multiples, vous pouvez utiliser n’importe quel nom.
    2
    Dans les implémentations héritées, l’espace de noms CR doit être ouvert-logging. Dans les implémentations de transfert de journaux multiples, vous pouvez utiliser n’importe quel espace de noms.
    3
    Le nom de votre compte de service. Le compte de service n’est requis que dans les implémentations de transbordeur de journaux multiples si l’expéditeur de journaux n’est pas déployé dans l’espace de noms openshift-logging.
    4
    Indiquez un nom pour la sortie.
    5
    Indiquez le type de cloudwatch.
    6
    Facultatif: Spécifiez comment regrouper les journaux:
    • logType crée des groupes de journaux pour chaque type de journal
    • namespaceName crée un groupe de journal pour chaque espace de noms d’application. Les journaux d’infrastructure et d’audit ne sont pas affectés, restant regroupés par logType.
    • namespaceUUID crée un nouveau groupe de journaux pour chaque espace de noms d’application UUID. Il crée également des groupes de journaux distincts pour l’infrastructure et les journaux d’audit.
    7
    Facultatif : Spécifiez une chaîne de caractères pour remplacer le préfixe par défaut d’infrastructureName dans les noms des groupes de journaux.
    8
    Indiquez la région AWS.
    9
    Indiquez le nom du secret que vous avez créé précédemment.
    10
    Facultatif : Spécifiez un nom pour le pipeline.
    11
    Indiquez les types de journaux à transmettre en utilisant le pipeline : application, infrastructure ou vérification.
    12
    Indiquez le nom de la sortie à utiliser lors de la transmission des journaux avec ce pipeline.
Retour au début
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. Découvrez nos récentes mises à jour.

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 le Blog 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.

Theme

© 2025 Red Hat