Task · GCI-0008.01

Phase 1 - observed-footprint surface over grafanacloud-usage

Description

Ships the affirmative half of the origin question with NO collector code, NO credential and ZERO emitted series. Panels only, on the datasource already provisioned on the write stack. Useful on its own and must not be blocked behind any later phase.

The datasource carries 311 grafanacloud_* metric names in a live org; the shipped dashboards read about 55. The observed-object counters below were verified present 2026-08-24 and are unread by any current panel.

Metric Counts Verified
grafanacloud_instance_active_integration_series series per Grafana Integration, carries integration 100 distinct values in one org, 79 of them aws/*
grafanacloud_instance_active_integration_host_series as above at metric-name granularity carries integration
grafanacloud_app_observability_service_entity_count (+ hostless) App O11y services observed present
grafanacloud_asserts_instance_active_entities / _total_entities entity-graph inventory present
grafanacloud_instance_active_target_info_series OTel target_info, instrumented service instances 231 stacks
grafanacloud_instance_active_kube_node_info_series k8s nodes present
grafanacloud_instance_active_kube_pod_container_info_series containers present
grafanacloud_logs_instance_active_streams log streams 274 stacks
grafanacloud_instance_active_caas_targets_series / _faas_targets_series CaaS and serverless targets present
grafanacloud_instance_app_o11y_host_count (+ v2 / v3) App O11y hosts present
grafanacloud_org_infra_o11y_billable_{host,container}_hours billing-side observed hosts and containers present
grafanacloud_org_db_o11y_billable_host_hours database instances observed present
grafanacloud_org_fe_o11y_billable_sessions, grafanacloud_frontend_observability_instance_sessions_per_second RUM sessions present
grafanacloud_profiles_instance_usage_group_bytes_received_per_second carries usage_group present

Existing pods and hosts panels (bin/dashboards.py:1253,1257) are the pattern to follow.

grafanacloud_oncall_instance_alert_groups_total natively carries slug, team, service_name, integration and state, so sum by(service_name, team) is already a named service-and-owner catalogue needing no credential. probe_usage_signals.py:329-331 measured top_services and top_integrations and nothing was ever built on them.

Traps that apply, all already in docs/traps.md: id is the per-signal instance id not the stack, so aggregate by(stack_id) first; naming a stack needs the group_left join on grafanacloud_grafana_instance_info; rate-shaped series need max_over_time and never an instantaneous compare; denominators must be windowed like their numerators.

Acceptance Criteria

Definition of Done

Implementation Plan

  1. Extend the existing Usage Workload tab with affirmative observed-object counts, trends, and the discovered integration-label breakdown from grafanacloud-usage.
  2. Extend the existing Operations Ownership surface with the named OnCall service and owning-team catalogue already carried by datasource labels.
  3. Pin datasource routing, stack-id aggregation, group_left slug joins, range handling, and dashboard coverage through the existing assembled-dashboard contract tests.
  4. Run the full sub-task gate, review the final diff, finalize Backlog acceptance evidence, then commit and push to main.

Final Summary

Shipped the panel-only observed-footprint surface over the existing usage datasource with no collector source, credential or emitted series. Dashboard contracts prove discovered integration and OnCall service ownership, windowed rate handling and multiplicative stack naming; the full local gate and secret-backed CI identifier gate passed.

View the source file on GitHub