Grafana has been running with zero datasources and zero dashboards, so the metrics scraped last commit were only reachable through the Prometheus API. This wires the plumbing and one dashboard, both declared in shared/grafana/provisioning/ and installed to /opt/grafana/provisioning by the deployer (the unit already mounted that directory read-only, so nothing about the container changes): - datasources/prometheus.yml — Prometheus at http://prometheus:9090, the container name, not the loopback publish, with a fixed uid so dashboards reference it without a lookup. - dashboards/llm-fleet.json — KV pool fill, queue depth, prefix-cache reuse rate, e2e latency p95, and decode/prefill throughput, with an endpoint variable covering both frank-medium and frank-large. Every series name was checked against the live /metrics endpoint: this fleet already shipped one comment naming a metric that does not exist, and a dashboard full of those would be worse. Dashboards stay editable in the UI (allowUiUpdates) because the panels are a starting point, but the file is the source of truth and the deployer overwrites Grafana's copy on every deploy. Planner and seams follow the existing pattern: shared/grafana/** selects the grafana service, and the tests pin the container-name address plus the provisioning contract so a rename cannot silently empty the dashboard.
27 lines
1.0 KiB
YAML
27 lines
1.0 KiB
YAML
# Grafana datasource, declared in git rather than clicked into grafana.db.
|
|
#
|
|
# This Grafana is an empty install on purpose: every datasource and dashboard
|
|
# it has comes from this directory, which the deployer installs into
|
|
# /opt/grafana/provisioning (mounted read-only into the container). A
|
|
# UI-configured datasource would be invisible to review, lost with the data
|
|
# volume, and unknown to anyone reading the repository.
|
|
#
|
|
# The URL uses the container name on dankclaw_default — the same address Caddy
|
|
# proxies to — not the published loopback port, so the path is the same from
|
|
# inside the network as from the browser's server side.
|
|
apiVersion: 1
|
|
|
|
datasources:
|
|
- name: Prometheus
|
|
# Fixed uid so dashboards can reference it without a lookup.
|
|
uid: prometheus
|
|
type: prometheus
|
|
access: proxy
|
|
url: http://prometheus:9090
|
|
isDefault: true
|
|
editable: false
|
|
jsonData:
|
|
# Matches prometheus.yml's scrape_interval; without it Grafana's rate
|
|
# windows can be shorter than the sample spacing.
|
|
timeInterval: 15s
|