Collecter des journaux à partir de vos workflows

Cette page décrit le processus de collecte des journaux de vos workflows dans les environnements Google Distributed Cloud (GDC) isolés pour faciliter la journalisation et l'observabilité des données.

Les journaux enregistrent les conditions et les actions lorsque vous gérez des opérations dans GDC. Vous pouvez extraire les journaux générés par vos composants pour enregistrer les événements et les activités. La plate-forme de journalisation propose une API personnalisée pour collecter les journaux au niveau du projet générés par vos workflows via des cibles de journalisation.

Pour commencer à collecter des données de journaux, déployez une ressource personnalisée LoggingTarget dans l'espace de noms de votre projet sur le serveur de l'API Management. Une fois que le collecteur de journaux extrait les données de vos workflows, la plate-forme de journalisation agrège les journaux de toutes les sources de journaux, ajoute des index et associe les journaux à des libellés en fonction de la configuration de la ressource personnalisée LoggingTarget.

Accédez aux journaux collectés à l'aide de l'interface utilisateur Grafana ou de l'API Log Query, comme indiqué dans Interroger et afficher les journaux.

Pour connaître les bonnes pratiques d'implémentation de la journalisation pour l'observabilité des données, consultez les consignes de la communauté Kubernetes :

https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/logging.md.

Avant de commencer

Pour obtenir les autorisations nécessaires pour gérer les ressources personnalisées LoggingTarget, demandez à votre administrateur IAM de l'organisation ou du projet de vous accorder l'un des rôles LoggingTarget associés.

Selon le niveau d'accès et les autorisations dont vous avez besoin, vous pouvez obtenir des rôles de créateur, d'éditeur ou de lecteur pour cette ressource dans une organisation ou un projet. Pour en savoir plus, consultez Préparer les autorisations IAM.

Configurer la ressource personnalisée LoggingTarget

La ressource personnalisée LoggingTarget indique au pipeline de journalisation de collecter les journaux de votre projet GDC. Vous pouvez spécifier les cibles pour lesquelles vous collectez des journaux, un analyseur de journaux, des niveaux d'accès et d'autres paramètres.

Cette ressource définit les configurations suivantes :

  • Cibles : critères de sélection des pods et des conteneurs à partir desquels vous souhaitez collecter des journaux. Vous pouvez spécifier des noms de cluster, des préfixes de nom de pod et des préfixes de nom de conteneur.
  • Analyseur de journaux : analyseur prédéfini permettant d'interpréter les entrées de journaux, de mapper les sorties de journaux sur des libellés et d'extraire les champs pertinents.
  • Identification du service : nom du service appliqué en tant que libellé aux entrées de journal pour faciliter l'identification et le filtrage.
  • Autorisation : niveau d'accès aux entrées de journal, qui contrôle qui peut afficher les journaux collectés.

En configurant ces paramètres dans la ressource personnalisée LoggingTarget, vous pouvez contrôler précisément la collecte et l'organisation des journaux.

Pour collecter les journaux opérationnels, procédez comme suit :

  1. Déterminez le projet GDC à partir duquel vous souhaitez collecter les journaux.
  2. Dans votre configuration LoggingTarget, spécifiez les pods pour collecter vos journaux opérationnels, l'espace de noms du projet et tous les paramètres supplémentaires.

    Le fichier YAML suivant montre un exemple de configuration LoggingTarget dans my-project-namespace, où le préfixe du nom du pod à partir duquel collecter les journaux est my-pod-prefix, le niveau d'accès aux entrées de journal est accordé aux opérateurs d'application (ao), le nom du service est my-service-name et le format du journal est JSON :

    # Configures a log scraping job
    apiVersion: logging.gdc.goog/v1
    kind: LoggingTarget
    metadata:
      # Choose a namespace that matches the namespace of the workload pods.
      namespace: my-project-namespace
      name: my-logging-target
    spec:
      selector:
        matchPodNames:
          - my-pod-prefix
      parser: json
      logAccessLevel: ao
      serviceName: my-service-name
    

    Consultez la spécification complète de LoggingTarget et la documentation de référence de l'API pour découvrir d'autres champs et options.

  3. Appliquez la configuration LoggingTarget au serveur de l'API Management dans le même espace de noms que vos pods cibles :

    kubectl --kubeconfig KUBECONFIG_PATH apply -f LOGGING_TARGET_NAME.yaml
    

    Remplacez les éléments suivants :

    • KUBECONFIG_PATH : chemin d'accès au fichier kubeconfig pour le serveur de l'API Management.
    • LOGGING_TARGET_NAME : nom du fichier de définition LoggingTarget, tel que my-logging-target.

    Le pipeline de journalisation commence à collecter les journaux des composants supplémentaires de votre projet.

Vous pouvez interroger les journaux collectés à l'aide de l'interface utilisateur Grafana ou de l'API Log Query. Pour en savoir plus, consultez Interroger et afficher les journaux.

Si vous utilisez Grafana pour interroger vos journaux, vous pouvez utiliser la fonctionnalité de code couleur intégrée pour différents niveaux de journaux. Pour en savoir plus sur la définition des valeurs de niveau de journalisation, consultez https://grafana.com/docs/grafana/latest/explore/logs-integration/.

Spécification complète de LoggingTarget

Le fichier YAML suivant montre un exemple de spécification complète de la ressource personnalisée LoggingTarget. Pour en savoir plus et obtenir une description complète des champs, consultez la documentation de référence sur les API.

# Configures a log scraping job
apiVersion: logging.gdc.goog/v1
kind: LoggingTarget
metadata:
  # Choose a namespace that matches the namespace of the workload pods.
  namespace: PROJECT_NAMESPACE
  name: LOGGING_TARGET_NAME
spec:
  # Choose a matching pattern that identifies the pods for this job.
  # Optional.
  # Relationship between different selectors: 'AND'
  selector:
    # The clusters to collect logs from.
    # The default configuration is to collect logs from all clusters.
    # The relationship between different clusters is an 'OR' relationship.
    # Optional
    matchClusters:
    - my-cluster
    - another-cluster

    # The pod name prefixes to collect logs from.
    # The logging platform scrapes all pods with names
    # that start with the specified prefixes.
    # The values must contain '[a-z0-9-]' characters only.
    # The relationship between different list elements is an 'OR' relationship.
    # Optional.
    matchPodNames:
      - my-pod-prefix
      - another-pod-prefix

    # The container name prefixes to collect logs from.
    # The logging platform scrapes all containers with names
    # that start with the specified prefixes.
    # The values must contain '[a-z0-9-]' characters only.
    # The relationship between different list elements is an 'OR' relationship.
    # Optional.
    matchContainerNames:
      - my-container-prefix
      - another-container-prefix

  # Choose the predefined parser for log entries.
  # Use parsers to map the log output to labels and extract fields.
  # Specify the log format.
  # Optional.
  # Options: klog_text, klog_json, klogr, gdch_json, json
  parser: klog_text

  # Specify an access level for log entries.
  # The default value is 'ao'.
  # Optional.
  # Options: ao, pa, io
  logAccessLevel: ao

  # Specify a service name to be applied as a label.
  # For user workloads consider this field as a workload name.
  # Required.
  serviceName: my-service-name

  # The additional static fields to apply to log entries.
  # The field is a key-value pair, where the field name is the key and
  # the field value is the value.
  # Optional.
  additionalFields:
    app: workload2
    key: value

Remplacez les éléments suivants :

  • PROJECT_NAMESPACE : espace de noms de votre projet.
  • LOGGING_TARGET_NAME : nom du fichier de définition LoggingTarget.