4800 lines
149 KiB
JSON
4800 lines
149 KiB
JSON
{
|
|
"annotations": [
|
|
{
|
|
"kind": "AnnotationQuery",
|
|
"spec": {
|
|
"builtIn": true,
|
|
"enable": true,
|
|
"hide": true,
|
|
"iconColor": "rgba(0, 211, 255, 1)",
|
|
"name": "Annotations & Alerts",
|
|
"query": {
|
|
"datasource": {
|
|
"name": "-- Grafana --"
|
|
},
|
|
"group": "grafana",
|
|
"kind": "DataQuery",
|
|
"spec": {},
|
|
"version": "v0"
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"cursorSync": "Crosshair",
|
|
"editable": true,
|
|
"elements": {
|
|
"panel-1": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "max(user_total{service_name=~\"$service\", deployment_environment=~\"$env\"})",
|
|
"legendFormat": "total users"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
},
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum(increase(user_registered_total{service_name=~\"$service\", deployment_environment=~\"$env\"}[24h]))",
|
|
"legendFormat": "new today"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "B"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Current Better Auth user table size from `user.total` (cluster-wide DB gauge, aggregate with `max()`) plus rolling 24h signup delta from `increase(user.registered)`. Use the delta as today/new-user growth, and DAU / WAU / MAU below for returning-user engagement.",
|
|
"id": 1,
|
|
"links": [],
|
|
"title": "Total Users",
|
|
"vizConfig": {
|
|
"group": "stat",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "fixed",
|
|
"fixedColor": "blue"
|
|
},
|
|
"fieldMinMax": false,
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "blue",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "short"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"colorMode": "none",
|
|
"graphMode": "area",
|
|
"justifyMode": "auto",
|
|
"orientation": "auto",
|
|
"percentChangeColorMode": "standard",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showPercentChange": true,
|
|
"textMode": "value_and_name",
|
|
"wideLayout": true
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-15": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "avg(user_active_sessions{service_name=~\"$service\", deployment_environment=~\"$env\"})",
|
|
"legendFormat": "sessions"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "COUNT(*) over the Better Auth `session` table where `expires_at > now()`, aggregated with `avg()` (cluster-wide gauge). Counts session **rows**, not users — compare against DAU to spot session-row inflation.",
|
|
"id": 15,
|
|
"links": [],
|
|
"title": "Active Sessions",
|
|
"vizConfig": {
|
|
"group": "stat",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "fixed",
|
|
"fixedColor": "blue"
|
|
},
|
|
"fieldMinMax": false,
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "blue",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "short"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"colorMode": "none",
|
|
"graphMode": "area",
|
|
"justifyMode": "auto",
|
|
"orientation": "auto",
|
|
"percentChangeColorMode": "standard",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showPercentChange": true,
|
|
"textMode": "value_and_name",
|
|
"wideLayout": true
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-3": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum(rate(http_server_request_duration_seconds_count{service_name=~\"$service\", deployment_environment=~\"$env\", http_request_method!=\"OPTIONS\"}[5m]))",
|
|
"legendFormat": "req/s"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "5-minute average inbound HTTP request rate. /livez and /readyz (K8s probes) are excluded at the @hono/otel middleware level so this reflects real user traffic.",
|
|
"id": 3,
|
|
"links": [],
|
|
"title": "Req/s (5m)",
|
|
"vizConfig": {
|
|
"group": "stat",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "thresholds"
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
},
|
|
{
|
|
"color": "yellow",
|
|
"value": 100
|
|
},
|
|
{
|
|
"color": "red",
|
|
"value": 500
|
|
}
|
|
]
|
|
},
|
|
"unit": "reqps",
|
|
"decimals": 2
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"colorMode": "value",
|
|
"graphMode": "area",
|
|
"justifyMode": "auto",
|
|
"orientation": "auto",
|
|
"percentChangeColorMode": "standard",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showPercentChange": false,
|
|
"textMode": "auto",
|
|
"wideLayout": true
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-4": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "100 * sum(rate(http_server_request_duration_seconds_count{service_name=~\"$service\", deployment_environment=~\"$env\", http_request_method!=\"OPTIONS\", http_response_status_code=~\"5..\"}[5m])) / clamp_min(sum(rate(http_server_request_duration_seconds_count{service_name=~\"$service\", deployment_environment=~\"$env\", http_request_method!=\"OPTIONS\"}[5m])), 1)",
|
|
"legendFormat": "fail %"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "5xx responses ÷ all responses over the last 5m. Fixed 5m window for an on-call glance (\"is the service failing right now\"). >1% warns, >5% pages.",
|
|
"id": 4,
|
|
"links": [],
|
|
"title": "5xx Rate %",
|
|
"vizConfig": {
|
|
"group": "gauge",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "thresholds"
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
},
|
|
{
|
|
"color": "yellow",
|
|
"value": 1
|
|
},
|
|
{
|
|
"color": "red",
|
|
"value": 5
|
|
}
|
|
]
|
|
},
|
|
"unit": "percent",
|
|
"decimals": 2,
|
|
"min": 0,
|
|
"max": 10
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"minVizHeight": 75,
|
|
"minVizWidth": 75,
|
|
"orientation": "auto",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showThresholdLabels": false,
|
|
"showThresholdMarkers": true,
|
|
"sizing": "auto"
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-5": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum(rate(gen_ai_client_operation_count_total{service_name=~\"$service\", deployment_environment=~\"$env\"}[5m]))",
|
|
"legendFormat": "req/s"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "5-minute average LLM gateway request rate (chat + tts). For per-model trends see the LLM Gateway row.",
|
|
"id": 5,
|
|
"links": [],
|
|
"title": "LLM Req/s (5m)",
|
|
"vizConfig": {
|
|
"group": "stat",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "thresholds"
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "reqps",
|
|
"decimals": 2
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"colorMode": "value",
|
|
"graphMode": "area",
|
|
"justifyMode": "auto",
|
|
"orientation": "auto",
|
|
"percentChangeColorMode": "standard",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showPercentChange": false,
|
|
"textMode": "auto",
|
|
"wideLayout": true
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-80": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "max(user_active_rolling{service_name=~\"$service\", deployment_environment=~\"$env\", window=\"24h\"})",
|
|
"legendFormat": "DAU"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Daily active users — distinct users with activity in the last 24h. Sourced from `user.last_seen_at` (touched on sign-in and every OIDC token refresh) via the `user.active_rolling` gauge. Cluster-wide gauge aggregated with `max()`.",
|
|
"id": 80,
|
|
"links": [],
|
|
"title": "DAU",
|
|
"vizConfig": {
|
|
"group": "stat",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "fixed",
|
|
"fixedColor": "blue"
|
|
},
|
|
"fieldMinMax": false,
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "blue",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "short",
|
|
"noValue": "0"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"colorMode": "none",
|
|
"graphMode": "area",
|
|
"justifyMode": "auto",
|
|
"orientation": "auto",
|
|
"percentChangeColorMode": "standard",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showPercentChange": true,
|
|
"textMode": "value_and_name",
|
|
"wideLayout": true
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-81": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "max(user_active_rolling{service_name=~\"$service\", deployment_environment=~\"$env\", window=\"7d\"})",
|
|
"legendFormat": "WAU"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Weekly active users — distinct users with activity in the last 7d. Sourced from `user.last_seen_at` (touched on sign-in and every OIDC token refresh) via the `user.active_rolling` gauge. Cluster-wide gauge aggregated with `max()`.",
|
|
"id": 81,
|
|
"links": [],
|
|
"title": "WAU",
|
|
"vizConfig": {
|
|
"group": "stat",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "fixed",
|
|
"fixedColor": "blue"
|
|
},
|
|
"fieldMinMax": false,
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "blue",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "short",
|
|
"noValue": "0"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"colorMode": "none",
|
|
"graphMode": "area",
|
|
"justifyMode": "auto",
|
|
"orientation": "auto",
|
|
"percentChangeColorMode": "standard",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showPercentChange": true,
|
|
"textMode": "value_and_name",
|
|
"wideLayout": true
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-82": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "max(user_active_rolling{service_name=~\"$service\", deployment_environment=~\"$env\", window=\"30d\"})",
|
|
"legendFormat": "MAU"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Monthly active users — distinct users with activity in the last 30d. Sourced from `user.last_seen_at` (touched on sign-in and every OIDC token refresh) via the `user.active_rolling` gauge. Cluster-wide gauge aggregated with `max()`.",
|
|
"id": 82,
|
|
"links": [],
|
|
"title": "MAU",
|
|
"vizConfig": {
|
|
"group": "stat",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "fixed",
|
|
"fixedColor": "blue"
|
|
},
|
|
"fieldMinMax": false,
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "blue",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "short",
|
|
"noValue": "0"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"colorMode": "none",
|
|
"graphMode": "area",
|
|
"justifyMode": "auto",
|
|
"orientation": "auto",
|
|
"percentChangeColorMode": "standard",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showPercentChange": true,
|
|
"textMode": "value_and_name",
|
|
"wideLayout": true
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-93": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum(ws_connections_active{service_name=~\"$service\", deployment_environment=~\"$env\"})",
|
|
"legendFormat": "online"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Current concurrent WebSocket connections across all replicas (`sum` — each replica holds its own connections). The live-presence counterpart to the rolling DAU/WAU windows.",
|
|
"id": 93,
|
|
"links": [],
|
|
"title": "WS Online",
|
|
"vizConfig": {
|
|
"group": "stat",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "fixed",
|
|
"fixedColor": "purple"
|
|
},
|
|
"fieldMinMax": false,
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "purple",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "short",
|
|
"noValue": "0"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"colorMode": "none",
|
|
"graphMode": "area",
|
|
"justifyMode": "auto",
|
|
"orientation": "auto",
|
|
"percentChangeColorMode": "standard",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showPercentChange": true,
|
|
"textMode": "value_and_name",
|
|
"wideLayout": true
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-92": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum(ws_connections_active{service_name=~\"$service\", deployment_environment=~\"$env\"})",
|
|
"legendFormat": "connections"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Concurrent WebSocket connections over time (`sum` across replicas). A cliff to zero with no matching deploy = mass disconnect (LB drop, network blackhole); a slow ramp without disconnects = connection leak.",
|
|
"id": 92,
|
|
"links": [],
|
|
"title": "WS Connections",
|
|
"vizConfig": {
|
|
"group": "timeseries",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "palette-classic"
|
|
},
|
|
"custom": {
|
|
"axisBorderShow": false,
|
|
"axisCenteredZero": false,
|
|
"axisColorMode": "text",
|
|
"axisLabel": "",
|
|
"axisPlacement": "auto",
|
|
"barAlignment": 0,
|
|
"barWidthFactor": 0.6,
|
|
"drawStyle": "line",
|
|
"fillOpacity": 30,
|
|
"gradientMode": "none",
|
|
"hideFrom": {
|
|
"legend": false,
|
|
"tooltip": false,
|
|
"viz": false
|
|
},
|
|
"insertNulls": false,
|
|
"lineInterpolation": "smooth",
|
|
"lineWidth": 1,
|
|
"pointSize": 5,
|
|
"scaleDistribution": {
|
|
"type": "linear"
|
|
},
|
|
"showPoints": "auto",
|
|
"showValues": false,
|
|
"spanNulls": false,
|
|
"stacking": {
|
|
"group": "A",
|
|
"mode": "none"
|
|
},
|
|
"thresholdsStyle": {
|
|
"mode": "off"
|
|
}
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "short"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"annotations": {
|
|
"clustering": -1,
|
|
"multiLane": false
|
|
},
|
|
"legend": {
|
|
"calcs": [
|
|
"lastNotNull",
|
|
"max"
|
|
],
|
|
"displayMode": "table",
|
|
"placement": "right",
|
|
"showLegend": true
|
|
},
|
|
"tooltip": {
|
|
"hideZeros": false,
|
|
"mode": "multi",
|
|
"sort": "desc"
|
|
}
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-95": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum(increase(airi_product_events_total{service_name=~\"$service\", deployment_environment=~\"$env\", feature!=\"\", action!=\"\"}[$__range]))",
|
|
"legendFormat": "events"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Total first-party product analytics events over the dashboard range. This is event volume, not distinct users — distinct-user counts come from the Postgres `product_events` table.",
|
|
"id": 95,
|
|
"links": [],
|
|
"title": "Product Events (range)",
|
|
"vizConfig": {
|
|
"group": "stat",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "fixed",
|
|
"fixedColor": "blue"
|
|
},
|
|
"fieldMinMax": false,
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "blue",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "short",
|
|
"noValue": "0"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"colorMode": "none",
|
|
"graphMode": "none",
|
|
"justifyMode": "auto",
|
|
"orientation": "auto",
|
|
"percentChangeColorMode": "standard",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showPercentChange": true,
|
|
"textMode": "value_and_name",
|
|
"wideLayout": true
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-96": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "100 * sum(increase(airi_product_events_total{service_name=~\"$service\", deployment_environment=~\"$env\", feature!=\"\", action!=\"\", status=\"failed\"}[$__range])) / clamp_min(sum(increase(airi_product_events_total{service_name=~\"$service\", deployment_environment=~\"$env\", feature!=\"\", action!=\"\"}[$__range])), 1)",
|
|
"legendFormat": "failed %"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Failed product events ÷ all product events over the dashboard range. Uses only bounded labels (`feature`, `action`, `status`, `source`); no user/session/request identifiers are present in Prometheus.",
|
|
"id": 96,
|
|
"links": [],
|
|
"title": "Product Failure %",
|
|
"vizConfig": {
|
|
"group": "gauge",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "thresholds"
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
},
|
|
{
|
|
"color": "yellow",
|
|
"value": 2
|
|
},
|
|
{
|
|
"color": "red",
|
|
"value": 10
|
|
}
|
|
]
|
|
},
|
|
"unit": "percent",
|
|
"decimals": 2,
|
|
"noValue": "0",
|
|
"min": 0,
|
|
"max": 20
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"minVizHeight": 75,
|
|
"minVizWidth": 75,
|
|
"orientation": "auto",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showThresholdLabels": false,
|
|
"showThresholdMarkers": true,
|
|
"sizing": "auto"
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-97": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "topk(12, sum by (feature, action, status) (increase(airi_product_events_total{service_name=~\"$service\", deployment_environment=~\"$env\", feature!=\"\", action!=\"\"}[$__range])))",
|
|
"legendFormat": "{{feature}} · {{action}} · {{status}}",
|
|
"instant": true,
|
|
"range": false
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Top product actions by event count over the dashboard range. Use this to see which features are actually being exercised after deployment; pair with DB `count(distinct user_id)` for user counts.",
|
|
"id": 97,
|
|
"links": [],
|
|
"title": "Top Product Actions (range)",
|
|
"vizConfig": {
|
|
"group": "bargauge",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "thresholds"
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "short",
|
|
"noValue": "0"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"displayMode": "gradient",
|
|
"maxVizHeight": 300,
|
|
"minVizHeight": 12,
|
|
"minVizWidth": 8,
|
|
"namePlacement": "auto",
|
|
"orientation": "horizontal",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showUnfilled": true,
|
|
"sizing": "auto",
|
|
"valueMode": "color"
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-98": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum by (feature, action, status) (rate(airi_product_events_total{service_name=~\"$service\", deployment_environment=~\"$env\", feature!=\"\", action!=\"\"}[$__rate_interval]))",
|
|
"legendFormat": "{{feature}} · {{action}} · {{status}}"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Product event rate by feature/action/status. This is the Prometheus-safe trend view; user-level analysis remains in Postgres `product_events`.",
|
|
"id": 98,
|
|
"links": [],
|
|
"title": "Product Event Rate",
|
|
"vizConfig": {
|
|
"group": "timeseries",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "palette-classic"
|
|
},
|
|
"custom": {
|
|
"axisBorderShow": false,
|
|
"axisCenteredZero": false,
|
|
"axisColorMode": "text",
|
|
"axisLabel": "",
|
|
"axisPlacement": "auto",
|
|
"barAlignment": 0,
|
|
"barWidthFactor": 0.6,
|
|
"drawStyle": "line",
|
|
"fillOpacity": 15,
|
|
"gradientMode": "none",
|
|
"hideFrom": {
|
|
"legend": false,
|
|
"tooltip": false,
|
|
"viz": false
|
|
},
|
|
"insertNulls": false,
|
|
"lineInterpolation": "smooth",
|
|
"lineWidth": 1,
|
|
"pointSize": 5,
|
|
"scaleDistribution": {
|
|
"type": "linear"
|
|
},
|
|
"showPoints": "auto",
|
|
"showValues": false,
|
|
"spanNulls": false,
|
|
"stacking": {
|
|
"group": "A",
|
|
"mode": "none"
|
|
},
|
|
"thresholdsStyle": {
|
|
"mode": "off"
|
|
}
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "eps"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"annotations": {
|
|
"clustering": -1,
|
|
"multiLane": false
|
|
},
|
|
"legend": {
|
|
"calcs": [
|
|
"lastNotNull",
|
|
"max"
|
|
],
|
|
"displayMode": "table",
|
|
"placement": "right",
|
|
"showLegend": true
|
|
},
|
|
"tooltip": {
|
|
"hideZeros": false,
|
|
"mode": "multi",
|
|
"sort": "desc"
|
|
}
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-16": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "topk(10, sum by (http_route) (increase(http_server_request_duration_seconds_count{service_name=~\"$service\", deployment_environment=~\"$env\", http_request_method!=\"OPTIONS\", http_route!=\"\"}[$__range])))",
|
|
"legendFormat": "{{http_route}}",
|
|
"instant": true,
|
|
"range": false
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Top Hono-matched routes by request count over the dashboard range. The main traffic list: which API surfaces are hottest. Wildcard patterns like `/api/v1/openai/*` are requests that did not reach a concrete handler (404 / auth-rejected); concrete paths are successful routes.",
|
|
"id": 16,
|
|
"links": [],
|
|
"title": "Top Routes by Requests (range)",
|
|
"vizConfig": {
|
|
"group": "bargauge",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "thresholds"
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "short"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"displayMode": "gradient",
|
|
"maxVizHeight": 300,
|
|
"minVizHeight": 12,
|
|
"minVizWidth": 8,
|
|
"namePlacement": "auto",
|
|
"orientation": "horizontal",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showUnfilled": true,
|
|
"sizing": "auto",
|
|
"valueMode": "color"
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-40": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum by (http_response_status_code) (rate(http_server_request_duration_seconds_count{service_name=~\"$service\", deployment_environment=~\"$env\", http_request_method!=\"OPTIONS\"}[$__rate_interval]))",
|
|
"legendFormat": "{{http_response_status_code}}"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "HTTP status-code mix over time, one row per status code, colour = request rate in each time bucket. The 200 row dominates in steady state; a 5xx / 4xx row suddenly lighting up flags an incident at a glance. Non-OPTIONS traffic only.",
|
|
"id": 40,
|
|
"links": [],
|
|
"title": "Error Rate %",
|
|
"vizConfig": {
|
|
"group": "heatmap",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"custom": {
|
|
"hideFrom": {
|
|
"legend": false,
|
|
"tooltip": false,
|
|
"viz": false
|
|
},
|
|
"scaleDistribution": {
|
|
"type": "linear"
|
|
}
|
|
},
|
|
"unit": "short"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"annotations": {
|
|
"clustering": -1,
|
|
"multiLane": false
|
|
},
|
|
"calculate": false,
|
|
"cellGap": 1,
|
|
"color": {
|
|
"exponent": 0.5,
|
|
"fill": "dark-orange",
|
|
"mode": "scheme",
|
|
"reverse": false,
|
|
"scale": "exponential",
|
|
"scheme": "RdYlBu",
|
|
"steps": 64
|
|
},
|
|
"exemplars": {
|
|
"color": "rgba(255,0,255,0.7)"
|
|
},
|
|
"filterValues": {
|
|
"le": 1e-9
|
|
},
|
|
"legend": {
|
|
"show": false
|
|
},
|
|
"rowsFrame": {
|
|
"layout": "auto"
|
|
},
|
|
"tooltip": {
|
|
"mode": "single",
|
|
"showColorScale": false,
|
|
"yHistogram": false
|
|
},
|
|
"yAxis": {
|
|
"axisPlacement": "left",
|
|
"reverse": false
|
|
}
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-20": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "histogram_quantile(0.95, sum by (le, http_route) (rate(http_server_request_duration_seconds_bucket{service_name=~\"$service\", deployment_environment=~\"$env\", http_request_method!=\"OPTIONS\", http_route!~\"/api/v1/openai/.*\", http_response_status_code!=\"404\"}[$__rate_interval])))",
|
|
"legendFormat": "{{http_route}}"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "P95 latency per Hono-matched route, excluding /api/v1/openai/* (LLM gateway latency lives in the LLM Gateway row). 404s excluded so missing-route noise does not skew the curve.",
|
|
"id": 20,
|
|
"links": [],
|
|
"title": "HTTP P95 by Route",
|
|
"vizConfig": {
|
|
"group": "timeseries",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "palette-classic"
|
|
},
|
|
"custom": {
|
|
"axisBorderShow": false,
|
|
"axisCenteredZero": false,
|
|
"axisColorMode": "text",
|
|
"axisLabel": "",
|
|
"axisPlacement": "auto",
|
|
"barAlignment": 0,
|
|
"barWidthFactor": 0.6,
|
|
"drawStyle": "line",
|
|
"fillOpacity": 20,
|
|
"gradientMode": "none",
|
|
"hideFrom": {
|
|
"legend": false,
|
|
"tooltip": false,
|
|
"viz": false
|
|
},
|
|
"insertNulls": false,
|
|
"lineInterpolation": "smooth",
|
|
"lineWidth": 1,
|
|
"pointSize": 5,
|
|
"scaleDistribution": {
|
|
"type": "linear"
|
|
},
|
|
"showPoints": "auto",
|
|
"showValues": false,
|
|
"spanNulls": false,
|
|
"stacking": {
|
|
"group": "A",
|
|
"mode": "none"
|
|
},
|
|
"thresholdsStyle": {
|
|
"mode": "off"
|
|
}
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "s"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"annotations": {
|
|
"clustering": -1,
|
|
"multiLane": false
|
|
},
|
|
"legend": {
|
|
"calcs": [
|
|
"lastNotNull",
|
|
"max"
|
|
],
|
|
"displayMode": "table",
|
|
"placement": "right",
|
|
"showLegend": true
|
|
},
|
|
"tooltip": {
|
|
"hideZeros": false,
|
|
"mode": "multi",
|
|
"sort": "desc"
|
|
}
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-94": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum by (http_route, http_response_status_code) (increase(http_server_request_duration_seconds_count{service_name=~\"$service\", deployment_environment=~\"$env\", http_request_method!=\"OPTIONS\", http_response_status_code!~\"2..|3..|401|402|404\"}[$__rate_interval]))",
|
|
"legendFormat": "{{http_response_status_code}} {{http_route}}"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Error responses per route, broken out by status code. Excludes success (2xx/3xx) and the expected-client-error codes 401/402/404 (auth-required / payment-required / not-found noise) so the curve isolates real failures: 4xx like 400/403/422/429 and all 5xx. The per-route companion to the aggregate Error Rate % stat.",
|
|
"id": 94,
|
|
"links": [],
|
|
"title": "Errors by Route",
|
|
"vizConfig": {
|
|
"group": "timeseries",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "palette-classic"
|
|
},
|
|
"custom": {
|
|
"axisBorderShow": false,
|
|
"axisCenteredZero": false,
|
|
"axisColorMode": "text",
|
|
"axisLabel": "",
|
|
"axisPlacement": "auto",
|
|
"barAlignment": 0,
|
|
"barWidthFactor": 0.6,
|
|
"drawStyle": "line",
|
|
"fillOpacity": 20,
|
|
"gradientMode": "none",
|
|
"hideFrom": {
|
|
"legend": false,
|
|
"tooltip": false,
|
|
"viz": false
|
|
},
|
|
"insertNulls": false,
|
|
"lineInterpolation": "smooth",
|
|
"lineWidth": 1,
|
|
"pointSize": 5,
|
|
"scaleDistribution": {
|
|
"type": "linear"
|
|
},
|
|
"showPoints": "auto",
|
|
"showValues": false,
|
|
"spanNulls": false,
|
|
"stacking": {
|
|
"group": "A",
|
|
"mode": "none"
|
|
},
|
|
"thresholdsStyle": {
|
|
"mode": "off"
|
|
}
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "short"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"annotations": {
|
|
"clustering": -1,
|
|
"multiLane": false
|
|
},
|
|
"legend": {
|
|
"calcs": [
|
|
"lastNotNull",
|
|
"max"
|
|
],
|
|
"displayMode": "table",
|
|
"placement": "right",
|
|
"showLegend": true
|
|
},
|
|
"tooltip": {
|
|
"hideZeros": false,
|
|
"mode": "multi",
|
|
"sort": "desc"
|
|
}
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-11": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum by (gen_ai_request_model) (rate(gen_ai_client_operation_count_total{service_name=~\"$service\", deployment_environment=~\"$env\", gen_ai_request_model!=\"\"}[$__rate_interval]))",
|
|
"legendFormat": "{{gen_ai_request_model}}"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Per-model request rate (chat + tts). Useful for capacity planning and spotting model-routing regressions.",
|
|
"id": 11,
|
|
"links": [],
|
|
"title": "LLM Request Rate by Model",
|
|
"vizConfig": {
|
|
"group": "timeseries",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "palette-classic"
|
|
},
|
|
"custom": {
|
|
"axisBorderShow": false,
|
|
"axisCenteredZero": false,
|
|
"axisColorMode": "text",
|
|
"axisLabel": "",
|
|
"axisPlacement": "auto",
|
|
"barAlignment": 0,
|
|
"barWidthFactor": 0.6,
|
|
"drawStyle": "line",
|
|
"fillOpacity": 20,
|
|
"gradientMode": "none",
|
|
"hideFrom": {
|
|
"legend": false,
|
|
"tooltip": false,
|
|
"viz": false
|
|
},
|
|
"insertNulls": false,
|
|
"lineInterpolation": "smooth",
|
|
"lineWidth": 1,
|
|
"pointSize": 5,
|
|
"scaleDistribution": {
|
|
"type": "linear"
|
|
},
|
|
"showPoints": "auto",
|
|
"showValues": false,
|
|
"spanNulls": false,
|
|
"stacking": {
|
|
"group": "A",
|
|
"mode": "none"
|
|
},
|
|
"thresholdsStyle": {
|
|
"mode": "off"
|
|
}
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "reqps"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"annotations": {
|
|
"clustering": -1,
|
|
"multiLane": false
|
|
},
|
|
"legend": {
|
|
"calcs": [
|
|
"lastNotNull",
|
|
"max"
|
|
],
|
|
"displayMode": "table",
|
|
"placement": "right",
|
|
"showLegend": true
|
|
},
|
|
"tooltip": {
|
|
"hideZeros": false,
|
|
"mode": "multi",
|
|
"sort": "desc"
|
|
}
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-21": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "histogram_quantile(0.95, sum by (le) (rate(gen_ai_client_first_token_duration_seconds_bucket{service_name=~\"$service\", deployment_environment=~\"$env\"}[$__rate_interval])))",
|
|
"legendFormat": "TTFB p95"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
},
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "histogram_quantile(0.95, sum by (le) (rate(gen_ai_client_operation_duration_seconds_bucket{service_name=~\"$service\", deployment_environment=~\"$env\"}[$__rate_interval])))",
|
|
"legendFormat": "end-to-end p95"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "B"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Two P95 latency signals for the LLM gateway, aggregated across models. TTFB = time to first streamed token (streaming chat UX). End-to-end = full operation duration — the only latency signal for non-streaming chat and TTS, which have no first-token event.",
|
|
"id": 21,
|
|
"links": [],
|
|
"title": "LLM Latency P95",
|
|
"vizConfig": {
|
|
"group": "timeseries",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "palette-classic"
|
|
},
|
|
"custom": {
|
|
"axisBorderShow": false,
|
|
"axisCenteredZero": false,
|
|
"axisColorMode": "text",
|
|
"axisLabel": "",
|
|
"axisPlacement": "auto",
|
|
"barAlignment": 0,
|
|
"barWidthFactor": 0.6,
|
|
"drawStyle": "line",
|
|
"fillOpacity": 20,
|
|
"gradientMode": "none",
|
|
"hideFrom": {
|
|
"legend": false,
|
|
"tooltip": false,
|
|
"viz": false
|
|
},
|
|
"insertNulls": false,
|
|
"lineInterpolation": "smooth",
|
|
"lineWidth": 1,
|
|
"pointSize": 5,
|
|
"scaleDistribution": {
|
|
"type": "linear"
|
|
},
|
|
"showPoints": "auto",
|
|
"showValues": false,
|
|
"spanNulls": false,
|
|
"stacking": {
|
|
"group": "A",
|
|
"mode": "none"
|
|
},
|
|
"thresholdsStyle": {
|
|
"mode": "off"
|
|
}
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "s"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"annotations": {
|
|
"clustering": -1,
|
|
"multiLane": false
|
|
},
|
|
"legend": {
|
|
"calcs": [
|
|
"lastNotNull",
|
|
"max"
|
|
],
|
|
"displayMode": "table",
|
|
"placement": "right",
|
|
"showLegend": true
|
|
},
|
|
"tooltip": {
|
|
"hideZeros": false,
|
|
"mode": "multi",
|
|
"sort": "desc"
|
|
}
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-66": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum by (provider) (rate(gen_ai_client_operation_count_total{service_name=~\"$service\", deployment_environment=~\"$env\", provider!=\"\"}[$__rate_interval]))",
|
|
"legendFormat": "{{provider}}"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Outbound request rate to each upstream provider (chat + tts), as our gateway sees it. The RPM / 调用次数 screens on the provider consoles, unified. provider = upstream hostname the router used.",
|
|
"id": 66,
|
|
"links": [],
|
|
"title": "Requests/s by Provider",
|
|
"vizConfig": {
|
|
"group": "timeseries",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "palette-classic"
|
|
},
|
|
"custom": {
|
|
"axisBorderShow": false,
|
|
"axisCenteredZero": false,
|
|
"axisColorMode": "text",
|
|
"axisLabel": "",
|
|
"axisPlacement": "auto",
|
|
"barAlignment": 0,
|
|
"barWidthFactor": 0.6,
|
|
"drawStyle": "line",
|
|
"fillOpacity": 20,
|
|
"gradientMode": "none",
|
|
"hideFrom": {
|
|
"legend": false,
|
|
"tooltip": false,
|
|
"viz": false
|
|
},
|
|
"insertNulls": false,
|
|
"lineInterpolation": "smooth",
|
|
"lineWidth": 1,
|
|
"pointSize": 5,
|
|
"scaleDistribution": {
|
|
"type": "linear"
|
|
},
|
|
"showPoints": "auto",
|
|
"showValues": false,
|
|
"spanNulls": false,
|
|
"stacking": {
|
|
"group": "A",
|
|
"mode": "none"
|
|
},
|
|
"thresholdsStyle": {
|
|
"mode": "off"
|
|
}
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "reqps"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"annotations": {
|
|
"clustering": -1,
|
|
"multiLane": false
|
|
},
|
|
"legend": {
|
|
"calcs": [
|
|
"lastNotNull",
|
|
"max"
|
|
],
|
|
"displayMode": "table",
|
|
"placement": "right",
|
|
"showLegend": true
|
|
},
|
|
"tooltip": {
|
|
"hideZeros": false,
|
|
"mode": "multi",
|
|
"sort": "desc"
|
|
}
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-67": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "histogram_quantile(0.95, sum by (le, provider) (rate(gen_ai_client_operation_duration_seconds_bucket{service_name=~\"$service\", deployment_environment=~\"$env\", provider!=\"\"}[$__rate_interval])))",
|
|
"legendFormat": "{{provider}}"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "P95 upstream call duration per provider (chat + tts), across models. Mirrors each provider console's 调用时长 p95/p99 panel — but here every provider is on one axis.",
|
|
"id": 67,
|
|
"links": [],
|
|
"title": "Provider Latency P95",
|
|
"vizConfig": {
|
|
"group": "timeseries",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "palette-classic"
|
|
},
|
|
"custom": {
|
|
"axisBorderShow": false,
|
|
"axisCenteredZero": false,
|
|
"axisColorMode": "text",
|
|
"axisLabel": "",
|
|
"axisPlacement": "auto",
|
|
"barAlignment": 0,
|
|
"barWidthFactor": 0.6,
|
|
"drawStyle": "line",
|
|
"fillOpacity": 20,
|
|
"gradientMode": "none",
|
|
"hideFrom": {
|
|
"legend": false,
|
|
"tooltip": false,
|
|
"viz": false
|
|
},
|
|
"insertNulls": false,
|
|
"lineInterpolation": "smooth",
|
|
"lineWidth": 1,
|
|
"pointSize": 5,
|
|
"scaleDistribution": {
|
|
"type": "linear"
|
|
},
|
|
"showPoints": "auto",
|
|
"showValues": false,
|
|
"spanNulls": false,
|
|
"stacking": {
|
|
"group": "A",
|
|
"mode": "none"
|
|
},
|
|
"thresholdsStyle": {
|
|
"mode": "off"
|
|
}
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "s"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"annotations": {
|
|
"clustering": -1,
|
|
"multiLane": false
|
|
},
|
|
"legend": {
|
|
"calcs": [
|
|
"lastNotNull",
|
|
"max"
|
|
],
|
|
"displayMode": "table",
|
|
"placement": "right",
|
|
"showLegend": true
|
|
},
|
|
"tooltip": {
|
|
"hideZeros": false,
|
|
"mode": "multi",
|
|
"sort": "desc"
|
|
}
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-68": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "100 * sum by (provider) (rate(gen_ai_client_operation_count_total{service_name=~\"$service\", deployment_environment=~\"$env\", provider!=\"\", http_response_status_code=~\"4..|5..\"}[$__rate_interval])) / clamp_min(sum by (provider) (rate(gen_ai_client_operation_count_total{service_name=~\"$service\", deployment_environment=~\"$env\", provider!=\"\"}[$__rate_interval])), 1)",
|
|
"legendFormat": "{{provider}}"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "4xx + 5xx ÷ all requests per provider, our side of the call. Matches each provider 失败率 panel. Pair with Upstream Errors by Status Code (LLM Router Health) to see which codes drive it.",
|
|
"id": 68,
|
|
"links": [],
|
|
"title": "Provider Failure %",
|
|
"vizConfig": {
|
|
"group": "timeseries",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "palette-classic"
|
|
},
|
|
"custom": {
|
|
"axisBorderShow": false,
|
|
"axisCenteredZero": false,
|
|
"axisColorMode": "text",
|
|
"axisLabel": "",
|
|
"axisPlacement": "auto",
|
|
"barAlignment": 0,
|
|
"barWidthFactor": 0.6,
|
|
"drawStyle": "line",
|
|
"fillOpacity": 20,
|
|
"gradientMode": "none",
|
|
"hideFrom": {
|
|
"legend": false,
|
|
"tooltip": false,
|
|
"viz": false
|
|
},
|
|
"insertNulls": false,
|
|
"lineInterpolation": "smooth",
|
|
"lineWidth": 1,
|
|
"pointSize": 5,
|
|
"scaleDistribution": {
|
|
"type": "linear"
|
|
},
|
|
"showPoints": "auto",
|
|
"showValues": false,
|
|
"spanNulls": false,
|
|
"stacking": {
|
|
"group": "A",
|
|
"mode": "none"
|
|
},
|
|
"thresholdsStyle": {
|
|
"mode": "off"
|
|
}
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "percent"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"annotations": {
|
|
"clustering": -1,
|
|
"multiLane": false
|
|
},
|
|
"legend": {
|
|
"calcs": [
|
|
"lastNotNull",
|
|
"max"
|
|
],
|
|
"displayMode": "table",
|
|
"placement": "right",
|
|
"showLegend": true
|
|
},
|
|
"tooltip": {
|
|
"hideZeros": false,
|
|
"mode": "multi",
|
|
"sort": "desc"
|
|
}
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-69": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum by (model) (rate(airi_billing_tts_chars_total{service_name=~\"$service\", deployment_environment=~\"$env\"}[$__rate_interval]))",
|
|
"legendFormat": "{{model}}"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Billed TTS characters per second by model (from `airi.billing.tts.chars`). The 用量统计「字数」screen on the TTS consoles (豆包 / 阿里), unified. Integrate over the range for a window total.",
|
|
"id": 69,
|
|
"links": [],
|
|
"title": "TTS Characters/s by Model",
|
|
"vizConfig": {
|
|
"group": "timeseries",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "palette-classic"
|
|
},
|
|
"custom": {
|
|
"axisBorderShow": false,
|
|
"axisCenteredZero": false,
|
|
"axisColorMode": "text",
|
|
"axisLabel": "",
|
|
"axisPlacement": "auto",
|
|
"barAlignment": 0,
|
|
"barWidthFactor": 0.6,
|
|
"drawStyle": "line",
|
|
"fillOpacity": 20,
|
|
"gradientMode": "none",
|
|
"hideFrom": {
|
|
"legend": false,
|
|
"tooltip": false,
|
|
"viz": false
|
|
},
|
|
"insertNulls": false,
|
|
"lineInterpolation": "smooth",
|
|
"lineWidth": 1,
|
|
"pointSize": 5,
|
|
"scaleDistribution": {
|
|
"type": "linear"
|
|
},
|
|
"showPoints": "auto",
|
|
"showValues": false,
|
|
"spanNulls": false,
|
|
"stacking": {
|
|
"group": "A",
|
|
"mode": "none"
|
|
},
|
|
"thresholdsStyle": {
|
|
"mode": "off"
|
|
}
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "short"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"annotations": {
|
|
"clustering": -1,
|
|
"multiLane": false
|
|
},
|
|
"legend": {
|
|
"calcs": [
|
|
"lastNotNull",
|
|
"max"
|
|
],
|
|
"displayMode": "table",
|
|
"placement": "right",
|
|
"showLegend": true
|
|
},
|
|
"tooltip": {
|
|
"hideZeros": false,
|
|
"mode": "multi",
|
|
"sort": "desc"
|
|
}
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-73": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum(increase(gen_ai_client_token_usage_input_total{service_name=~\"$service\", deployment_environment=~\"$env\"}[$__range]))",
|
|
"legendFormat": "input"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
},
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum(increase(gen_ai_client_token_usage_output_total{service_name=~\"$service\", deployment_environment=~\"$env\"}[$__range]))",
|
|
"legendFormat": "output"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "B"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Total input and output tokens billed over the dashboard range, from the upstream `usage` block (requests where the upstream omits usage are not counted). The cumulative counterpart to panel-71 throughput — use for \"how many tokens did we burn this window\" cost math.",
|
|
"id": 73,
|
|
"links": [],
|
|
"title": "Tokens Consumed (range)",
|
|
"vizConfig": {
|
|
"group": "stat",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "fixed",
|
|
"fixedColor": "blue"
|
|
},
|
|
"fieldMinMax": false,
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "blue",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "short",
|
|
"noValue": "0"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"colorMode": "none",
|
|
"graphMode": "none",
|
|
"justifyMode": "auto",
|
|
"orientation": "auto",
|
|
"percentChangeColorMode": "standard",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showPercentChange": true,
|
|
"textMode": "value_and_name",
|
|
"wideLayout": true
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-71": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum(rate(gen_ai_client_token_usage_input_total{service_name=~\"$service\", deployment_environment=~\"$env\"}[$__rate_interval]))",
|
|
"legendFormat": "input tokens/s"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
},
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum(rate(gen_ai_client_token_usage_output_total{service_name=~\"$service\", deployment_environment=~\"$env\"}[$__rate_interval]))",
|
|
"legendFormat": "output tokens/s"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "B"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Input vs output token throughput across the LLM gateway (tokens/sec). Recorded per request from the upstream `usage` block. Use for capacity planning and cost estimation. input = prompt tokens consumed; output = completion tokens generated.",
|
|
"id": 71,
|
|
"links": [],
|
|
"title": "LLM Token Throughput",
|
|
"vizConfig": {
|
|
"group": "timeseries",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "palette-classic"
|
|
},
|
|
"custom": {
|
|
"axisBorderShow": false,
|
|
"axisCenteredZero": false,
|
|
"axisColorMode": "text",
|
|
"axisLabel": "",
|
|
"axisPlacement": "auto",
|
|
"barAlignment": 0,
|
|
"barWidthFactor": 0.6,
|
|
"drawStyle": "line",
|
|
"fillOpacity": 20,
|
|
"gradientMode": "none",
|
|
"hideFrom": {
|
|
"legend": false,
|
|
"tooltip": false,
|
|
"viz": false
|
|
},
|
|
"insertNulls": false,
|
|
"lineInterpolation": "smooth",
|
|
"lineWidth": 1,
|
|
"pointSize": 5,
|
|
"scaleDistribution": {
|
|
"type": "linear"
|
|
},
|
|
"showPoints": "auto",
|
|
"showValues": false,
|
|
"spanNulls": false,
|
|
"stacking": {
|
|
"group": "A",
|
|
"mode": "none"
|
|
},
|
|
"thresholdsStyle": {
|
|
"mode": "off"
|
|
}
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "short"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"annotations": {
|
|
"clustering": -1,
|
|
"multiLane": false
|
|
},
|
|
"legend": {
|
|
"calcs": [
|
|
"lastNotNull",
|
|
"max"
|
|
],
|
|
"displayMode": "table",
|
|
"placement": "right",
|
|
"showLegend": true
|
|
},
|
|
"tooltip": {
|
|
"hideZeros": false,
|
|
"mode": "multi",
|
|
"sort": "desc"
|
|
}
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-43": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum(increase(airi_billing_flux_unbilled_total{service_name=~\"$service\", deployment_environment=~\"$env\", reason!=\"partial_debit_drained\"}[$__range]))",
|
|
"legendFormat": "flux"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Flux owed by users but never debited for unexpected reasons (excludes `partial_debit_drained`, a known partial-balance drain path). Real revenue leak — DB latency and HTTP 5xx alerts do NOT cover this, because the response was 2xx and the catch path is silent.",
|
|
"id": 43,
|
|
"links": [],
|
|
"title": "⚠ Flux Unbilled (range)",
|
|
"vizConfig": {
|
|
"group": "stat",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "thresholds"
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
},
|
|
{
|
|
"color": "red",
|
|
"value": 1
|
|
}
|
|
]
|
|
},
|
|
"unit": "short",
|
|
"noValue": "0"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"colorMode": "value",
|
|
"graphMode": "none",
|
|
"justifyMode": "auto",
|
|
"orientation": "auto",
|
|
"percentChangeColorMode": "standard",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showPercentChange": false,
|
|
"textMode": "auto",
|
|
"wideLayout": true
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-41": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum(increase(airi_gen_ai_stream_interrupted_total{service_name=~\"$service\", deployment_environment=~\"$env\"}[$__range]))",
|
|
"legendFormat": "interruptions"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "LLM streams that died mid-flight over the dashboard range. before_first_chunk = upstream blew up; mid_stream = partial delivery (user saw a broken response).",
|
|
"id": 41,
|
|
"links": [],
|
|
"title": "Stream Interruptions (range)",
|
|
"vizConfig": {
|
|
"group": "stat",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "thresholds"
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
},
|
|
{
|
|
"color": "yellow",
|
|
"value": 1
|
|
},
|
|
{
|
|
"color": "red",
|
|
"value": 10
|
|
}
|
|
]
|
|
},
|
|
"unit": "short",
|
|
"noValue": "0"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"colorMode": "value",
|
|
"graphMode": "none",
|
|
"justifyMode": "auto",
|
|
"orientation": "auto",
|
|
"percentChangeColorMode": "standard",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showPercentChange": false,
|
|
"textMode": "auto",
|
|
"wideLayout": true
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-60": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum(increase(airi_gen_ai_gateway_key_exhausted_total{service_name=~\"$service\", deployment_environment=~\"$env\"}[5m]))",
|
|
"legendFormat": "events"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Number of (model, upstream) pairs that ran out of usable keys within one user request over the last 5 minutes. Sustained > 0 = a provider account is dead or every stored ciphertext is failing to decrypt — page on-call.",
|
|
"id": 60,
|
|
"links": [],
|
|
"title": "Key Exhausted (5m)",
|
|
"vizConfig": {
|
|
"group": "stat",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "thresholds"
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
},
|
|
{
|
|
"color": "red",
|
|
"value": 1
|
|
}
|
|
]
|
|
},
|
|
"unit": "short",
|
|
"noValue": "0"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"colorMode": "value",
|
|
"graphMode": "none",
|
|
"justifyMode": "auto",
|
|
"orientation": "auto",
|
|
"percentChangeColorMode": "standard",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showPercentChange": false,
|
|
"textMode": "auto",
|
|
"wideLayout": true
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-61": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum(increase(airi_gen_ai_gateway_decrypt_failures_total{service_name=~\"$service\", deployment_environment=~\"$env\"}[5m]))",
|
|
"legendFormat": "events"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Envelope-crypto decrypt failures in the key rotator. Non-zero is security-relevant: either the master key was rotated without re-wrapping ciphertexts, or someone forged a config blob.",
|
|
"id": 61,
|
|
"links": [],
|
|
"title": "Decrypt Failures (5m)",
|
|
"vizConfig": {
|
|
"group": "stat",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "thresholds"
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
},
|
|
{
|
|
"color": "red",
|
|
"value": 1
|
|
}
|
|
]
|
|
},
|
|
"unit": "short",
|
|
"noValue": "0"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"colorMode": "value",
|
|
"graphMode": "none",
|
|
"justifyMode": "auto",
|
|
"orientation": "auto",
|
|
"percentChangeColorMode": "standard",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showPercentChange": false,
|
|
"textMode": "auto",
|
|
"wideLayout": true
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-62": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "100 * sum(rate(airi_gen_ai_gateway_fallback_count_total{service_name=~\"$service\", deployment_environment=~\"$env\"}[5m])) / clamp_min(sum(rate(gen_ai_client_operation_count_total{service_name=~\"$service\", deployment_environment=~\"$env\"}[5m])), 1)",
|
|
"legendFormat": "fallback %"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Fallback attempts ÷ total LLM operations over the last 5m. Sustained > 30% means one provider is degraded and the router is silently masking it for users while burning quota on the failing upstream.",
|
|
"id": 62,
|
|
"links": [],
|
|
"title": "Fallback Ratio % (5m)",
|
|
"vizConfig": {
|
|
"group": "gauge",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "thresholds"
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
},
|
|
{
|
|
"color": "yellow",
|
|
"value": 10
|
|
},
|
|
{
|
|
"color": "red",
|
|
"value": 30
|
|
}
|
|
]
|
|
},
|
|
"unit": "percent",
|
|
"decimals": 1,
|
|
"noValue": "0",
|
|
"min": 0,
|
|
"max": 100
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"minVizHeight": 75,
|
|
"minVizWidth": 75,
|
|
"orientation": "auto",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showThresholdLabels": false,
|
|
"showThresholdMarkers": true,
|
|
"sizing": "auto"
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-65": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum by (provider, status_code) (rate(airi_gen_ai_gateway_upstream_errors_total{service_name=~\"$service\", deployment_environment=~\"$env\"}[$__rate_interval]))",
|
|
"legendFormat": "{{provider}} · {{status_code}}"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Per-upstream non-2xx response rate split by status code. Only counts attempts where the upstream actually answered. 401/403 = bad key; 429 = quota; 5xx = upstream outage.",
|
|
"id": 65,
|
|
"links": [],
|
|
"title": "Upstream Errors by Status Code",
|
|
"vizConfig": {
|
|
"group": "timeseries",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "palette-classic"
|
|
},
|
|
"custom": {
|
|
"axisBorderShow": false,
|
|
"axisCenteredZero": false,
|
|
"axisColorMode": "text",
|
|
"axisLabel": "",
|
|
"axisPlacement": "auto",
|
|
"barAlignment": 0,
|
|
"barWidthFactor": 0.6,
|
|
"drawStyle": "line",
|
|
"fillOpacity": 20,
|
|
"gradientMode": "none",
|
|
"hideFrom": {
|
|
"legend": false,
|
|
"tooltip": false,
|
|
"viz": false
|
|
},
|
|
"insertNulls": false,
|
|
"lineInterpolation": "smooth",
|
|
"lineWidth": 1,
|
|
"pointSize": 5,
|
|
"scaleDistribution": {
|
|
"type": "linear"
|
|
},
|
|
"showPoints": "auto",
|
|
"showValues": false,
|
|
"spanNulls": false,
|
|
"stacking": {
|
|
"group": "A",
|
|
"mode": "none"
|
|
},
|
|
"thresholdsStyle": {
|
|
"mode": "off"
|
|
}
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "ops"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"annotations": {
|
|
"clustering": -1,
|
|
"multiLane": false
|
|
},
|
|
"legend": {
|
|
"calcs": [
|
|
"lastNotNull",
|
|
"max"
|
|
],
|
|
"displayMode": "table",
|
|
"placement": "right",
|
|
"showLegend": true
|
|
},
|
|
"tooltip": {
|
|
"hideZeros": false,
|
|
"mode": "multi",
|
|
"sort": "desc"
|
|
}
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-30": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum by (currency) (increase(airi_stripe_revenue_minor_unit_total{service_name=~\"$service\", deployment_environment=~\"$env\", currency!=\"\"}[$__range])) / 100",
|
|
"legendFormat": "{{currency}}"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Stripe revenue over dashboard range, in major currency unit (cents → dollars). Cross-currency sums are meaningless — always grouped by currency. Empty in dev / fresh deploys.",
|
|
"id": 30,
|
|
"links": [],
|
|
"title": "Revenue (range)",
|
|
"vizConfig": {
|
|
"group": "stat",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "fixed",
|
|
"fixedColor": "green"
|
|
},
|
|
"fieldMinMax": false,
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "short",
|
|
"decimals": 2,
|
|
"noValue": "—"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"colorMode": "none",
|
|
"graphMode": "area",
|
|
"justifyMode": "auto",
|
|
"orientation": "auto",
|
|
"percentChangeColorMode": "standard",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showPercentChange": true,
|
|
"textMode": "value_and_name",
|
|
"wideLayout": true
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-31": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "100 * sum(increase(stripe_checkout_completed_total{service_name=~\"$service\", deployment_environment=~\"$env\"}[$__range])) / clamp_min(sum(increase(stripe_checkout_created_total{service_name=~\"$service\", deployment_environment=~\"$env\"}[$__range])), 1)",
|
|
"legendFormat": "completed %"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Completed checkouts ÷ created checkouts over dashboard range. Drops can flag price-page bugs or payment-method outages.",
|
|
"id": 31,
|
|
"links": [],
|
|
"title": "Checkout Conversion %",
|
|
"vizConfig": {
|
|
"group": "gauge",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "thresholds"
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "red",
|
|
"value": 0
|
|
},
|
|
{
|
|
"color": "yellow",
|
|
"value": 30
|
|
},
|
|
{
|
|
"color": "green",
|
|
"value": 60
|
|
}
|
|
]
|
|
},
|
|
"unit": "percent",
|
|
"decimals": 1,
|
|
"noValue": "—",
|
|
"min": 0,
|
|
"max": 100
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"minVizHeight": 75,
|
|
"minVizWidth": 75,
|
|
"orientation": "auto",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showThresholdLabels": false,
|
|
"showThresholdMarkers": true,
|
|
"sizing": "auto"
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-32": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum by (event_type) (increase(stripe_events_total{service_name=~\"$service\", deployment_environment=~\"$env\", event_type!=\"\"}[$__range]))",
|
|
"legendFormat": "{{event_type}}"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Webhook events grouped by event.type. Pattern shifts (e.g. surge in invoice.payment_failed) indicate billing health.",
|
|
"id": 32,
|
|
"links": [],
|
|
"title": "Stripe Events (range)",
|
|
"vizConfig": {
|
|
"group": "stat",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "fixed",
|
|
"fixedColor": "blue"
|
|
},
|
|
"fieldMinMax": false,
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "blue",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "short",
|
|
"noValue": "—"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"colorMode": "none",
|
|
"graphMode": "none",
|
|
"justifyMode": "auto",
|
|
"orientation": "auto",
|
|
"percentChangeColorMode": "standard",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showPercentChange": true,
|
|
"textMode": "value_and_name",
|
|
"wideLayout": true
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-50": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "histogram_quantile(0.95, sum by (le) (rate(db_client_operation_duration_seconds_bucket{service_name=~\"$service\", deployment_environment=~\"$env\"}[5m])))",
|
|
"legendFormat": "p95"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "PostgreSQL query duration P95 from PgInstrumentation. Fixed 5m window. Spikes correlate with index misses, connection exhaustion, or backend lock contention.",
|
|
"id": 50,
|
|
"links": [],
|
|
"title": "DB Query P95 (5m)",
|
|
"vizConfig": {
|
|
"group": "stat",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "thresholds"
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
},
|
|
{
|
|
"color": "yellow",
|
|
"value": 0.05
|
|
},
|
|
{
|
|
"color": "red",
|
|
"value": 0.5
|
|
}
|
|
]
|
|
},
|
|
"unit": "s",
|
|
"decimals": 3
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"colorMode": "value",
|
|
"graphMode": "area",
|
|
"justifyMode": "auto",
|
|
"orientation": "auto",
|
|
"percentChangeColorMode": "standard",
|
|
"reduceOptions": {
|
|
"calcs": [
|
|
"lastNotNull"
|
|
],
|
|
"fields": "",
|
|
"values": false
|
|
},
|
|
"showPercentChange": false,
|
|
"textMode": "auto",
|
|
"wideLayout": true
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-51": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "sum by (service_instance_id) (db_client_connection_count{service_name=~\"$service\", deployment_environment=~\"$env\"})",
|
|
"legendFormat": "{{service_instance_id}}"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Open PostgreSQL connections, per replica (`service_instance_id`). Each instance has its own pool sized by env `DB_POOL_MAX`. One instance with a permanently-high count = pool leak on that pod.",
|
|
"id": 51,
|
|
"links": [],
|
|
"title": "DB Pool Connections by Instance",
|
|
"vizConfig": {
|
|
"group": "timeseries",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "palette-classic"
|
|
},
|
|
"custom": {
|
|
"axisBorderShow": false,
|
|
"axisCenteredZero": false,
|
|
"axisColorMode": "text",
|
|
"axisLabel": "",
|
|
"axisPlacement": "auto",
|
|
"barAlignment": 0,
|
|
"barWidthFactor": 0.6,
|
|
"drawStyle": "line",
|
|
"fillOpacity": 20,
|
|
"gradientMode": "none",
|
|
"hideFrom": {
|
|
"legend": false,
|
|
"tooltip": false,
|
|
"viz": false
|
|
},
|
|
"insertNulls": false,
|
|
"lineInterpolation": "smooth",
|
|
"lineWidth": 1,
|
|
"pointSize": 5,
|
|
"scaleDistribution": {
|
|
"type": "linear"
|
|
},
|
|
"showPoints": "auto",
|
|
"showValues": false,
|
|
"spanNulls": false,
|
|
"stacking": {
|
|
"group": "A",
|
|
"mode": "none"
|
|
},
|
|
"thresholdsStyle": {
|
|
"mode": "off"
|
|
}
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "short"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"annotations": {
|
|
"clustering": -1,
|
|
"multiLane": false
|
|
},
|
|
"legend": {
|
|
"calcs": [
|
|
"lastNotNull",
|
|
"max"
|
|
],
|
|
"displayMode": "table",
|
|
"placement": "right",
|
|
"showLegend": true
|
|
},
|
|
"tooltip": {
|
|
"hideZeros": false,
|
|
"mode": "multi",
|
|
"sort": "desc"
|
|
}
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-52": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "100 * sum by (service_instance_id) (v8js_memory_heap_used_bytes{service_name=~\"$service\", deployment_environment=~\"$env\"}) / clamp_min(sum by (service_instance_id) (v8js_memory_heap_limit_bytes{service_name=~\"$service\", deployment_environment=~\"$env\"}), 1)",
|
|
"legendFormat": "{{service_instance_id}}"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "V8 heap used ÷ heap limit, per replica (`service_instance_id`). A single replica trending up while others stay flat = leak on that pod.",
|
|
"id": 52,
|
|
"links": [],
|
|
"title": "Heap Used % by Instance",
|
|
"vizConfig": {
|
|
"group": "timeseries",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "palette-classic"
|
|
},
|
|
"custom": {
|
|
"axisBorderShow": false,
|
|
"axisCenteredZero": false,
|
|
"axisColorMode": "text",
|
|
"axisLabel": "",
|
|
"axisPlacement": "auto",
|
|
"barAlignment": 0,
|
|
"barWidthFactor": 0.6,
|
|
"drawStyle": "line",
|
|
"fillOpacity": 20,
|
|
"gradientMode": "none",
|
|
"hideFrom": {
|
|
"legend": false,
|
|
"tooltip": false,
|
|
"viz": false
|
|
},
|
|
"insertNulls": false,
|
|
"lineInterpolation": "smooth",
|
|
"lineWidth": 1,
|
|
"pointSize": 5,
|
|
"scaleDistribution": {
|
|
"type": "linear"
|
|
},
|
|
"showPoints": "auto",
|
|
"showValues": false,
|
|
"spanNulls": false,
|
|
"stacking": {
|
|
"group": "A",
|
|
"mode": "none"
|
|
},
|
|
"thresholdsStyle": {
|
|
"mode": "off"
|
|
}
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "percent"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"annotations": {
|
|
"clustering": -1,
|
|
"multiLane": false
|
|
},
|
|
"legend": {
|
|
"calcs": [
|
|
"lastNotNull",
|
|
"max"
|
|
],
|
|
"displayMode": "table",
|
|
"placement": "right",
|
|
"showLegend": true
|
|
},
|
|
"tooltip": {
|
|
"hideZeros": false,
|
|
"mode": "multi",
|
|
"sort": "desc"
|
|
}
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-53": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "max by (service_instance_id) (nodejs_eventloop_delay_p99_seconds{service_name=~\"$service\", deployment_environment=~\"$env\"})",
|
|
"legendFormat": "{{service_instance_id}}"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "P99 event-loop delay per replica. One replica climbing while others stay flat = CPU-bound work pinning that pod. >50ms sustained is bad anywhere.",
|
|
"id": 53,
|
|
"links": [],
|
|
"title": "Event Loop Delay P99 by Instance",
|
|
"vizConfig": {
|
|
"group": "timeseries",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {
|
|
"color": {
|
|
"mode": "palette-classic"
|
|
},
|
|
"custom": {
|
|
"axisBorderShow": false,
|
|
"axisCenteredZero": false,
|
|
"axisColorMode": "text",
|
|
"axisLabel": "",
|
|
"axisPlacement": "auto",
|
|
"barAlignment": 0,
|
|
"barWidthFactor": 0.6,
|
|
"drawStyle": "line",
|
|
"fillOpacity": 20,
|
|
"gradientMode": "none",
|
|
"hideFrom": {
|
|
"legend": false,
|
|
"tooltip": false,
|
|
"viz": false
|
|
},
|
|
"insertNulls": false,
|
|
"lineInterpolation": "smooth",
|
|
"lineWidth": 1,
|
|
"pointSize": 5,
|
|
"scaleDistribution": {
|
|
"type": "linear"
|
|
},
|
|
"showPoints": "auto",
|
|
"showValues": false,
|
|
"spanNulls": false,
|
|
"stacking": {
|
|
"group": "A",
|
|
"mode": "none"
|
|
},
|
|
"thresholdsStyle": {
|
|
"mode": "off"
|
|
}
|
|
},
|
|
"thresholds": {
|
|
"mode": "absolute",
|
|
"steps": [
|
|
{
|
|
"color": "green",
|
|
"value": 0
|
|
}
|
|
]
|
|
},
|
|
"unit": "s"
|
|
},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"annotations": {
|
|
"clustering": -1,
|
|
"multiLane": false
|
|
},
|
|
"legend": {
|
|
"calcs": [
|
|
"lastNotNull",
|
|
"max"
|
|
],
|
|
"displayMode": "table",
|
|
"placement": "right",
|
|
"showLegend": true
|
|
},
|
|
"tooltip": {
|
|
"hideZeros": false,
|
|
"mode": "multi",
|
|
"sort": "desc"
|
|
}
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-91": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-logs"
|
|
},
|
|
"group": "loki",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "{service_name=~\"$service\", deployment_environment=~\"$env\"} | json | level=~\"warn|error\"",
|
|
"legendFormat": ""
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Server-side error logs (level=warn|error) from Loki. Derived fields make `trace_id` and `req` clickable — `trace_id` jumps to Tempo for full request playback.",
|
|
"id": 91,
|
|
"links": [],
|
|
"title": "5xx Error Logs",
|
|
"vizConfig": {
|
|
"group": "logs",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"dedupStrategy": "none",
|
|
"enableInfiniteScrolling": false,
|
|
"enableLogDetails": true,
|
|
"prettifyLogMessage": false,
|
|
"showCommonLabels": false,
|
|
"showControls": false,
|
|
"showFieldSelector": false,
|
|
"showLabels": true,
|
|
"showLevel": true,
|
|
"showLogAttributes": true,
|
|
"showTime": true,
|
|
"sortOrder": "Descending",
|
|
"timestampResolution": "ms",
|
|
"unwrappedColumns": false,
|
|
"wrapLogMessage": true
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
},
|
|
"panel-90": {
|
|
"kind": "Panel",
|
|
"spec": {
|
|
"data": {
|
|
"kind": "QueryGroup",
|
|
"spec": {
|
|
"queries": [
|
|
{
|
|
"kind": "PanelQuery",
|
|
"spec": {
|
|
"hidden": false,
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-logs"
|
|
},
|
|
"group": "loki",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"expr": "{service_name=~\"$service\", deployment_environment=~\"$env\"} |= ``",
|
|
"legendFormat": ""
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refId": "A"
|
|
}
|
|
}
|
|
],
|
|
"queryOptions": {},
|
|
"transformations": []
|
|
}
|
|
},
|
|
"description": "Live application logs from Loki. Filter via the panel UI; click trace_id to jump to Tempo.",
|
|
"id": 90,
|
|
"links": [],
|
|
"title": "Application Logs",
|
|
"vizConfig": {
|
|
"group": "logs",
|
|
"kind": "VizConfig",
|
|
"spec": {
|
|
"fieldConfig": {
|
|
"defaults": {},
|
|
"overrides": []
|
|
},
|
|
"options": {
|
|
"dedupStrategy": "none",
|
|
"enableInfiniteScrolling": false,
|
|
"enableLogDetails": true,
|
|
"prettifyLogMessage": false,
|
|
"showCommonLabels": false,
|
|
"showControls": false,
|
|
"showFieldSelector": false,
|
|
"showLabels": true,
|
|
"showLevel": true,
|
|
"showLogAttributes": true,
|
|
"showTime": true,
|
|
"sortOrder": "Descending",
|
|
"timestampResolution": "ms",
|
|
"unwrappedColumns": false,
|
|
"wrapLogMessage": true
|
|
}
|
|
},
|
|
"version": "13.0.0-23630096546"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"layout": {
|
|
"kind": "RowsLayout",
|
|
"spec": {
|
|
"rows": [
|
|
{
|
|
"kind": "RowsLayoutRow",
|
|
"spec": {
|
|
"collapse": false,
|
|
"layout": {
|
|
"kind": "GridLayout",
|
|
"spec": {
|
|
"items": [
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-1"
|
|
},
|
|
"height": 4,
|
|
"width": 6,
|
|
"x": 0,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-3"
|
|
},
|
|
"height": 4,
|
|
"width": 6,
|
|
"x": 6,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-4"
|
|
},
|
|
"height": 4,
|
|
"width": 6,
|
|
"x": 12,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-40"
|
|
},
|
|
"height": 8,
|
|
"width": 6,
|
|
"x": 18,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-15"
|
|
},
|
|
"height": 4,
|
|
"width": 6,
|
|
"x": 0,
|
|
"y": 4
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-5"
|
|
},
|
|
"height": 4,
|
|
"width": 6,
|
|
"x": 6,
|
|
"y": 4
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-93"
|
|
},
|
|
"height": 4,
|
|
"width": 6,
|
|
"x": 12,
|
|
"y": 4
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-92"
|
|
},
|
|
"height": 5,
|
|
"width": 24,
|
|
"x": 0,
|
|
"y": 8
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"title": "Service Health"
|
|
}
|
|
},
|
|
{
|
|
"kind": "RowsLayoutRow",
|
|
"spec": {
|
|
"collapse": false,
|
|
"layout": {
|
|
"kind": "GridLayout",
|
|
"spec": {
|
|
"items": [
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-80"
|
|
},
|
|
"height": 4,
|
|
"width": 8,
|
|
"x": 0,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-81"
|
|
},
|
|
"height": 4,
|
|
"width": 8,
|
|
"x": 8,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-82"
|
|
},
|
|
"height": 4,
|
|
"width": 8,
|
|
"x": 16,
|
|
"y": 0
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"title": "User Engagement"
|
|
}
|
|
},
|
|
{
|
|
"kind": "RowsLayoutRow",
|
|
"spec": {
|
|
"collapse": false,
|
|
"layout": {
|
|
"kind": "GridLayout",
|
|
"spec": {
|
|
"items": [
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-95"
|
|
},
|
|
"height": 5,
|
|
"width": 6,
|
|
"x": 0,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-96"
|
|
},
|
|
"height": 5,
|
|
"width": 6,
|
|
"x": 6,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-97"
|
|
},
|
|
"height": 9,
|
|
"width": 12,
|
|
"x": 12,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-98"
|
|
},
|
|
"height": 4,
|
|
"width": 12,
|
|
"x": 0,
|
|
"y": 5
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"title": "Product Analytics"
|
|
}
|
|
},
|
|
{
|
|
"kind": "RowsLayoutRow",
|
|
"spec": {
|
|
"collapse": false,
|
|
"layout": {
|
|
"kind": "GridLayout",
|
|
"spec": {
|
|
"items": [
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-94"
|
|
},
|
|
"height": 8,
|
|
"width": 24,
|
|
"x": 0,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-16"
|
|
},
|
|
"height": 11,
|
|
"width": 7,
|
|
"x": 0,
|
|
"y": 8
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-20"
|
|
},
|
|
"height": 11,
|
|
"width": 17,
|
|
"x": 7,
|
|
"y": 8
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"title": "HTTP"
|
|
}
|
|
},
|
|
{
|
|
"kind": "RowsLayoutRow",
|
|
"spec": {
|
|
"collapse": false,
|
|
"layout": {
|
|
"kind": "GridLayout",
|
|
"spec": {
|
|
"items": [
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-11"
|
|
},
|
|
"height": 8,
|
|
"width": 12,
|
|
"x": 0,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-21"
|
|
},
|
|
"height": 8,
|
|
"width": 12,
|
|
"x": 12,
|
|
"y": 0
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"title": "LLM Gateway"
|
|
}
|
|
},
|
|
{
|
|
"kind": "RowsLayoutRow",
|
|
"spec": {
|
|
"collapse": false,
|
|
"layout": {
|
|
"kind": "GridLayout",
|
|
"spec": {
|
|
"items": [
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-66"
|
|
},
|
|
"height": 7,
|
|
"width": 6,
|
|
"x": 0,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-67"
|
|
},
|
|
"height": 7,
|
|
"width": 6,
|
|
"x": 6,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-68"
|
|
},
|
|
"height": 7,
|
|
"width": 6,
|
|
"x": 12,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-69"
|
|
},
|
|
"height": 7,
|
|
"width": 6,
|
|
"x": 18,
|
|
"y": 0
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"title": "Provider Upstreams"
|
|
}
|
|
},
|
|
{
|
|
"kind": "RowsLayoutRow",
|
|
"spec": {
|
|
"collapse": false,
|
|
"layout": {
|
|
"kind": "GridLayout",
|
|
"spec": {
|
|
"items": [
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-73"
|
|
},
|
|
"height": 7,
|
|
"width": 6,
|
|
"x": 0,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-71"
|
|
},
|
|
"height": 7,
|
|
"width": 10,
|
|
"x": 6,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-43"
|
|
},
|
|
"height": 7,
|
|
"width": 4,
|
|
"x": 16,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-41"
|
|
},
|
|
"height": 7,
|
|
"width": 4,
|
|
"x": 20,
|
|
"y": 0
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"title": "LLM Tokens & Quality"
|
|
}
|
|
},
|
|
{
|
|
"kind": "RowsLayoutRow",
|
|
"spec": {
|
|
"collapse": false,
|
|
"layout": {
|
|
"kind": "GridLayout",
|
|
"spec": {
|
|
"items": [
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-60"
|
|
},
|
|
"height": 6,
|
|
"width": 6,
|
|
"x": 0,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-61"
|
|
},
|
|
"height": 6,
|
|
"width": 6,
|
|
"x": 6,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-62"
|
|
},
|
|
"height": 6,
|
|
"width": 6,
|
|
"x": 12,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-65"
|
|
},
|
|
"height": 6,
|
|
"width": 6,
|
|
"x": 18,
|
|
"y": 0
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"title": "LLM Router Health"
|
|
}
|
|
},
|
|
{
|
|
"kind": "RowsLayoutRow",
|
|
"spec": {
|
|
"collapse": false,
|
|
"layout": {
|
|
"kind": "GridLayout",
|
|
"spec": {
|
|
"items": [
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-30"
|
|
},
|
|
"height": 7,
|
|
"width": 8,
|
|
"x": 0,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-31"
|
|
},
|
|
"height": 7,
|
|
"width": 8,
|
|
"x": 8,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-32"
|
|
},
|
|
"height": 7,
|
|
"width": 8,
|
|
"x": 16,
|
|
"y": 0
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"title": "Business"
|
|
}
|
|
},
|
|
{
|
|
"kind": "RowsLayoutRow",
|
|
"spec": {
|
|
"collapse": true,
|
|
"layout": {
|
|
"kind": "GridLayout",
|
|
"spec": {
|
|
"items": [
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-50"
|
|
},
|
|
"height": 6,
|
|
"width": 6,
|
|
"x": 0,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-51"
|
|
},
|
|
"height": 6,
|
|
"width": 6,
|
|
"x": 6,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-52"
|
|
},
|
|
"height": 6,
|
|
"width": 6,
|
|
"x": 12,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-53"
|
|
},
|
|
"height": 6,
|
|
"width": 6,
|
|
"x": 18,
|
|
"y": 0
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"title": "Infrastructure"
|
|
}
|
|
},
|
|
{
|
|
"kind": "RowsLayoutRow",
|
|
"spec": {
|
|
"collapse": false,
|
|
"layout": {
|
|
"kind": "GridLayout",
|
|
"spec": {
|
|
"items": [
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-91"
|
|
},
|
|
"height": 10,
|
|
"width": 24,
|
|
"x": 0,
|
|
"y": 0
|
|
}
|
|
},
|
|
{
|
|
"kind": "GridLayoutItem",
|
|
"spec": {
|
|
"element": {
|
|
"kind": "ElementReference",
|
|
"name": "panel-90"
|
|
},
|
|
"height": 10,
|
|
"width": 24,
|
|
"x": 0,
|
|
"y": 10
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"title": "Logs"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"links": [],
|
|
"liveNow": false,
|
|
"preload": false,
|
|
"tags": [
|
|
"airi",
|
|
"observability",
|
|
"grafana-cloud"
|
|
],
|
|
"timeSettings": {
|
|
"autoRefresh": "30s",
|
|
"autoRefreshIntervals": [
|
|
"5s",
|
|
"10s",
|
|
"30s",
|
|
"1m",
|
|
"5m",
|
|
"15m",
|
|
"30m",
|
|
"1h",
|
|
"2h",
|
|
"1d"
|
|
],
|
|
"fiscalYearStartMonth": 0,
|
|
"from": "now-1h",
|
|
"hideTimepicker": false,
|
|
"timezone": "browser",
|
|
"to": "now"
|
|
},
|
|
"title": "AIRI Server Overview",
|
|
"variables": [
|
|
{
|
|
"kind": "QueryVariable",
|
|
"spec": {
|
|
"allowCustomValue": true,
|
|
"current": {
|
|
"text": "All",
|
|
"value": "$__all"
|
|
},
|
|
"definition": "label_values(target_info, deployment_environment)",
|
|
"hide": "dontHide",
|
|
"includeAll": true,
|
|
"multi": false,
|
|
"name": "env",
|
|
"options": [],
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"__legacyStringValue": "label_values(target_info, deployment_environment)"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refresh": "onDashboardLoad",
|
|
"regex": "",
|
|
"regexApplyTo": "value",
|
|
"skipUrlSync": false,
|
|
"sort": "disabled"
|
|
}
|
|
},
|
|
{
|
|
"kind": "QueryVariable",
|
|
"spec": {
|
|
"allowCustomValue": true,
|
|
"current": {
|
|
"text": [
|
|
"server"
|
|
],
|
|
"value": [
|
|
"server"
|
|
]
|
|
},
|
|
"definition": "label_values(target_info{deployment_environment=~\"$env\"}, service_name)",
|
|
"hide": "dontHide",
|
|
"includeAll": true,
|
|
"multi": true,
|
|
"name": "service",
|
|
"options": [],
|
|
"query": {
|
|
"datasource": {
|
|
"name": "grafanacloud-projairi-prom"
|
|
},
|
|
"group": "prometheus",
|
|
"kind": "DataQuery",
|
|
"spec": {
|
|
"__legacyStringValue": "label_values(target_info{deployment_environment=~\"$env\"}, service_name)"
|
|
},
|
|
"version": "v0"
|
|
},
|
|
"refresh": "onDashboardLoad",
|
|
"regex": "",
|
|
"regexApplyTo": "value",
|
|
"skipUrlSync": false,
|
|
"sort": "disabled"
|
|
}
|
|
}
|
|
]
|
|
}
|