← Google Cloud pour les devs : gcloud et Cloud Logging

gcloud et Cloud Logging — antisèche

Les commandes et requêtes du cours, sur une page.

gcloud : se connecter et choisir son projet

BesoinCommande
Première configurationgcloud init
Identité de la CLIgcloud auth login
Identité des bibliothèques clientes (ADC)gcloud auth application-default login
Voir compte et projet actifsgcloud config list
Changer de projetgcloud config set project ID_DU_PROJET
Une config par environnementgcloud config configurations create dev puis … activate dev
Viser un projet pour une seule commande--project=ID_DU_PROJET
Activer l’API Logginggcloud services enable logging.googleapis.com
Sortie pour script / humain / brute--format=json · --format="table(…)" · --format="value(…)"
Aide d’une commandegcloud logging read --help

Piège classique : gcloud auth login ne suffit pas pour ton code Python en local. Les bibliothèques lisent les ADC, créées par gcloud auth application-default login.

Cloud Logging : les concepts

ÉlémentÀ retenir
Entrée de logtimestamp · severity · resource · logName · textPayload / jsonPayload · httpRequest · trace
SévéritésDEFAULT < DEBUG < INFO < NOTICE < WARNING < ERROR < CRITICAL < ALERT < EMERGENCY
Log RouterChaque entrée passe par les sinks (filtre d’inclusion + exclusions → destination)
Destinationsbucket de logs · BigQuery · Cloud Storage · Pub/Sub · autre projet
_Requiredaudit Admin Activity, System Event… · 400 jours · non modifiable
_Defaulttout le reste · 30 jours par défaut · réglable
Réduire la factureexclusions sur les logs bruyants, pas de DEBUG en prod
Rôle IAMPermet
roles/logging.viewerlire les logs (hors Data Access)
roles/logging.privateLogViewerlire aussi les logs Data Access
roles/logging.configWritergérer sinks, buckets, métriques
roles/logging.admintout
roles/logging.logWriterécrire des logs (compte de service d’une app)
gcloud logging buckets list
gcloud logging buckets update _Default --location=global --retention-days=365
gcloud logging sinks create NOM DESTINATION --log-filter='severity>=ERROR'
gcloud logging logs list

Langage de requête

BesoinRequête
Égal / différentseverity="ERROR" · severity!="INFO"
Au moins un niveauseverity>=WARNING
Un service Cloud Runresource.type="cloud_run_revision" puis resource.labels.service_name="api"
Erreurs serveurhttpRequest.status>=500
Un champ JSONjsonPayload.userId="u-42"
Contient (sous-chaîne)jsonPayload.message:"timeout"
Expression régulièrejsonPayload.message =~ "(?i)timeout"
Un mot, partoutSEARCH("timeout")
Une plage de tempstimestamp>="2026-11-05T09:00:00Z" AND timestamp<"2026-11-05T10:00:00Z"
Toute une requêtetrace="projects/PROJET/traces/ID"

Une condition par ligne = AND implicite. AND, OR, NOT s’écrivent en majuscules. Les heures sont en UTC.

Lire depuis le terminal

gcloud logging read 'severity>=ERROR' --freshness=1h --limit=20 --project=ID
gcloud logging read 'severity>=ERROR' --freshness=1h --limit=10 \
  --format='value(timestamp,severity,jsonPayload.message)'
gcloud logging read 'severity>=ERROR' --limit=500 --format=json | jq '.[].jsonPayload'
gcloud beta logging tail 'severity>=WARNING'

Écrire des logs structurés (Python)

Tableaux de bord et alertes

gcloud logging metrics create erreurs_5xx \
  --description="Réponses 5xx" --log-filter='httpRequest.status>=500'
gcloud logging metrics list
gcloud monitoring dashboards create --config-from-file=dashboard.json --validate-only
gcloud monitoring dashboards create --config-from-file=dashboard.json

Outils du quotidien

BesoinOutil
Aide sur --filter / --formatgcloud topic filters · gcloud topic formats
Déboguer une commande gcloud--verbosity=debug · --log-http (ne pas coller la sortie dans un ticket)
Région par défaut Cloud Rungcloud config set run/region europe-west1
Lire les logs en PythonClient(project=…).list_entries(filter_=…, order_by=DESCENDING, max_results=…)
Shell prêt à l’emploiCloud Shell (gcloud préinstallé)
Logs dans l’éditeurCloud Code (VS Code)

Helpers : en lecture seule, --project explicite, toujours un --limit, jamais d’identifiants dans le dépôt.

Voir aussi la carte du cours.