How googlecloudplatform/k8s-stackdriver works
This repository is a suite of GKE-installed Cloud Operations integrations, plus a user-facing custom-metrics adapter and experimental Monitoring proxy. Their main workflows collect Kubernetes, kubelet, or Prometheus data, translate or expose it, and connect to Cloud Monitoring. The graph keeps each product separate. Edges are limited to relationships visible in excerpts, the SOURCE INDEX, or README; several subsystem internals are unsampled, so their unverified wiring is omitted.
Main entry points: cloud-monitoring-proxy/main.go Proxy runtime · manager.go Metric poller · event-exporter/main.go Exporter runtime · prometheus-to-sd/main.go Scrape runtime
Components 34
Monitoring proxy
- Proxy runtime
cloud-monitoring-proxy/cmd/cloud-monitoring-proxy/main.go - Configuration
cloud-monitoring-proxy/internal/config - Monitoring client
cloud-monitoring-proxy/internal/gcm/client.go - Metric scoping
cloud-monitoring-proxy/internal/scope/scope.go - Metric poller
cloud-monitoring-proxy/internal/poll/manager.go - Metric translation
cloud-monitoring-proxy/internal/translate/translate.go - Series cache
cloud-monitoring-proxy/internal/cache/cache.go - Metrics endpoint
cloud-monitoring-proxy/internal/export - Proxy telemetry
cloud-monitoring-proxy/internal/telemetry
Custom metrics adapter
- Adapter server
custom-metrics-stackdriver-adapter/adapter.go - Metrics provider
custom-metrics-stackdriver-adapter/pkg/adapter/provider/provider.go - Core metrics
custom-metrics-stackdriver-adapter/pkg/adapter/coreprovider/client.go - Query builder
custom-metrics-stackdriver-adapter/pkg/adapter/translator/query_builder.go - Response translation
custom-metrics-stackdriver-adapter/pkg/adapter/translator/response_translator.go - Filter builder
custom-metrics-stackdriver-adapter/pkg/adapter/translator/utils/filter_builder.go
Event exporter
- Exporter runtime
event-exporter/main.go - Event dispatch
event-exporter/event_exporter.go - Kubernetes watchers
event-exporter/kubernetes/watchers/events/watcher.go - Pod label informer
event-exporter/kubernetes/podlabels/pod_labels_informer.go - Monitoring sink
event-exporter/sinks/stackdriver/sink.go
Prometheus exporter
- Scrape runtime
prometheus-to-sd/main.go - Dynamic discovery
prometheus-to-sd/config/dynamic_source.go - Source configuration
prometheus-to-sd/config/source_config.go - Time-series translation
prometheus-to-sd/translator/translator.go - Descriptor cache
prometheus-to-sd/translator/metric_descriptor_cache.go
Kubelet monitor
- Monitor daemon
kubelet-to-gcm/monitor/main/daemon.go - Monitor configuration
kubelet-to-gcm/monitor/config/initialize.go - Kubelet client
kubelet-to-gcm/monitor/kubelet/client.go
Other components
- Scrape client
- Metrics API client
- Monitoring API
- Cloud Logging and Monitoring
- Kubernetes API
- Cloud Monitoring
Connections 37
- Scrape client → Metrics endpoint: scrapes
- Proxy runtime → Configuration: loads
cloud-monitoring-proxy/cmd/cloud-monitoring-proxy/main.go - Proxy runtime → Monitoring client: initializes
cloud-monitoring-proxy/cmd/cloud-monitoring-proxy/main.go - Proxy runtime → Metric poller: starts
cloud-monitoring-proxy/cmd/cloud-monitoring-proxy/main.go - Proxy runtime → Series cache: creates
cloud-monitoring-proxy/cmd/cloud-monitoring-proxy/main.go - Proxy runtime → Metric scoping: configures
cloud-monitoring-proxy/cmd/cloud-monitoring-proxy/main.go - Proxy runtime → Metrics endpoint: serves
cloud-monitoring-proxy/cmd/cloud-monitoring-proxy/main.go - Proxy runtime → Proxy telemetry: registers
cloud-monitoring-proxy/cmd/cloud-monitoring-proxy/main.go - Metric poller → Monitoring client: queries
cloud-monitoring-proxy/internal/poll/manager.go - Metric poller → Metric scoping: scopes
cloud-monitoring-proxy/internal/poll/manager.go - Metric poller → Metric translation: translates
cloud-monitoring-proxy/internal/poll/manager.go - Metric poller → Series cache: updates
cloud-monitoring-proxy/internal/poll/manager.go - Metrics endpoint → Series cache: reads
cloud-monitoring-proxy/internal/cache/cache.go - Metrics API client → Adapter server: requests metrics
custom-metrics-stackdriver-adapter/adapter.go - Adapter server → Metrics provider: constructs
custom-metrics-stackdriver-adapter/adapter.go - Adapter server → Query builder: configures
custom-metrics-stackdriver-adapter/adapter.go - Adapter server → Core metrics: configures
custom-metrics-stackdriver-adapter/adapter.go - Metrics provider → Response translation: translates
custom-metrics-stackdriver-adapter/pkg/adapter/provider/provider.go - Query builder → Filter builder: uses
custom-metrics-stackdriver-adapter/pkg/adapter/translator/query_builder.go - Core metrics → Monitoring API: queries
custom-metrics-stackdriver-adapter/pkg/adapter/coreprovider/client.go - Core metrics → Query builder: uses
custom-metrics-stackdriver-adapter/pkg/adapter/coreprovider/client.go - Exporter runtime → Pod label informer: initializes
event-exporter/main.go - Exporter runtime → Monitoring sink: creates
event-exporter/main.go - Exporter runtime → Event dispatch: runs
event-exporter/event_exporter.go - Event dispatch → Kubernetes watchers: watches
event-exporter/event_exporter.go - Event dispatch → Monitoring sink: dispatches
event-exporter/event_exporter.go - Monitoring sink → Pod label informer: uses
event-exporter/sinks/stackdriver/sink.go - Monitoring sink → Cloud Logging and Monitoring: writes events
- Exporter runtime → Kubernetes API: connects
event-exporter/main.go - Scrape runtime → Dynamic discovery: discovers
prometheus-to-sd/main.go - Scrape runtime → Source configuration: builds
prometheus-to-sd/main.go - Scrape runtime → Time-series translation: translates
prometheus-to-sd/main.go - Scrape runtime → Cloud Monitoring: sends time series
prometheus-to-sd/main.go - Time-series translation → Descriptor cache: uses
prometheus-to-sd/translator/translator.go - Dynamic discovery → Kubernetes API: lists pods
prometheus-to-sd/config/dynamic_source.go - Monitor daemon → Monitor configuration: initializes
kubelet-to-gcm/monitor/main/daemon.go - Monitor daemon → Kubelet client: uses
kubelet-to-gcm/monitor/main/daemon.go