Google Cloud Cheatsheet

Monitoring

Use this Google Cloud reference while you build software engineering projects, review code for technical interview prep, or polish examples for a software engineer resume.

Cloud Monitoring (Metrics)

# There is no GA gcloud command to list or read metrics — use the REST API
# (or Metrics Explorer in the Console).

# List metric descriptors
curl -s -G -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://monitoring.googleapis.com/v3/projects/my-project/metricDescriptors" \
  --data-urlencode 'filter=metric.type = starts_with("compute.googleapis.com")'

# Read time series (CPU utilization for one VM, 5-minute window)
curl -s -G -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://monitoring.googleapis.com/v3/projects/my-project/timeSeries" \
  --data-urlencode 'filter=metric.type="compute.googleapis.com/instance/cpu/utilization" AND resource.labels.instance_id="INSTANCE_ID"' \
  --data-urlencode 'interval.startTime=2025-06-13T10:00:00Z' \
  --data-urlencode 'interval.endTime=2025-06-13T10:05:00Z'

# GA gcloud surface covers dashboards, uptime checks, and snoozes
gcloud monitoring dashboards list

Cloud Logging

# Read recent log entries
gcloud logging read "resource.type=gce_instance" --limit=50

# Read logs for a specific VM
gcloud logging read \
  'resource.type="gce_instance" AND resource.labels.instance_id="INSTANCE_ID"' \
  --limit=100 \
  --format=json

# Tail logs in real time
gcloud logging tail 'resource.type="cloud_run_revision"'

# Read App Engine logs
gcloud logging read 'resource.type="gae_app"' --limit=20

# Read logs by severity
gcloud logging read 'severity>=ERROR' --limit=50 --freshness=1h

# Write a log entry (useful for testing)
gcloud logging write my-log "Test message" --severity=INFO

Log Filters (Common Patterns)

# Errors in Cloud Run service
resource.type="cloud_run_revision"
resource.labels.service_name="my-service"
severity>=ERROR

# HTTP 5xx on a load balancer
resource.type="http_load_balancer"
httpRequest.status>=500

# Cloud SQL slow queries
resource.type="cloudsql_database"
textPayload:"duration"

# Specific user activity (Admin Activity audit log)
logName="projects/my-project/logs/cloudaudit.googleapis.com%2Factivity"
protoPayload.authenticationInfo.principalEmail="alice@example.com"

Log Sinks (Export Logs)

# Export logs to Cloud Storage
gcloud logging sinks create my-gcs-sink \
  storage.googleapis.com/my-log-bucket \
  --log-filter='severity>=WARNING'

# Export to BigQuery
gcloud logging sinks create my-bq-sink \
  bigquery.googleapis.com/projects/my-project/datasets/logs_dataset \
  --log-filter='resource.type="cloud_run_revision"'

# Export to Pub/Sub
gcloud logging sinks create my-pubsub-sink \
  pubsub.googleapis.com/projects/my-project/topics/log-topic

# List sinks
gcloud logging sinks list

# Update a sink filter
gcloud logging sinks update my-gcs-sink \
  --log-filter='severity>=ERROR'

# Delete a sink
gcloud logging sinks delete my-gcs-sink

Log-Based Metrics

# Create a counter metric from log entries
gcloud logging metrics create error-count \
  --description="Count of ERROR log entries" \
  --log-filter='severity>=ERROR'

# Create a distribution metric (e.g., request latency from logs)
gcloud logging metrics create request-latency \
  --description="Request latency distribution" \
  --log-filter='resource.type="cloud_run_revision"' \
  --value-extractor='EXTRACT(jsonPayload.latency_ms)'

# List metrics
gcloud logging metrics list

Alerting Policies

# Policy management via gcloud is still alpha (Console/Terraform are the GA paths)
gcloud alpha monitoring policies create --policy-from-file=alert-policy.json

# List alert policies
gcloud alpha monitoring policies list

# Delete a policy
gcloud alpha monitoring policies delete POLICY_ID
{
  "displayName": "High CPU",
  "conditions": [{
    "displayName": "CPU utilization > 80%",
    "conditionThreshold": {
      "filter": "resource.type=\"gce_instance\" metric.type=\"compute.googleapis.com/instance/cpu/utilization\"",
      "comparison": "COMPARISON_GT",
      "thresholdValue": 0.8,
      "duration": "300s",
      "aggregations": [{"alignmentPeriod": "60s", "perSeriesAligner": "ALIGN_MEAN"}]
    }
  }],
  "combiner": "OR",
  "alertStrategy": {"autoClose": "1800s"},
  "notificationChannels": ["projects/my-project/notificationChannels/CHANNEL_ID"]
}

Notification Channels

# Channel management via gcloud is beta
gcloud beta monitoring channels list

# Create an email notification channel
gcloud beta monitoring channels create \
  --display-name="Ops Team" \
  --type=email \
  --channel-labels=email_address=ops@example.com

# Or create from a full JSON definition
gcloud beta monitoring channels create --channel-content-from-file=channel.json

# Slack/PagerDuty channels need OAuth setup — create them in the Console first

Uptime Checks

# Create an HTTPS uptime check (GA)
gcloud monitoring uptime create my-service-uptime \
  --resource-type=uptime-url \
  --resource-labels=host=api.example.com,project_id=my-project \
  --protocol=https \
  --port=443 \
  --path=/health \
  --period=1 \
  --timeout=10

# List / describe / delete uptime checks
gcloud monitoring uptime list-configs
gcloud monitoring uptime describe CHECK_ID
gcloud monitoring uptime delete CHECK_ID

Cloud Trace

# View traces (use Console or API — CLI is limited)
# Enable the API
gcloud services enable cloudtrace.googleapis.com

# In code: use OpenTelemetry or the Cloud Trace SDK
# Node.js auto-instrumentation
npm install @google-cloud/trace-agent
# Add at the very top of main file:
# require('@google-cloud/trace-agent').start();

Cloud Profiler

# Enable
gcloud services enable cloudprofiler.googleapis.com

# Node.js agent
npm install @google-cloud/profiler
# require('@google-cloud/profiler').start({ serviceContext: { service: 'my-service', version: '1.0' } });

Error Reporting

# Enable
gcloud services enable clouderrorreporting.googleapis.com

# List error groups
gcloud beta error-reporting events list --service=my-service --version=v1.0

# Errors are auto-ingested from Cloud Logging for supported runtimes.
# To report manually (REST):
curl -X POST \
  "https://clouderrorreporting.googleapis.com/v1beta1/projects/my-project/events:report?key=API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"message":"Error: something failed","serviceContext":{"service":"my-service","version":"1.0"}}'

Key Metric Types

Metric prefixWhat it covers
compute.googleapis.comVM CPU, disk, network
run.googleapis.comCloud Run request count, latency
cloudsql.googleapis.comDB connections, queries, disk
storage.googleapis.comBucket request count, bytes
bigquery.googleapis.comSlot utilization, bytes billed
pubsub.googleapis.comMessage count, delivery latency
kubernetes.ioGKE pod/node CPU, memory
logging.googleapis.comLog bytes ingested