Google Cloud integrations
Six GA GCP integrations: Cloud Monitoring (poll), Cloud Logging (Pub/Sub pull), Cloud Billing (BigQuery query), GKE (cluster shape + DaemonSet), Cloud Run (sidecar), Cloud Functions Gen2 (in-process tracer).
Marketing overview & wizard walkthrough →
Auth model
Workload Identity Federation, 4-hop dance: RS256 JWT → STS federated token → IAMCredentials SA access token → data plane. Auth blob: {projectId, projectNumber, workloadIdentityPoolId, workloadIdentityProviderId, serviceAccountEmail}. We never see a service-account JSON key.
Cloud Monitoring
REST against monitoring.googleapis.com/v3/projects/<id>/timeSeries. Default plan: 11 metric types across GCE, Cloud Run, Cloud Functions, Cloud SQL, Pub/Sub, Storage, Load Balancing and GKE.
Series shape: gcp_monitoring_<snake(metricType)>{ResourceType,…,Aggregation,…}.
Cloud Logging
Customer creates a Cloud Logging sink → Pub/Sub topic → subscription. PulseBoard pulls up to maxMessages per batch (default 100), decodes the LogEntry JSON, ships logs via POST /ingest/logs, then ACKs. At-least-once.
Severity mapping: DEBUG → debug; DEFAULT/INFO/NOTICE → info; WARNING → warn; ERROR/CRITICAL/ALERT/EMERGENCY → error.
Cloud Billing (BigQuery)
Aggregated SQL over the daily-partitioned gcp_billing_export_v1_<billing-account-id> table. Axis = service | project | sku. Partition pruning on usage_start_time keeps byte-scan cost at cents-per-poll.
Config: {datasetId, tableId, datasetProject?, lookbackDays (1-90, default 7), maxRows (1-50000, default 10000), aggregation}.
Google Kubernetes Engine
Control-plane poll returns cluster shape (status, version, channel, autopilot, nodepool autoscaling) for every cluster in every region in a single round-trip via the locations/- wildcard. In-cluster pulseboard-agent DaemonSet (Autopilot-safe) ships pod logs + host metrics.
Cloud Run sidecar
Multi-container Knative service. Your app container talks OTLP to localhost:4318 on the sidecar. Gen2 execution environment required. ~30 MiB / <5% CPU sidecar overhead.
Cloud Functions Gen2
In-process OTel SDK via @pulseboard/tracer (Node, zero source change via NODE_OPTIONS) or pulseboard-tracer (Python, one-line start()). Java/Go work via vanilla OTel SDK with our OTEL_* env-var contract.
Onboarding
./onboarding.sh --project <project> --project-number <n> \
--issuer https://cloud.pulseboard.dev \
--subject pulseboard:workspace/acme:account/<id>
./onboarding.sh --enable-logging --log-topic ... --log-sub ...
./onboarding.sh --enable-billing --billing-dataset billing_export
./onboarding.sh --enable-gke