|
12 | 12 | } |
13 | 13 | ] |
14 | 14 | }, |
15 | | - "description": "RED metrics (Rate, Errors, Duration) for AI Horde hot paths, sourced from OTLP histograms emitted by horde/telemetry.py and the webhook / background-job counters.", |
| 15 | + "description": "RED view of the AI Horde application built from OTLP metrics and Tempo-derived span metrics, both of which live in the ai-horde-telemetry Mimir tenant (Telemetry datasource, uid mimir-telemetry). The Service Graph panel reads Tempo directly (uid tempo). Telemetry is exported by a subset of hosts, so the panels aggregate rather than split per instance.", |
16 | 16 | "editable": true, |
17 | 17 | "fiscalYearStartMonth": 0, |
18 | 18 | "graphTooltip": 1, |
|
226 | 226 | }, |
227 | 227 | { |
228 | 228 | "collapsed": false, |
229 | | - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 60 }, |
| 229 | + "gridPos": { "h": 1, "w": 24, "x": 0, "y": 42 }, |
230 | 230 | "id": 105, |
231 | 231 | "title": "Service Graph & Request Funnel (Tempo metrics-generator)", |
232 | 232 | "type": "row" |
233 | 233 | }, |
234 | 234 | { |
235 | 235 | "datasource": { "type": "tempo", "uid": "tempo" }, |
236 | 236 | "description": "Service graph derived from traces. Cap query interval to ≤24h — the ai-horde-telemetry tenant has 3-day retention.", |
237 | | - "gridPos": { "h": 12, "w": 12, "x": 0, "y": 61 }, |
238 | | - "id": 30, |
| 237 | + "gridPos": { "h": 12, "w": 12, "x": 0, "y": 43 }, |
| 238 | + "id": 300, |
239 | 239 | "options": { "edges": { "mainStatUnit": "ms" }, "nodes": { "mainStatUnit": "short" } }, |
240 | 240 | "targets": [{ "queryType": "serviceMap", "serviceMapQuery": "{}", "refId": "A" }], |
241 | 241 | "title": "Service Graph", |
|
244 | 244 | { |
245 | 245 | "datasource": { "type": "prometheus", "uid": "${datasource}" }, |
246 | 246 | "description": "Request funnel via Tempo span-metrics generator: generate → pop → submit. Compare rates to spot stage-level bottlenecks.", |
247 | | - "gridPos": { "h": 6, "w": 4, "x": 12, "y": 61 }, |
248 | | - "id": 31, |
| 247 | + "gridPos": { "h": 6, "w": 4, "x": 12, "y": 43 }, |
| 248 | + "id": 301, |
249 | 249 | "fieldConfig": { "defaults": { "color": { "fixedColor": "blue", "mode": "fixed" }, "unit": "ops" }, "overrides": [] }, |
250 | 250 | "options": { "reduceOptions": { "calcs": ["mean"], "fields": "", "values": false }, "orientation": "auto", "textMode": "auto", "colorMode": "background", "graphMode": "area" }, |
251 | 251 | "targets": [{ "expr": "sum(rate(traces_spanmetrics_calls_total{service=\"ai-horde\", span_name=~\".*generate.*\"}[5m]))", "legendFormat": "/generate", "refId": "A" }], |
|
254 | 254 | }, |
255 | 255 | { |
256 | 256 | "datasource": { "type": "prometheus", "uid": "${datasource}" }, |
257 | | - "gridPos": { "h": 6, "w": 4, "x": 16, "y": 61 }, |
258 | | - "id": 32, |
| 257 | + "gridPos": { "h": 6, "w": 4, "x": 16, "y": 43 }, |
| 258 | + "id": 302, |
259 | 259 | "fieldConfig": { "defaults": { "color": { "fixedColor": "purple", "mode": "fixed" }, "unit": "ops" }, "overrides": [] }, |
260 | 260 | "options": { "reduceOptions": { "calcs": ["mean"], "fields": "", "values": false }, "orientation": "auto", "textMode": "auto", "colorMode": "background", "graphMode": "area" }, |
261 | 261 | "targets": [{ "expr": "sum(rate(traces_spanmetrics_calls_total{service=\"ai-horde\", span_name=~\".*pop.*\"}[5m]))", "legendFormat": "/pop", "refId": "A" }], |
|
264 | 264 | }, |
265 | 265 | { |
266 | 266 | "datasource": { "type": "prometheus", "uid": "${datasource}" }, |
267 | | - "gridPos": { "h": 6, "w": 4, "x": 20, "y": 61 }, |
268 | | - "id": 33, |
| 267 | + "gridPos": { "h": 6, "w": 4, "x": 20, "y": 43 }, |
| 268 | + "id": 303, |
269 | 269 | "fieldConfig": { "defaults": { "color": { "fixedColor": "green", "mode": "fixed" }, "unit": "ops" }, "overrides": [] }, |
270 | 270 | "options": { "reduceOptions": { "calcs": ["mean"], "fields": "", "values": false }, "orientation": "auto", "textMode": "auto", "colorMode": "background", "graphMode": "area" }, |
271 | 271 | "targets": [{ "expr": "sum(rate(traces_spanmetrics_calls_total{service=\"ai-horde\", span_name=~\".*submit.*\"}[5m]))", "legendFormat": "/submit", "refId": "A" }], |
|
275 | 275 | { |
276 | 276 | "datasource": { "type": "prometheus", "uid": "${datasource}" }, |
277 | 277 | "description": "Combined funnel trend over time. Prefer time ranges ≤ 24h (telemetry tenant retention is 3d).", |
278 | | - "gridPos": { "h": 6, "w": 12, "x": 12, "y": 67 }, |
279 | | - "id": 34, |
| 278 | + "gridPos": { "h": 6, "w": 12, "x": 12, "y": 49 }, |
| 279 | + "id": 304, |
280 | 280 | "type": "timeseries", |
281 | 281 | "fieldConfig": { |
282 | 282 | "defaults": { |
|
309 | 309 | "type": "datasource", |
310 | 310 | "query": "prometheus", |
311 | 311 | "refresh": 1, |
312 | | - "regex": "", |
| 312 | + "regex": "/Telemetry/", |
313 | 313 | "multi": false, |
314 | 314 | "includeAll": false, |
315 | | - "description": "Defaults to the Telemetry tenant where OTLP-sourced histograms (horde_*_duration, http_server_duration) and Tempo-derived span metrics live; switch to AI Horde App if you've routed OTLP exports to a different tenant.", |
| 315 | + "description": "Every panel on this dashboard reads the ai-horde-telemetry Mimir tenant, served by the Telemetry datasource (uid mimir-telemetry): OTLP-sourced histograms (horde_*_duration, http_server_duration) and the Tempo metrics-generator span metrics both land there. The regex pins the picker to that datasource so the panels cannot be pointed at a tenant that carries none of these series.", |
316 | 316 | "current": { |
317 | 317 | "selected": false, |
318 | 318 | "text": "Telemetry", |
|
326 | 326 | "timezone": "browser", |
327 | 327 | "title": "Horde App Traces (OTLP RED)", |
328 | 328 | "uid": "horde-app-traces", |
329 | | - "version": 2 |
| 329 | + "version": 3 |
330 | 330 | } |
0 commit comments