Scénarios d'exportation Cloud Logging : Elasticsearch

Ce scénario montre comment exporter les journaux sélectionnés de Logging vers un cluster Elasticsearch. Elasticsearch est une base de données de documents Open source qui ingère, indexe et analyse des données non structurées telles que les journaux, les métriques et autres méthodes de télémétrie. L'intégration des journaux collectés par Logging avec les journaux dont vous pourriez disposer dans Elasticsearch vous offre une solution unifiée d'analyse des journaux.

Ce scénario fait partie de la série Modèles de conception pour les exportations Stackdriver Logging.

Présentation

La suite Elastic Stack propose plusieurs solutions pour intégrer des données dans un cluster Elasticsearch. Logstash et Beats sont les principaux produits utilisés pour collecter, transformer et intégrer des données. Le choix entre Logstash et Beats dépend de votre volume de données, des taux d'ingestion et des exigences de latence. Cette solution est axée sur le composant Logstash de la suite Elastic Stack car il s'agit de l'option la plus flexible pour travailler avec les journaux exportés à partir de Logging.

Logstash vous permet de collecter, de transformer et d'exporter des journaux à partir de plusieurs sources et destinations. Il est préférable d'utiliser Logstash lorsque le volume des journaux est élevé. Vous pouvez utiliser le plug-in d'entrée Pub/Sub et le plug-in d'entrée Cloud Storage pour intégrer Logstash à Elasticsearch.

Beats est une plate-forme Open Source destinée aux transporteurs de données légers dans Elasticsearch. Vous pouvez utiliser le transporteur pubsubbeat pour ingérer des messages Pub/Sub dans Elasticsearch. Bien qu'il existe un transporteur gcsbeat, celui-ci est conçu pour le transport léger des fichiers au niveau racine d'un bucket. Ce n'est donc pas la meilleure solution pour importer les journaux exportés par Logging.

Utilisez Beats dans les cas suivants :

  • Votre volume de journaux est faible et peut être géré par une seule machine.
  • Vous ne voulez pas avoir à gérer Logstash.
  • Les pipelines d'ingestion Elastic ingestion peuvent répondre à vos besoins d'enrichissement des journaux.

Utilisez Logstash dans les cas suivants :

  • Votre volume des journaux est élevé.
  • Vous devez enrichir vos journaux au-delà des capacités des pipelines d'ingestion Elastic.
  • Vous devez être en mesure d'exporter les journaux vers des systèmes autres qu'Elasticsearch.
Volume élevé ou interactions élevées Volume faible et interactions faibles
Temps réel logstash-input-google_pubsub pubsubbeat
À terme logstash-input-google_cloud_storage gcsbeat

Le schéma suivant montre l'architecture d'exportation par lots et en temps réel vers Elasticsearch à l'aide de Logstash.

Architecture d'exportation par lots et en temps réel vers Elasticsearch à l'aide de Logstash.

Configurer l'exportation de la journalisation en temps réel

Dans cette section, vous créez le pipeline pour l'exportation en temps réel des journaux de Logging vers Logstash à l'aide de Pub/Sub.

Configurer un sujet Pub/Sub

Activer les journaux d'audit pour tous les services

Les journaux d'audit d'accès aux données sont désactivés par défaut (sauf dans BigQuery). Pour activer tous les journaux d'audit, suivez les instructions pour mettre à jour la stratégie IAM avec la configuration répertoriée dans la documentation sur la stratégie d'audit. Les étapes sont les suivantes :

  • Télécharger la stratégie IAM actuelle sous forme de fichier
  • Ajouter au fichier de stratégie actuel l'objet JSON ou YAML de stratégie des journaux d'audit
  • Mettre à jour le projet Google Cloud avec le fichier de stratégie modifié

Voici un exemple d'objet JSON qui active tous les journaux d'audit pour tous les services.

"auditConfigs": [
    {
        "service": "allServices",
        "auditLogConfigs": [
            { "logType": "ADMIN_READ" },
            { "logType": "DATA_READ"  },
            { "logType": "DATA_WRITE" }
        ]
    }
],

Configurer l'exportation de journaux

Une fois que vous avez configuré des exportations agrégées ou l'exportation de journaux, vous devez affiner les filtres de journalisation afin d'exporter les journaux d'audit, les journaux associés aux machines virtuelles, les journaux de stockage et les journaux de base de données. Le filtre de journalisation suivant inclut les journaux d'audit des activités d'administration et ceux de l'accès aux données, ainsi que les journaux correspondant à des types de ressources spécifiques.

logName:"/logs/cloudaudit.googleapis.com" OR
resource.type:gce OR
resource.type=gcs_bucket OR
resource.type=bigquery_resource

À partir de l'outil de ligne de commande gcloud, utilisez la commande gcloud logging sinks create ou l'appel d'API organizations.sinks.create pour créer un récepteur doté des filtres appropriés. L'exemple de commande gcloud suivant crée un récepteur nommé gcp_logging_sink_pubsub pour l'organisation. Le récepteur inclut tous les projets enfants et spécifie le filtrage permettant de sélectionner des journaux d'audit spécifiques.

ORG_ID=your-org-id
PROJECT_ID=$(gcloud config get-value project)
gcloud logging sinks create gcp_logging_sink_pubsub \
    pubsub.googleapis.com/projects/${PROJECT_ID}/topics/logs-export-topic \
    --log-filter='logName="/logs/cloudaudit.googleapis.com" OR resource.type:"gce" OR resource.type="gcs_bucket" OR resource.type="bigquery_resource"' \
    --include-children \
    --organization=${ORG_ID}

Le résultat ressemble à ce qui suit :

Created [https://logging.googleapis.com/v2/organizations/your-org-id/sinks/gcp_logging_export_pubsub_sink].
Please remember to grant `serviceAccount:gcp-logging-export-pubsub-si@logging-oyour-org-id.iam.gserviceaccount.com` Pub/Sub Publisher role to the topic.
More information about sinks can be found at /logging/docs/export/configure_export

Dans l'entrée serviceAccount renvoyée par l'appel d'API, l'identité gcp-logging-export-pubsub-si@logging-oyour-org-id.iam.gserviceaccount.com est incluse dans la réponse. Cette identité représente un compte de service Google Cloud créé pour l'exportation. Tant que vous n'accordez pas à cette identité l'autorisation de publier dans le sujet de destination, les exportations d'entrées de journal issues de ce récepteur échoueront. Pour en savoir plus, consultez la section ci-après ou la documentation suivante : Accorder l'accès pour une ressource.

Définir les autorisations de stratégie IAM pour le sujet Pub/Sub

En ajoutant le compte de service gcp-logging-export-pubsub-si@logging-oyour-org-id.iam.gserviceaccount.com au sujet pubsub.googleapis.com/projects/${PROJECT_ID}/topics/logs-export-topic avec les autorisations de publication Pub/Sub, vous accordez au compte de service l'autorisation de publier dans le sujet. Tant que vous n'aurez pas ajouté ces autorisations, les opérations d'exportation depuis le récepteur échoueront.

Pour ajouter les autorisations au compte de service, procédez comme suit :

  1. Dans Cloud Console, ouvrez la page Sujets Cloud Pub/Sub :

    ACCÉDER À LA PAGE "SUJETS"

  2. Sélectionnez le nom du sujet.

  3. Cliquez sur Afficher le panneau d'informations, puis configurez les autorisations. Assurez-vous que l'autorisation "Pub/Sub Publisher" (Éditeur Pub/Sub) est sélectionnée.

    Définissez les autorisations.

Une fois que vous avez créé l'exportation de journalisation à l'aide de ce filtre, les fichiers journaux commencent à remplir le sujet Pub/Sub du projet configuré. Vous pouvez vérifier que le sujet reçoit des messages dans l'Explorateur de métriques de Cloud Monitoring. À l'aide du type de ressource et de la métrique ci-dessous, observez le nombre d'opérations d'envoi de messages sur une courte période. Si vous avez correctement configuré l'exportation, vous constaterez une activité supérieure à 0 sur le graphique, comme illustré dans cette capture d'écran.

  • Type de ressource : pubsub_topic
  • Métrique : pubsub.googleapis.com/topic/send_message_operation_count
  • Filtre : topic_id="logs-export-topic"

Activité dans le graphique Explorateur de métriques.

Configurer l'exportation de la journalisation

La durée de conservation des journaux étant limitée dans Logging, il est recommandé d'exporter la journalisation vers Cloud Storage. L'utilisation de Logstash pour ingérer des journaux exportés vous permet d'effectuer une recherche en dehors des durées de conservation par défaut et de remplir à nouveau la base de données Elasticsearch.

Configurer Logstash

  1. Téléchargez la dernière version de logstash.
  2. Créez un compte de service IAM et une clé de compte JSON pour gcsbeat dotés des rôles Cloud Storage Admin et Pub/Sub Subscriber.
  3. Installez les plug-ins d'entrée Cloud Storage et Cloud Pub/Sub pour Logstash en exécutant la commande suivante à partir de votre répertoire d'installation Logstash :

    ./bin/logstash-plugin install \
        logstash-input-google_cloud_storage \
        logstash-input-exec \
        logstash-input-google_pubsub
    

Créer le pipeline d'ingestion par lots

  • Créez un fichier de configuration Logstash pour Cloud Storage comme celui-ci, en remplaçant my-cloud-logs par l'ID de votre bucket :

    input {
      google_cloud_storage {
        type => "gcs"
        interval => 60
        bucket_id => "my-cloud-logs"
        json_key_file => "logstash-sa.json"
        file_matches => ".*\.json"
        codec => "json"
      }
    }
    
    output {
      elasticsearch {
        document_id => "%{[@metadata][gcs][line_id]}"
      }
    }
    

    Pour obtenir la liste de toutes les options, consultez la documentation de la configuration du plug-in google_cloud_storage.

Les objets dans Cloud Storage qui ont été traités par Logstash sont marqués à l'aide de l'élément de métadonnées x-goog-meta-ls-gcs-input:processed. Le plug-in d'entrée ignore tous les objets comportant cet élément de métadonnées. Si vous envisagez de retraiter les données, vous devrez supprimer l'étiquette de métadonnées manuellement.

Créer le pipeline en temps réel

  • Créez un fichier de configuration logstash pour la source Pub/Sub sous la forme suivante :

    input {
      google_pubsub {
          type => "pubsub"
          project_id => "my-project-id"
          topic => "logs-export-topic"
          subscription => "logstash"
          json_key_file => "logstash-sa.json"
      }
    }
    
    output {
      elasticsearch {
        document_id => "%{[@metadata][pubsub_message][messageId]}"
      }
    }
    

Pour obtenir la liste complète des éléments de configuration, reportez-vous à la documentation du plug-in.

Insertions idempotentes

Elasticsearch utilise le champ _id d'un document comme identifiant unique. Dans Logstash, vous pouvez utiliser les éléments [@metadata] et les autres champs de message pour créer un ID de document unique en fonction des types de messages des journaux Logging.

La documentation des métadonnées du plug-in google_cloud_storage comporte une liste des champs de métadonnées Logstash disponibles. Le champ [@metadata][gcs][line_id] est inséré explicitement pour les cas d'utilisation visant à créer des identifiants de documents idempotents.

Le plug-in google_pubsub plugin contient également une liste de champs de métadonnées. Le champ [@metadata][pubsub_message][messageId] est couramment utilisé pour la déduplication.

Utiliser les journaux exportés

Une fois les journaux exportés ingérés dans Elasticsearch et une fois Beat en temps réel déployé en tant que service, vous pouvez utiliser Elasticsearch et les produits de la suite Elastic Stack pour effectuer les tâches suivantes :

  • Faire des recherches dans les journaux
  • Mettre des événements complexes en corrélation
  • Créer des alertes automatiques.
  • Explorer les relations dans vos données sous forme de graphique.
  • Visualiser les résultats à l'aide des tableaux de bord Kibana.

Étapes suivantes