Ce document explique comment télécharger et consulter les journaux d'utilisation et les informations de stockage de vos buckets Cloud Storage, et analyser les journaux à l'aide de Google BigQuery.
Introduction
Cloud Storage propose des journaux d'utilisation et des journaux de stockage sous forme de fichiers CSV que vous pouvez télécharger et consulter. Les journaux d'utilisation fournissent des informations pour toutes les requêtes effectuées sur un bucket spécifié et sont créés toutes les heures. Les journaux de stockage fournissent des informations sur l'espace de stockage consommé par ce bucket pour le jour précédent et sont créés quotidiennement.
Une fois configurés, les journaux d'utilisation et de stockage sont automatiquement générés pour le bucket spécifié, puis stockés en tant que nouveaux objets dans un bucket que vous indiquez.
Les journaux d'utilisation et de stockage sont soumis aux mêmes tarifs que les autres objets stockés dans Cloud Storage.
Faut-il utiliser des journaux d'utilisation ou des journaux d'audit Cloud ?
Dans la plupart des cas, les journaux d'audit Cloud constituent la méthode recommandée pour générer des journaux permettant de suivre les opérations d'API effectuées dans Cloud Storage :
- Les journaux d'audit Cloud effectuent un suivi continu des accès, avec la livraison d'événements dans les secondes qui suivent leur occurrence.
- Les journaux d'audit Cloud produisent des journaux avec lesquels il est plus facile de travailler.
- Les journaux d'audit Cloud permettent de surveiller de nombreux services Google Cloud, pas seulement Cloud Storage.
- Les journaux d'audit Cloud peuvent éventuellement fournir des informations détaillées sur les requêtes et les réponses.
Dans certains cas, vous pouvez utiliser des journaux d'utilisation à la place ou en plus de Cloud Audit Logs. Vous souhaiterez probablement utiliser des journaux d'utilisation si :
- Vous souhaitez suivre l'accès qui se produit car une ressource a
allUsers
ouallAuthenticatedUsers
dans ses paramètres de contrôle d'accès, comme l'accès aux éléments d'un bucket que vous avez configuré pour être un site Web statique. - vous souhaitez suivre les modifications apportées par la fonctionnalité de gestion du cycle de vie des objets ou de classe automatique ;
- vous envisagez d'effectuer des téléchargements authentifiés via un navigateur pour accéder aux objets du bucket ;
- Vous souhaitez que vos journaux incluent des informations de latence, la taille de la requête et de la réponse pour des requêtes HTTP individuelles, ou le chemin d'URL complet et chaque paramètre de requête.
- Vous souhaitez suivre l'accès à certains buckets uniquement dans votre projet et ne souhaitez donc pas activer les journaux d'audit pour l'accès aux données, qui suivent l'accès à tous les buckets de votre projet.
Notez que les journaux d'utilisation ne sont générés qu'une fois par heure et peuvent être retardés, en particulier lors de la création de rapports sur les buckets soumis à des taux de requêtes élevés.
Faut-il utiliser des journaux de stockage ou Monitoring ?
D'une manière générale, vous ne devez pas utiliser les journaux de stockage. L'outil recommandé pour mesurer l'espace de stockage consommé est Monitoring. Contrairement aux journaux de stockage, il fournit des outils de visualisation ainsi que des métriques supplémentaires concernant l'utilisation de l'espace de stockage. Pour obtenir des instructions détaillées sur l'utilisation de Monitoring, consultez la section Déterminer la taille d'un bucket de l'onglet "Console".
Configurer la diffusion des journaux
Avant de configurer la distribution des journaux, vous devez disposer d'un bucket pour stocker les journaux. Ce bucket doit répondre aux exigences suivantes, sans quoi la journalisation échoue :
Le bucket qui stocke les journaux doit exister dans la même organisation que le bucket enregistré.
- Si le bucket enregistré ne fait partie d'aucune organisation, le bucket qui stocke les journaux doit exister dans le même projet que le bucket enregistré.
Si vous utilisez ou activez VPC Service Controls, le bucket qui stocke les journaux doit se situer dans le même périmètre de sécurité que le bucket journalisé.
Si vous ne disposez pas déjà d'un bucket qui répond à ces exigences, créez-le.
Les étapes suivantes décrivent comment configurer la diffusion des journaux pour un bucket :
Ligne de commande
Attribuez le rôle
roles/storage.objectCreator
à Cloud Storage pour le bucket.gcloud storage buckets add-iam-policy-binding gs://example-logs-bucket --member=group:cloud-storage-analytics@google.com --role=roles/storage.objectCreator
Le rôle accorde à Cloud Storage, sous la forme du groupe
cloud-storage-analytics@google.com
, l'autorisation de créer et de stocker vos journaux en tant que nouveaux objets.Les objets journaux disposent de la LCA d'objet par défaut du bucket de journaux, sauf si l'accès uniforme au niveau du bucket est activé sur ce bucket.
Activer la journalisation pour votre bucket à l'aide de l'option
--log-bucket
gcloud storage buckets update gs://example-bucket --log-bucket=gs://example-logs-bucket [--log-object-prefix=log_object_prefix]
Si vous le souhaitez, vous pouvez définir un préfixe d'objet pour vos objets journaux en utilisant l'option
--log-object-prefix
. Le préfixe d'objet constitue le début du nom de l'objet journal. Il peut contenir au maximum 900 caractères et doit être un nom d'objet valide. Par défaut, le préfixe d'objet est le nom du bucket pour lequel les journaux sont activés.
API REST
API JSON
Attribuez le rôle
roles/storage.objectCreator
à Cloud Storage pour le bucket. S'il existe d'autres liaisons IAM au niveau du bucket, veillez à les inclure dans la requête.POST /storage/v1/b/example-logs-bucket/iam Host: storage.googleapis.com { "bindings":[ { "role": "roles/storage.objectCreator", "members":[ "group-cloud-storage-analytics@google.com" ] } ] }
Le rôle accorde à Cloud Storage, sous la forme du groupe
cloud-storage-analytics@google.com
, l'autorisation de créer et de stocker vos journaux en tant que nouveaux objets.Les objets journaux disposent de la LCA d'objet par défaut du bucket de journaux, sauf si l'accès uniforme au niveau du bucket est activé sur ce bucket.
Activez la journalisation pour votre bucket à l'aide de la requête suivante :
PATCH /storage/v1/b/example-bucket Host: storage.googleapis.com { "logging": { "logBucket": "example-logs-bucket", "logObjectPrefix": "log_object_prefix" } }
API XML
Définissez les autorisations de manière à accorder à Cloud Storage l'autorisation
WRITE
sur le bucket. Cela vous permettra de créer et de stocker vos journaux en tant que nouveaux objets. Vous devez ajouter une entrée de LCA au bucket afin d'accorder l'accès en écriture au groupecloud-storage-analytics@google.com
. En plus de la nouvelle LCA, veillez à inclure dans la requête toutes les LCA existantes pour le bucket.PUT /example-logs-bucket?acl HTTP/1.1 Host: storage.googleapis.com <AccessControlList> <Entries> <Entry> <Scope type="GroupByEmail"> <EmailAddress>cloud-storage-analytics@google.com</EmailAddress> </Scope> <Permission>WRITE</Permission> </Entry> <!-- include other existing ACL entries here--> </Entries> </AccessControlList>
Activez la journalisation pour votre bucket à l'aide du paramètre de requête de journalisation :
PUT /example-bucket?logging HTTP/1.1 Host: storage.googleapis.com <Logging> <LogBucket>example-logs-bucket</LogBucket> <LogObjectPrefix>log_object_prefix</LogObjectPrefix> </Logging>
Vérifier l'état de la journalisation
Ligne de commande
Vérifiez la journalisation à l'aide de la commande buckets describe
avec l'option --format
:
gcloud storage buckets describe gs://example-bucket --format="default(logging_config)"
Vous pouvez également enregistrer les configurations de journalisation dans un fichier, comme indiqué ci-dessous :
gcloud storage buckets describe gs://example-bucket > your_logging_configuration_file --format="default(logging_config)"
Si la journalisation est activée, le serveur renvoie la configuration de journalisation dans la réponse :
logging: logBucket: example-logs-bucket logObjectPrefix: log_object_prefix
Si la journalisation n'est pas activée, les éléments suivants sont renvoyés :
null
API REST
API JSON
Envoyez une requête GET pour obtenir la configuration de journalisation du bucket, comme indiqué dans l'exemple suivant :
GET /storage/v1/b/example-bucket?fields=logging Host: storage.googleapis.com
Si la journalisation est activée, le serveur envoie la configuration dans la réponse. La réponse peut ressembler à la suivante :
{ "logging": { "logBucket": "example-logs-bucket", "logObjectPrefix": "log_object_prefix" } }
Si la journalisation n'est pas activée, une configuration vide est renvoyée :
{}
API XML
Envoyez une requête GET Bucket pour obtenir la configuration de journalisation du bucket, comme indiqué dans l'exemple suivant :
GET /example-bucket?logging HTTP/1.1 Host: storage.googleapis.com
Si la journalisation est activée, le serveur envoie la configuration dans la réponse. La réponse peut ressembler à la suivante :
<?xml version="1.0" ?> <Logging> <LogBucket> example-logs-bucket </LogBucket> <LogObjectPrefix> log_object_prefix </LogObjectPrefix> </Logging>
Si la journalisation n'est pas activée, une configuration vide est renvoyée :
<?xml version="1.0" ?> <Logging/>
Télécharger les journaux
Les journaux de stockage sont générés une fois par jour et contiennent la quantité de stockage utilisée le jour précédent. Ils sont généralement créés avant 10h00 PST.
Les journaux d'utilisation sont générés toutes les heures en cas d'activité à signaler dans le bucket surveillé. Les journaux d'utilisation sont généralement créés 15 minutes après l'heure écoulée.
Le moyen le plus simple de télécharger vos journaux d'utilisation et de stockage à partir du bucket dans lequel ils sont stockés consiste à utiliser l'une des méthodes suivantes : console Google Cloud ou CLI gcloud storage
. Les journaux d'utilisation sont fournis au format CSV, selon la convention d'attribution de noms suivante :
OBJECT_PREFIX_usage_TIMESTAMP_ID_v0
De même, les journaux de stockage sont nommés selon la convention ci-dessous :
OBJECT_PREFIX_storage_TIMESTAMP_ID_v0
Par exemple, ce qui suit est le nom d'un objet journal d'utilisation qui utilise le préfixe d'objet par défaut, signale l'utilisation du bucket nommé example-bucket
et a été créée le 18 juin 2022 à 14h UTC :
example-bucket_usage_2022_06_18_14_00_00_1702e6_v0
De même, le nom de l'objet de journal de stockage utilisant le préfixe d'objet par défaut a été créé le 18 juin 2022 pour ce même bucket:
example-bucket_storage_2022_06_18_07_00_00_1702e6_v0
Pour télécharger des journaux, procédez comme suit :
Console
- Dans la console Google Cloud, accédez à la page Buckets Cloud Storage.
Sélectionnez le bucket dans lequel vos journaux sont stockés.
Cliquez sur l'objet journal approprié pour télécharger ou afficher les journaux.
Ligne de commande
Exécutez la commande ci-dessous.
gcloud storage cp gs://BUCKET_NAME/LOGS_OBJECT DESTINATION
Où :
BUCKET_NAME
est le nom du bucket dans lequel les journaux sont stockés. Par exemple,example-logs-bucket
.LOGS_OBJECT
est le nom du journal d'utilisation ou du journal de stockage que vous téléchargez. Exemple :example-bucket_usage_2022_06_18_14_00_00_1702e6_v0
.DESTINATION
est l'emplacement de téléchargement du journal. Par exemple,Desktop/Logs
.
Analyser des journaux dans BigQuery
Pour interroger vos journaux d'utilisation et de stockage Cloud Storage, vous pouvez utiliser Google BigQuery, qui exécute des requêtes rapides de type SQL sur des tables "à ajout seulement". L'outil de ligne de commande BigQuery, bq
, est un outil basé sur Python qui permet d'accéder à BigQuery à partir de la ligne de commande. Pour en savoir plus sur le téléchargement et l'utilisation de bq, consultez la page de référence sur l'outil de ligne de commande bq.
Charger des journaux dans BigQuery
Sélectionnez un projet par défaut.
Reportez-vous à la section Utiliser des projets pour en savoir plus sur la sélection d'un projet.
Créez un ensemble de données.
$ bq mk storageanalysis Dataset 'storageanalysis' successfully created.
Répertoriez les ensembles de données dans le projet :
$ bq ls datasetId
-----------------
storageanalysisEnregistrez les schémas d'utilisation et de stockage sur votre ordinateur pour pouvoir les utiliser dans la commande de chargement.
Ces schémas se trouvent aux emplacements cloud_storage_usage_schema_v0 et cloud_storage_storage_schema_v0. Vous en trouverez également une description à la section Format des journaux d'utilisation et de stockage.
Chargez les journaux d'utilisation dans l'ensemble de données.
$ bq load --skip_leading_rows=1 storageanalysis.usage \ gs://example-logs-bucket/example-bucket_usage_2014_01_15_14_00_00_1702e6_v0 \ ./cloud_storage_usage_schema_v0.json $ bq load --skip_leading_rows=1 storageanalysis.storage \ gs://example-logs-bucket/example-bucket_storage_2014_01_05_14_00_00_091c5f_v0 \ ./cloud_storage_storage_schema_v0.json
Ces commandes permettent d'exécuter les opérations suivantes :
- Charger les journaux d'utilisation et de stockage à partir du bucket
example-logs-bucket
- Créer des tables
usage
etstorage
dans l'ensemble de donnéesstorageanalysis
- Lire les données de schéma (fichier .json) dans le même répertoire que celui où la commande bq est exécutée
- Ignorer la première ligne de chaque fichier journal, qui contient les descriptions de colonne
Dans cet exemple, comme c'est la première fois que vous exécutez la commande de chargement, les tables
usage
etstorage
ont été créées. Vous pouvez continuer à ajouter d'autres commandes de chargement à ces tables avec des noms de fichiers journaux d'utilisation différents ou en utilisant des caractères génériques. Par exemple, la commande suivante ajoute les données de tous les journaux commençant par "bucket_usuage_2014" à la tablestorage
:$ bq load --skip_leading_rows=1 storageanalysis.usage \ gs://example-logs-bucket/bucket_usage_2014* \ ./cloud_storage_usage_schema.json
Lorsque vous utilisez des caractères génériques, vous pouvez déplacer les journaux déjà importés dans BigQuery vers un autre répertoire (par exemple,
gs://example-logs-bucket/processed
) pour éviter d'importer plusieurs fois les données d'un journal.- Charger les journaux d'utilisation et de stockage à partir du bucket
La fonctionnalité BigQuery est également accessible via l'interface Web de BigQuery. Cet outil vous permet de charger des données via le processus de création de table.
Pour en savoir plus sur le chargement de données depuis Cloud Storage, y compris de manière automatisée, consultez la section Charger des données à partir de Cloud Storage.
Modifier le schéma des journaux d'utilisation
Dans certains scénarios, il peut être utile de prétraiter les journaux d'utilisation avant de les charger dans BigQuery. Par exemple, vous pouvez ajouter des informations aux journaux d'utilisation pour faciliter l'analyse de requêtes dans BigQuery. Dans cette section, nous verrons comment ajouter au journal le nom de fichier de chaque journal d'utilisation au stockage. Pour cela, il est nécessaire de modifier le schéma existant ainsi que chaque fichier journal.
Modifiez le schéma existant, cloud_storage_storage_schema_v0, de manière à ajouter le nom du fichier, comme indiqué ci-dessous. Attribuez un nom au nouveau schéma, par exemple cloud_storage_storage_schema_custom.json, afin de le distinguer de l'original.
[ {"name": "bucket", "type": "string", "mode": "REQUIRED"}, {"name": "storage_byte_hours","type": "integer","mode": "REQUIRED"}, {"name": "filename","type": "string","mode": "REQUIRED"} ]
Prétraitez les fichiers des journaux d'utilisation de l'espace de stockage basés sur le nouveau schéma avant de les charger dans BigQuery.
Par exemple, dans les environnements Linux, macOS ou Windows (Cygwin), vous pouvez utiliser les commandes ci-dessous :
gcloud storage cp gs://example-logs-bucket/example-bucket_storage\* . for f in example-bucket_storage\*; do sed -i -e "1s/$/,\"filename\"/" -e "2s/$/,\""$f"\"/" $f; done
La commande
gcloud storage
copie les fichiers dans votre répertoire de travail. La deuxième commande parcourt les fichiers journaux, et ajoute "filename" à la ligne de description (première ligne) et le nom de fichier actuel à la ligne de données (deuxième ligne). Voici un exemple de fichier journal modifié :"bucket","storage_byte_hours","filename" "example-bucket","5532482018","example-bucket_storage_2014_01_05_08_00_00_021fd_v0"
Lorsque vous chargez les journaux d'utilisation du stockage dans BigQuery, chargez vos journaux modifiés localement et utilisez le schéma personnalisé.
for f in example-bucket_storage\*; \ do ./bq.py load --skip_leading_rows=1 storageanalysis.storage $f ./cloud_storage_storage_schema_custom.json; done
Interroger des journaux dans BigQuery
Une fois les journaux chargés dans BigQuery, vous pouvez interroger vos journaux d'utilisation pour obtenir des informations sur votre ou vos buckets de journalisation. L'exemple suivant montre comment utiliser l'outil bq pour quand vous avez des journaux d'utilisation pour un bucket sur plusieurs jours et que vous les avez chargés comme indiqué à la section Charger des journaux d'utilisation dans BigQuery Vous pouvez également exécuter les requêtes ci-dessous à l'aide de l'outil de navigation de BigQuery.
Activez le mode interactif dans l'outil bq.
$ bq shell
Exécutez une requête sur la table de journaux de stockage.
Par exemple, la requête suivante montre comment le stockage d'un bucket journalisé évolue dans le temps. Cela suppose que vous avez modifié les journaux d'utilisation du stockage, comme décrit à la section Modifier le schéma des journaux d'utilisation, et que les fichiers journaux sont nommés "logstorage*".
project-name>SELECT SUBSTRING(filename, 13, 10) as day, storage_byte_hours/24 as size FROM [storageanalysis.storage] ORDER BY filename LIMIT 100
Exemple de résultat de la requête :
Waiting on bqjob_r36fbf5c164a966e8_0000014379bc199c_1 ... (0s) Current status: DONE +------------+----------------------+ | day | size | +------------+----------------------+ | 2014_01_05 | 2.3052008408333334E8 | | 2014_01_06 | 2.3012297245833334E8 | | 2014_01_07 | 3.3477797120833334E8 | | 2014_01_08 | 4.4183686058333334E8 | +-----------------------------------+
Si vous n'avez pas modifié le schéma et que vous utilisez celui par défaut, vous pouvez exécuter la requête ci-dessous :
project-name>SELECT storage_byte_hours FROM [storageanalysis.storage] LIMIT 100
Exécutez une requête sur la table de journaux d'utilisation.
Par exemple, la requête suivante montre comment récapituler les méthodes de requête que les clients utilisent pour accéder aux ressources du bucket journalisé.
project-name>SELECT cs_method, COUNT(*) AS count FROM [storageanalysis.usage] GROUP BY cs_method
Exemple de résultat de la requête :
Waiting on bqjob_r1a6b4596bd9c29fb_000001437d6f8a52_1 ... (0s) Current status: DONE +-----------+-------+ | cs_method | count | +-----------+-------+ | PUT | 8002 | | GET | 12631 | | POST | 2737 | | HEAD | 2173 | | DELETE | 7290 | +-----------+-------+
Quittez le shell interactif de l'outil bq.
project-name> quit
Désactiver la journalisation
Ligne de commande
Désactivez la journalisation avec l'option --clear-log-bucket
dans la commande buckets update
:
gcloud storage buckets update gs://example-bucket --clear-log-bucket
Pour vérifier que la journalisation a bien été désactivée, utilisez la commande buckets describe
:
gcloud storage buckets describe gs://example-bucket --format="default(logging_config)"
Si la journalisation est désactivée, les éléments suivants sont renvoyés :
null
API REST
API JSON
Désactivez la journalisation en envoyant une requête PATCH à la configuration de journalisation du bucket, comme indiqué dans l'exemple suivant.
PATCH /example-bucket?logging HTTP/1.1 Host: storage.googleapis.com { "logging": null }
API XML
Désactivez la journalisation en envoyant une requête PUT à la configuration de journalisation du bucket, comme indiqué dans l'exemple suivant :
PUT /example-bucket?logging HTTP/1.1 Host: storage.googleapis.com <Logging/>
Format des journaux d'utilisation et de stockage
Les journaux d'utilisation et de stockage peuvent fournir une quantité accablante d'informations. Pour vous aider à déterminer la nature de toutes ces informations, consultez les tableaux ci-après.
Champs de journal d'utilisation :
Champ | Type | Description |
---|---|---|
time_micros |
entier | Heure à laquelle la requête a été effectuée, exprimée en microsecondes depuis l'époque Unix. |
c_ip |
chaîne | Adresse IP à partir de laquelle la requête a été envoyée. Le préfixe "c" indique qu'il s'agit d'informations sur le client. |
c_ip_type |
entier | Type d'adresse IP dans le champ "c_ip" :
|
c_ip_region |
chaîne | Réservé pour une utilisation ultérieure. |
cs_method |
chaîne | Méthode HTTP de cette requête. Le préfixe "cs" indique que cette information a été envoyée du client au serveur. |
cs_uri |
chaîne | URI de la requête. |
sc_status |
entier | Code d'état HTTP envoyé par le serveur en réponse. Le préfixe "sc" indique que cette information a été envoyée du serveur au client. |
cs_bytes |
entier | Nombre d'octets envoyés dans la requête. |
sc_bytes |
entier | Nombre d'octets envoyés dans la réponse. |
time_taken_micros |
entier | Délai de réponse à la requête en microsecondes, mesuré à partir du moment où le premier octet est reçu jusqu'au moment où la réponse est envoyée. Notez que pour les importations avec reprise, le point final est déterminé par la réponse à la requête d'importation finale faisant partie de l'importation avec reprise. |
cs_host |
chaîne | Hôte dans la requête d'origine. |
cs_referer |
chaîne | Référent HTTP de la requête. |
cs_user_agent |
chaîne | User-Agent de la requête. La valeur est GCS Lifecycle Management pour les requêtes effectuées par la fonctionnalité de gestion du cycle de vie. |
s_request_id |
chaîne | Identifiant de la requête. |
cs_operation |
chaîne | Opération Cloud Storage, par exemple GET_Object . Ce paramètre peut être nul. |
cs_bucket |
chaîne | Bucket spécifié dans la requête. |
cs_object |
chaîne | Objet spécifié dans cette requête. La valeur peut être nulle. |
Champs de journal de stockage :
Champ | Type | Description |
---|---|---|
bucket |
chaîne | Nom du bucket. |
storage_byte_hours |
entier | Taille moyenne du bucket en octets par heure sur une période de 24 heures. Pour obtenir la taille totale du bucket, divisez le nombre d'octets à l'heure par 24. |