- Move flat service manifests into structured subdirs (apps/, bootstrap-jobs/, repair-jobs/, migration-jobs/, validation-jobs/, node-ops/, networking/) - Retire oneoffs/ directories across services - Remove oceanus cluster and its host roles; add aether cluster + terraform scaffolding - Reorganize scripts/ into ops/, render/, sync/, manual-tests/ - Add Makefile with render/validate/test/flux targets and repo-structure tests - Update flux-system application CRs to the new paths - Add hermes-automated-triage-24h-plan knowledge doc (+ comms mirror) - Refresh knowledge catalogs, dashboards, vmalert rules, quality contract Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3013 lines
147 KiB
JSON
3013 lines
147 KiB
JSON
[
|
|
{
|
|
"dashboard": "Atlas GitOps",
|
|
"panel_title": "Flux Source",
|
|
"panel_id": 1,
|
|
"panel_type": "stat",
|
|
"description": "Branch and revision currently reported by Flux's GitRepository source.",
|
|
"tags": [
|
|
"atlas",
|
|
"gitops",
|
|
"flux"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max by (branch, revision) (ananke_gitops_flux_source_info{job=\"ananke-power\",namespace=\"flux-system\",name=\"flux-system\"}) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas GitOps",
|
|
"panel_title": "Kustomizations Ready",
|
|
"panel_id": 2,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"gitops",
|
|
"flux"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"100 * sum(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})) / clamp_min(count(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})), 1)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas GitOps",
|
|
"panel_title": "Kustomizations Suspended",
|
|
"panel_id": 3,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"gitops",
|
|
"flux"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(max by (namespace, name) (ananke_gitops_kustomization_suspended{job=\"ananke-power\"})) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas GitOps",
|
|
"panel_title": "HelmReleases Ready",
|
|
"panel_id": 4,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"gitops",
|
|
"flux"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"100 * sum(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})) / clamp_min(count(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})), 1)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas GitOps",
|
|
"panel_title": "HelmReleases Suspended",
|
|
"panel_id": 5,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"gitops",
|
|
"flux"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(max by (namespace, name) (ananke_gitops_helmrelease_suspended{job=\"ananke-power\"})) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas GitOps",
|
|
"panel_title": "GitOps Exporter",
|
|
"panel_id": 6,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"gitops",
|
|
"flux"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"min(ananke_gitops_scrape_success{job=\"ananke-power\"}) or on() vector(0)",
|
|
"(time() - max(ananke_gitops_last_scrape_timestamp_seconds{job=\"ananke-power\"})) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas GitOps",
|
|
"panel_title": "Readiness History",
|
|
"panel_id": 7,
|
|
"panel_type": "state-timeline",
|
|
"description": "Ready percentage over time for Flux Kustomizations and HelmReleases.",
|
|
"tags": [
|
|
"atlas",
|
|
"gitops",
|
|
"flux"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"label_replace(100 * sum(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})) / clamp_min(count(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})), 1), \"kind\", \"Kustomizations\", \"__name__\", \".*\") or label_replace(100 * sum(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})) / clamp_min(count(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})), 1), \"kind\", \"HelmReleases\", \"__name__\", \".*\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas GitOps",
|
|
"panel_title": "Flux Sources",
|
|
"panel_id": 8,
|
|
"panel_type": "table",
|
|
"description": "A Value of 1 means Ready; 0 means not Ready.",
|
|
"tags": [
|
|
"atlas",
|
|
"gitops",
|
|
"flux"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max by (namespace, name, url, branch, revision, ready, reason) (ananke_gitops_flux_source_info{job=\"ananke-power\"}) * on(namespace, name) group_left() max by (namespace, name) (ananke_gitops_flux_source_ready{job=\"ananke-power\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas GitOps",
|
|
"panel_title": "Kustomizations",
|
|
"panel_id": 9,
|
|
"panel_type": "table",
|
|
"description": "A Value of 1 means Ready; 0 means not Ready. The ready/reason labels come from Flux status.conditions.",
|
|
"tags": [
|
|
"atlas",
|
|
"gitops",
|
|
"flux"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max by (namespace, name, path, source_namespace, source_name, revision, ready, reason) (ananke_gitops_kustomization_info{job=\"ananke-power\"}) * on(namespace, name) group_left() max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas GitOps",
|
|
"panel_title": "HelmReleases",
|
|
"panel_id": 10,
|
|
"panel_type": "table",
|
|
"description": "A Value of 1 means Ready; 0 means not Ready. Chart/version/app_version are included when Flux reports them.",
|
|
"tags": [
|
|
"atlas",
|
|
"gitops",
|
|
"flux"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max by (namespace, name, chart, version, app_version, revision, ready, reason) (ananke_gitops_helmrelease_info{job=\"ananke-power\"}) * on(namespace, name) group_left() max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas GPU",
|
|
"panel_title": "Namespace GPU Utilization",
|
|
"panel_id": 1,
|
|
"panel_type": "piechart",
|
|
"description": "Instant share of observed GPU compute activity by namespace. Host covers GPU work outside Kubernetes pods; idle appears only when observed GPU activity is zero.",
|
|
"tags": [
|
|
"atlas",
|
|
"gpu"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(100 * ((((sum by (namespace) (nvidia_namespace_gpu_sm_util_percent{namespace!=\"\",pod!=\"\",$namespace_scope_gpu})) > 0)) or (label_replace(((sum(((avg by (node) (label_replace(label_replace(DCGM_FI_DEV_GPU_UTIL, \"pod\", \"$1\", \"Hostname\", \"(.*)\"), \"namespace\", \"monitoring\", \"\", \"\") * on(namespace,pod) group_left(node) kube_pod_info{namespace=\"monitoring\"}) or max by (node) (jetson_gr3d_freq_percent{node!=\"\"})) unless on(node) (max by (node,gpu,uuid,model) (last_over_time(nvidia_gpu_device_utilization_percent[5m]))))) or on() vector(0)) > 0), \"namespace\", \"unattributed\", \"\", \"\"))) / clamp_min((sum((((sum by (namespace) (nvidia_namespace_gpu_sm_util_percent{namespace!=\"\",pod!=\"\",$namespace_scope_gpu})) > 0)) or (label_replace(((sum(((avg by (node) (label_replace(label_replace(DCGM_FI_DEV_GPU_UTIL, \"pod\", \"$1\", \"Hostname\", \"(.*)\"), \"namespace\", \"monitoring\", \"\", \"\") * on(namespace,pod) group_left(node) kube_pod_info{namespace=\"monitoring\"}) or max by (node) (jetson_gr3d_freq_percent{node!=\"\"})) unless on(node) (max by (node,gpu,uuid,model) (last_over_time(nvidia_gpu_device_utilization_percent[5m]))))) or on() vector(0)) > 0), \"namespace\", \"unattributed\", \"\", \"\"))) or on() vector(0)), 1)) or (label_replace(vector(100), \"namespace\", \"idle\", \"\", \"\") and on() ((sum((((sum by (namespace) (nvidia_namespace_gpu_sm_util_percent{namespace!=\"\",pod!=\"\",$namespace_scope_gpu})) > 0)) or (label_replace(((sum(((avg by (node) (label_replace(label_replace(DCGM_FI_DEV_GPU_UTIL, \"pod\", \"$1\", \"Hostname\", \"(.*)\"), \"namespace\", \"monitoring\", \"\", \"\") * on(namespace,pod) group_left(node) kube_pod_info{namespace=\"monitoring\"}) or max by (node) (jetson_gr3d_freq_percent{node!=\"\"})) unless on(node) (max by (node,gpu,uuid,model) (last_over_time(nvidia_gpu_device_utilization_percent[5m]))))) or on() vector(0)) > 0), \"namespace\", \"unattributed\", \"\", \"\"))) or on() vector(0)) == 0))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas GPU",
|
|
"panel_title": "GPU Process Util by Namespace",
|
|
"panel_id": 2,
|
|
"panel_type": "timeseries",
|
|
"description": "NVML process-level SM utilization by namespace. Host covers GPU work outside Kubernetes pods.",
|
|
"tags": [
|
|
"atlas",
|
|
"gpu"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"((sum by (namespace) (nvidia_namespace_gpu_sm_util_percent{namespace!=\"\",pod!=\"\",$namespace_scope_gpu})) > 0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas GPU",
|
|
"panel_title": "GPU Util by Node",
|
|
"panel_id": 3,
|
|
"panel_type": "timeseries",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"gpu"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"label_replace(avg by (node) (label_replace(label_replace(DCGM_FI_DEV_GPU_UTIL, \"pod\", \"$1\", \"Hostname\", \"(.*)\"), \"namespace\", \"monitoring\", \"\", \"\") * on(namespace,pod) group_left(node) kube_pod_info{namespace=\"monitoring\"}) or max by (node) (jetson_gr3d_freq_percent{node!=\"\"}), \"Hostname\", \"$1\", \"node\", \"(.*)\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas GPU",
|
|
"panel_title": "GPU Pods Reporting Device Util",
|
|
"panel_id": 4,
|
|
"panel_type": "table",
|
|
"description": "DCGM labels the device utilization sample with GPU-consuming pods; multiple pods on one device can report the same value.",
|
|
"tags": [
|
|
"atlas",
|
|
"gpu"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"topk(10, sum(DCGM_FI_DEV_GPU_UTIL{pod!=\"\"}) by (namespace,pod,Hostname))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Mail",
|
|
"panel_title": "Sent (1d)",
|
|
"panel_id": 1,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"mail"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max(postmark_outbound_sent{window=\"1d\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Mail",
|
|
"panel_title": "Sent (7d)",
|
|
"panel_id": 2,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"mail"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max(postmark_outbound_sent{window=\"7d\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Mail",
|
|
"panel_title": "Mail Bounces (1d)",
|
|
"panel_id": 3,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"mail"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max(postmark_outbound_bounce_rate{window=\"1d\"})",
|
|
"max(postmark_outbound_bounced{window=\"1d\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Mail",
|
|
"panel_title": "Success Rate (1d)",
|
|
"panel_id": 4,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"mail"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"clamp_min(100 - max(postmark_outbound_bounce_rate{window=\"1d\"}), 0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Mail",
|
|
"panel_title": "Limit Used (30d)",
|
|
"panel_id": 5,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"mail"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max(postmark_sending_limit_used_percent)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Mail",
|
|
"panel_title": "Send Limit (30d)",
|
|
"panel_id": 6,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"mail"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max(postmark_sending_limit)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Mail",
|
|
"panel_title": "Last Success",
|
|
"panel_id": 7,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"mail"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max(postmark_last_success_timestamp_seconds)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Mail",
|
|
"panel_title": "Exporter Errors",
|
|
"panel_id": 8,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"mail"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(postmark_request_errors_total)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Mail",
|
|
"panel_title": "Bounce Rate (1d vs 7d)",
|
|
"panel_id": 13,
|
|
"panel_type": "timeseries",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"mail"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max by (window) (postmark_outbound_bounce_rate)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Mail",
|
|
"panel_title": "Bounced (1d vs 7d)",
|
|
"panel_id": 14,
|
|
"panel_type": "timeseries",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"mail"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max by (window) (postmark_outbound_bounced)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Mail",
|
|
"panel_title": "Sent (1d vs 7d)",
|
|
"panel_id": 15,
|
|
"panel_type": "timeseries",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"mail"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max by (window) (postmark_outbound_sent)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Mail",
|
|
"panel_title": "Exporter Errors",
|
|
"panel_id": 16,
|
|
"panel_type": "timeseries",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"mail"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(postmark_request_errors_total)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Network",
|
|
"panel_title": "Ingress Success Rate (5m)",
|
|
"panel_id": 1,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"network"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(sum(rate(traefik_entrypoint_requests_total{code!~\"5..\"}[5m]))) / clamp_min(sum(rate(traefik_entrypoint_requests_total[5m])), 1)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Network",
|
|
"panel_title": "Error Budget Burn (1h)",
|
|
"panel_id": 2,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"network"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(1 - ((sum(rate(traefik_entrypoint_requests_total{code!~\"5..\"}[1h]))) / clamp_min(sum(rate(traefik_entrypoint_requests_total[1h])), 1))) / 0.0010000000000000009"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Network",
|
|
"panel_title": "Error Budget Burn (6h)",
|
|
"panel_id": 3,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"network"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(1 - ((sum(rate(traefik_entrypoint_requests_total{code!~\"5..\"}[6h]))) / clamp_min(sum(rate(traefik_entrypoint_requests_total[6h])), 1))) / 0.0010000000000000009"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Network",
|
|
"panel_title": "Edge P99 Latency (ms)",
|
|
"panel_id": 4,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"network"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"histogram_quantile(0.99, sum by (le) (rate(traefik_entrypoint_request_duration_seconds_bucket[5m]))) * 1000"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Network",
|
|
"panel_title": "Ingress Traffic",
|
|
"panel_id": 5,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"network"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(rate(node_network_receive_bytes_total{device!~\"lo|cni.*|veth.*|flannel.*|docker.*|virbr.*|vxlan.*|wg.*\"}[5m])) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Network",
|
|
"panel_title": "Egress Traffic",
|
|
"panel_id": 6,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"network"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(rate(node_network_transmit_bytes_total{device!~\"lo|cni.*|veth.*|flannel.*|docker.*|virbr.*|vxlan.*|wg.*\"}[5m])) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Network",
|
|
"panel_title": "Intra-Cluster Traffic",
|
|
"panel_id": 7,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"network"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(rate(container_network_receive_bytes_total{namespace!=\"traefik\",pod!=\"\"}[5m]) + rate(container_network_transmit_bytes_total{namespace!=\"traefik\",pod!=\"\"}[5m])) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Network",
|
|
"panel_title": "Per-Node Throughput",
|
|
"panel_id": 8,
|
|
"panel_type": "timeseries",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"network"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"avg by (node) ((sum(rate(node_network_transmit_bytes_total{device!~\"lo|cni.*|veth.*|flannel.*|docker.*|virbr.*|vxlan.*|wg.*\"}[5m])) or on() vector(0) + sum(rate(node_network_receive_bytes_total{device!~\"lo|cni.*|veth.*|flannel.*|docker.*|virbr.*|vxlan.*|wg.*\"}[5m])) or on() vector(0)) * on(instance) group_left(node) label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh|titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\"))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Network",
|
|
"panel_title": "Top Namespaces",
|
|
"panel_id": 9,
|
|
"panel_type": "table",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"network"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"topk(10, sum(rate(container_network_transmit_bytes_total{namespace!=\"\"}[5m]) + rate(container_network_receive_bytes_total{namespace!=\"\"}[5m])) by (namespace))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Network",
|
|
"panel_title": "Top Pods",
|
|
"panel_id": 10,
|
|
"panel_type": "table",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"network"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"topk(10, sum(rate(container_network_transmit_bytes_total{pod!=\"\"}[5m]) + rate(container_network_receive_bytes_total{pod!=\"\"}[5m])) by (namespace,pod))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Network",
|
|
"panel_title": "Traefik Routers (req/s)",
|
|
"panel_id": 11,
|
|
"panel_type": "timeseries",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"network"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"topk(10, sum by (router) (rate(traefik_router_requests_total[5m])))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Network",
|
|
"panel_title": "Traefik Entrypoints (req/s)",
|
|
"panel_id": 12,
|
|
"panel_type": "timeseries",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"network"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum by (entrypoint) (rate(traefik_entrypoint_requests_total[5m]))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Nodes",
|
|
"panel_title": "Worker Nodes Ready",
|
|
"panel_id": 1,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"nodes"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(kube_node_status_condition{condition=\"Ready\",status=\"true\",node=~\"titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Nodes",
|
|
"panel_title": "Control Plane Ready",
|
|
"panel_id": 2,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"nodes"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(kube_node_status_condition{condition=\"Ready\",status=\"true\",node=~\"titan-0a|titan-0b|titan-0c\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Nodes",
|
|
"panel_title": "Control Plane Workloads",
|
|
"panel_id": 3,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"nodes"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(kube_pod_info{node=~\"titan-0a|titan-0b|titan-0c\",namespace!~\"^(kube-.*|.*-system|traefik|monitoring|logging|cert-manager|maintenance|postgres)$\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Nodes",
|
|
"panel_title": "API Server 5xx rate",
|
|
"panel_id": 9,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"nodes"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(rate(apiserver_request_total{code=~\"5..\"}[5m]))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Nodes",
|
|
"panel_title": "API Server P99 latency",
|
|
"panel_id": 10,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"nodes"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"histogram_quantile(0.99, sum by (le) (rate(apiserver_request_duration_seconds_bucket[5m]))) * 1000"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Nodes",
|
|
"panel_title": "etcd P99 latency",
|
|
"panel_id": 11,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"nodes"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"histogram_quantile(0.99, sum by (le) (rate(etcd_request_duration_seconds_bucket[5m]))) * 1000"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Nodes",
|
|
"panel_title": "Node CPU",
|
|
"panel_id": 4,
|
|
"panel_type": "timeseries",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"nodes"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"avg by (node) (((1 - avg by (instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[5m]))) * 100) * on(instance) group_left(node) label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh|titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\"))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Nodes",
|
|
"panel_title": "Node RAM",
|
|
"panel_id": 5,
|
|
"panel_type": "timeseries",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"nodes"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"avg by (node) ((avg by (instance) ((node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100)) * on(instance) group_left(node) label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh|titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\"))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Nodes",
|
|
"panel_title": "Control Plane (incl. titan-db) CPU",
|
|
"panel_id": 6,
|
|
"panel_type": "timeseries",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"nodes"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(avg by (node) (((1 - avg by (instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[5m]))) * 100) * on(instance) group_left(node) label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh|titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\"))) * on(node) group_left() label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh\"}, \"node\", \"$1\", \"nodename\", \"(.*)\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Nodes",
|
|
"panel_title": "Control Plane (incl. titan-db) RAM",
|
|
"panel_id": 7,
|
|
"panel_type": "timeseries",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"nodes"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(avg by (node) ((avg by (instance) ((node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100)) * on(instance) group_left(node) label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh|titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\"))) * on(node) group_left() label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh\"}, \"node\", \"$1\", \"nodename\", \"(.*)\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Nodes",
|
|
"panel_title": "Root Filesystem Usage",
|
|
"panel_id": 8,
|
|
"panel_type": "timeseries",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"nodes"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"avg by (node) ((avg by (instance) ((1 - (node_filesystem_avail_bytes{mountpoint=\"/\",fstype!~\"tmpfs|overlay\"} / node_filesystem_size_bytes{mountpoint=\"/\",fstype!~\"tmpfs|overlay\"})) * 100)) * on(instance) group_left(node) label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh|titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\"))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Nodes",
|
|
"panel_title": "Astraios Usage",
|
|
"panel_id": 9,
|
|
"panel_type": "timeseries",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"nodes"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"avg by (node) ((avg by (instance) ((1 - (node_filesystem_avail_bytes{mountpoint=\"/mnt/astraios\",fstype!~\"tmpfs|overlay\"} / node_filesystem_size_bytes{mountpoint=\"/mnt/astraios\",fstype!~\"tmpfs|overlay\"})) * 100)) * on(instance) group_left(node) label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh|titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\"))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Control Plane Ready",
|
|
"panel_id": 2,
|
|
"panel_type": "gauge",
|
|
"description": "Control-plane nodes currently Ready; full count is good, lower means Kubernetes core capacity is missing.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(kube_node_status_condition{condition=\"Ready\",status=\"true\",node=~\"titan-0a|titan-0b|titan-0c\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Control Plane Workloads",
|
|
"panel_id": 3,
|
|
"panel_type": "stat",
|
|
"description": "Non-core pods running on control-plane nodes; zero is good because control nodes should stay focused.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(kube_pod_info{node=~\"titan-0a|titan-0b|titan-0c\",namespace!~\"^(kube-.*|.*-system|traefik|monitoring|logging|cert-manager|maintenance|postgres)$\"}) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Stuck Terminating",
|
|
"panel_id": 5,
|
|
"panel_type": "stat",
|
|
"description": "Pods that Kubernetes cannot finish deleting; zero is good, growth means cleanup or storage may be stuck.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(max by (namespace,pod) (((time() - kube_pod_deletion_timestamp{pod!=\"\"}) > bool 600) and on(namespace,pod) (kube_pod_deletion_timestamp{pod!=\"\"} > bool 0))) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Atlas Availability (365d)",
|
|
"panel_id": 27,
|
|
"panel_type": "stat",
|
|
"description": "Rolling 365-day availability from vmalert's precomputed atlas:availability:ratio_365d series. Grafana keeps the last successful rollup for up to 24h so one missed long-window evaluation does not render as No data.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"last_over_time(atlas:availability:ratio_365d{scope=\"atlas\"}[24h])"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Problem Pods",
|
|
"panel_id": 4,
|
|
"panel_type": "stat",
|
|
"description": "Pods in unhealthy phases; zero is good, any count means a workload needs attention.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(max by (namespace,pod) (kube_pod_status_phase{phase!~\"Running|Succeeded\"})) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "CrashLoop / ImagePull",
|
|
"panel_id": 6,
|
|
"panel_type": "stat",
|
|
"description": "Pods restarting or unable to pull images; zero is good, any count usually blocks a service.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(max by (namespace,pod) (kube_pod_container_status_waiting_reason{reason=~\"CrashLoopBackOff|ImagePullBackOff\"})) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Workers Ready",
|
|
"panel_id": 1,
|
|
"panel_type": "gauge",
|
|
"description": "Worker nodes currently Ready; full count is good, lower means less place to run services.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(kube_node_status_condition{condition=\"Ready\",status=\"true\",node=~\"titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Hottest node: CPU",
|
|
"panel_id": 7,
|
|
"panel_type": "stat",
|
|
"description": "Highest worker CPU load right now; lower is calmer, hot nodes may need pods moved.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"label_replace(topk(1, avg by (node) (((1 - avg by (instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[5m]))) * 100) * on(instance) group_left(node) label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh|titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\"))), \"__name__\", \"$1\", \"node\", \"(.*)\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Hottest node: RAM",
|
|
"panel_id": 8,
|
|
"panel_type": "stat",
|
|
"description": "Highest worker memory use right now; lower is safer, high values risk evictions.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"label_replace(topk(1, avg by (node) ((avg by (instance) ((node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100)) * on(instance) group_left(node) label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh|titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\"))), \"__name__\", \"$1\", \"node\", \"(.*)\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Hottest node: NET (rx+tx)",
|
|
"panel_id": 9,
|
|
"panel_type": "stat",
|
|
"description": "Busiest node network rate; spikes can reveal traffic concentration or noisy services.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"label_replace(topk(1, avg by (node) ((sum by (instance) (rate(node_network_receive_bytes_total{device!~\"lo\"}[5m]) + rate(node_network_transmit_bytes_total{device!~\"lo\"}[5m]))) * on(instance) group_left(node) label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh|titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\"))), \"__name__\", \"$1\", \"node\", \"(.*)\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Hottest node: I/O (r+w)",
|
|
"panel_id": 10,
|
|
"panel_type": "stat",
|
|
"description": "Busiest node disk I/O rate; high values can explain slow storage-backed apps.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"label_replace(topk(1, avg by (node) ((sum by (instance) (rate(node_disk_read_bytes_total[5m]) + rate(node_disk_written_bytes_total[5m]))) * on(instance) group_left(node) label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh|titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\"))), \"__name__\", \"$1\", \"node\", \"(.*)\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Astreae Usage",
|
|
"panel_id": 23,
|
|
"panel_type": "stat",
|
|
"description": "Percent of Astreae used; lower is safer, high values reduce storage headroom.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"100 - (sum(node_filesystem_avail_bytes{mountpoint=\"/mnt/astreae\",fstype!~\"tmpfs|overlay\"}) / sum(node_filesystem_size_bytes{mountpoint=\"/mnt/astreae\",fstype!~\"tmpfs|overlay\"}) * 100)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Asteria Usage",
|
|
"panel_id": 24,
|
|
"panel_type": "stat",
|
|
"description": "Percent of Asteria used; lower is safer, high values reduce storage headroom.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"100 - (sum(node_filesystem_avail_bytes{mountpoint=\"/mnt/asteria\",fstype!~\"tmpfs|overlay\"}) / sum(node_filesystem_size_bytes{mountpoint=\"/mnt/asteria\",fstype!~\"tmpfs|overlay\"}) * 100)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Astreae Free",
|
|
"panel_id": 25,
|
|
"panel_type": "stat",
|
|
"description": "Free space on Astreae; higher is better for backups and workload growth.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(node_filesystem_avail_bytes{mountpoint=\"/mnt/astreae\",fstype!~\"tmpfs|overlay\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Asteria Free",
|
|
"panel_id": 26,
|
|
"panel_type": "stat",
|
|
"description": "Free space on Asteria; higher is better for backups and workload growth.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(node_filesystem_avail_bytes{mountpoint=\"/mnt/asteria\",fstype!~\"tmpfs|overlay\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Pyrphoros UPS Current",
|
|
"panel_id": 40,
|
|
"panel_type": "stat",
|
|
"description": "Live Pyrphoros UPS draw and runtime; stable runtime means the lab can ride out short outages.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"label_replace(max((ananke_ups_load_percent{job=\"ananke-power\",source=\"Pyrphoros\"} * ananke_ups_power_nominal_watts{job=\"ananke-power\",source=\"Pyrphoros\"}) / 100) or on() vector(0), \"metric\", \"Draw\", \"__name__\", \".*\") or label_replace(max(ananke_ups_runtime_seconds{job=\"ananke-power\",source=\"Pyrphoros\"}) or on() vector(0), \"metric\", \"Runtime\", \"__name__\", \".*\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Statera UPS Current",
|
|
"panel_id": 144,
|
|
"panel_type": "stat",
|
|
"description": "Live Statera UPS draw and runtime; stable runtime means the lab can ride out short outages.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"label_replace(max((ananke_ups_load_percent{job=\"ananke-power\",source=\"Statera\"} * ananke_ups_power_nominal_watts{job=\"ananke-power\",source=\"Statera\"}) / 100) or on() vector(0), \"metric\", \"Draw\", \"__name__\", \".*\") or label_replace(max(ananke_ups_runtime_seconds{job=\"ananke-power\",source=\"Statera\"}) or on() vector(0), \"metric\", \"Runtime\", \"__name__\", \".*\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "UPS History (Power Draw)",
|
|
"panel_id": 41,
|
|
"panel_type": "timeseries",
|
|
"description": "UPS power draw over time; steady draw is normal, spikes show sudden load changes.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max((ananke_ups_load_percent{job=\"ananke-power\",source=\"Pyrphoros\"} * ananke_ups_power_nominal_watts{job=\"ananke-power\",source=\"Pyrphoros\"}) / 100)",
|
|
"max((ananke_ups_load_percent{job=\"ananke-power\",source=\"Statera\"} * ananke_ups_power_nominal_watts{job=\"ananke-power\",source=\"Statera\"}) / 100)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Current Enclosure Temperature",
|
|
"panel_id": 42,
|
|
"panel_type": "stat",
|
|
"description": "Current tent temperature in C and F; moderate values protect hardware and plants.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"label_replace(max(max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_temperature_celsius != 0)) or on() vector(0), \"metric\", \"\u00b0C\", \"__name__\", \".*\") or label_replace(max((max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_temperature_celsius != 0)) * 9 / 5 + 32) or on() vector(0), \"metric\", \"\u00b0F\", \"__name__\", \".*\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Current Enclosure Climate",
|
|
"panel_id": 143,
|
|
"panel_type": "stat",
|
|
"description": "Current humidity and VPD; in-range values mean the enclosure climate is stable.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"label_replace(max(max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_relative_humidity_percent != 0)) or on() vector(0), \"metric\", \"%RH\", \"__name__\", \".*\") or label_replace(max(max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_vpd_kpa != 0)) or on() vector(0), \"metric\", \"kPa\", \"__name__\", \".*\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Enclosure Climate History",
|
|
"panel_id": 43,
|
|
"panel_type": "timeseries",
|
|
"description": "Temperature on left axis, humidity and pressure on right axis with dynamic bound series so small swings remain visible.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_temperature_celsius != 0)",
|
|
"max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_relative_humidity_percent != 0)",
|
|
"max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_vpd_kpa != 0)",
|
|
"(min_over_time(max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_temperature_celsius != 0)[$__range]) - 0.08)",
|
|
"(max_over_time(max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_temperature_celsius != 0)[$__range]) + 0.08)",
|
|
"clamp_min((min_over_time(max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_relative_humidity_percent != 0)[$__range]) - 0.35), 0)",
|
|
"clamp_max((max_over_time(max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_relative_humidity_percent != 0)[$__range]) + 0.35), 100)",
|
|
"clamp_min((min_over_time(max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_vpd_kpa != 0)[$__range]) - 0.03), 0)",
|
|
"(max_over_time(max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_vpd_kpa != 0)[$__range]) + 0.03)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Fan Intensity History",
|
|
"panel_id": 141,
|
|
"panel_type": "state-timeline",
|
|
"description": "Fan intensity lanes on the 0-10 controller scale. Cooler colors are quiet/low intensity; warmer colors mean the enclosure is pushing harder.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"label_replace(max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_fan_speed_level{port=\"1\"}), \"fan\", \"Outlet\", \"__name__\", \".*\") or label_replace(max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_fan_speed_level{port=\"2\"}), \"fan\", \"Inlet - Inside\", \"__name__\", \".*\") or label_replace(max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_fan_speed_level{port=\"3\"}), \"fan\", \"Inlet - Outside\", \"__name__\", \".*\") or label_replace(max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_fan_speed_level{port=\"4\"}), \"fan\", \"Tent Interior\", \"__name__\", \".*\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Flux Source",
|
|
"panel_id": 140,
|
|
"panel_type": "stat",
|
|
"description": "Flux GitRepository branch reported by Ananke. Revision and object detail live in Atlas GitOps.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max by (branch, revision) (ananke_gitops_flux_source_info{job=\"ananke-power\",namespace=\"flux-system\",name=\"flux-system\"}) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Current Gate Health",
|
|
"panel_id": 151,
|
|
"panel_type": "stat",
|
|
"description": "Current gate-check health across suites; skipped or not-applicable checks count as healthy, failures lower it.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(avg((min by (suite) (((100 * sum by (suite) (clamp_max(max by (suite, check) ((((sum by (suite, branch, check, status) (platform_quality:check_status:present_1h{suite=~\"ariadne|metis|ananke|atlasbot|pegasus|soteria|titan_iac|bstein_home|data_prepper|lesavka\",branch=~\"main|master|origin/main|origin/master\",check=~\"tests|coverage|loc|style|docs_naming|gate_glue|sonarqube\",status=~\"ok|passed|success|not_applicable|skipped|na|n/a\"})) or (sum by (suite, branch, check, status) (platform_quality:check_status:present_1h{suite=~\"ariadne|metis|ananke|atlasbot|pegasus|soteria|titan_iac|bstein_home|data_prepper|lesavka\",suite=~\"ariadne|atlasbot|bstein_home|data_prepper\",branch=~\"main|master|origin/main|origin/master\",check=\"supply_chain\",status=~\"ok|passed|success|not_applicable|skipped|na|n/a\"})))) > 0), 1) unless on(suite, check) (clamp_max(max by (suite, check) ((((sum by (suite, branch, check, status) (platform_quality:check_status:present_1h{suite=~\"ariadne|metis|ananke|atlasbot|pegasus|soteria|titan_iac|bstein_home|data_prepper|lesavka\",branch=~\"main|master|origin/main|origin/master\",check=~\"tests|coverage|loc|style|docs_naming|gate_glue|sonarqube\",status!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})) or (sum by (suite, branch, check, status) (platform_quality:check_status:present_1h{suite=~\"ariadne|metis|ananke|atlasbot|pegasus|soteria|titan_iac|bstein_home|data_prepper|lesavka\",suite=~\"ariadne|atlasbot|bstein_home|data_prepper\",branch=~\"main|master|origin/main|origin/master\",check=\"supply_chain\",status!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})))) > 0), 1))) / clamp_min(sum by (suite) (clamp_max(max by (suite, check) ((((sum by (suite, branch, check, status) (platform_quality:check_status:present_1h{suite=~\"ariadne|metis|ananke|atlasbot|pegasus|soteria|titan_iac|bstein_home|data_prepper|lesavka\",branch=~\"main|master|origin/main|origin/master\",check=~\"tests|coverage|loc|style|docs_naming|gate_glue|sonarqube\",status!=\"\"})) or (sum by (suite, branch, check, status) (platform_quality:check_status:present_1h{suite=~\"ariadne|metis|ananke|atlasbot|pegasus|soteria|titan_iac|bstein_home|data_prepper|lesavka\",suite=~\"ariadne|atlasbot|bstein_home|data_prepper\",branch=~\"main|master|origin/main|origin/master\",check=\"supply_chain\",status!=\"\"})))) > 0), 1)), 1))) or (min by (suite) (platform_quality:test_category_health_rate:percent_1h{suite=~\"ariadne|metis|ananke|atlasbot|pegasus|soteria|titan_iac|bstein_home|data_prepper|lesavka\",branch!=\"\",branch=~\"main|master|origin/main|origin/master\",category=~\"api|chaos|compatibility|component|contract|e2e|integration|manual|performance|regression|reliability|security|smoke|system|ui|unit\"}))))) or on() vector(0))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "CI Run Success (24h)",
|
|
"panel_id": 152,
|
|
"panel_type": "stat",
|
|
"description": "Percent of published quality-gate CI runs that completed successfully in 24h; this is automation health, not raw test pass rate.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"100 * ((sum(platform_quality:suite_runs:increase_24h{suite=~\"ariadne|metis|ananke|atlasbot|pegasus|pegasus-health|pegasus_health|soteria|titan_iac|titan-iac|bstein_home|bstein-home|data_prepper|data-prepper|lesavka\",status=~\"ok|passed|success\"}) or on() vector(0))) / clamp_min(((sum(platform_quality:suite_runs:increase_24h{suite=~\"ariadne|metis|ananke|atlasbot|pegasus|pegasus-health|pegasus_health|soteria|titan_iac|titan-iac|bstein_home|bstein-home|data_prepper|data-prepper|lesavka\"}) or on() vector(0))), 1)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Failed Runs (24h)",
|
|
"panel_id": 153,
|
|
"panel_type": "stat",
|
|
"description": "Published quality-gate runs that failed in 24h; zero is good, any value needs a look.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(sum(platform_quality:suite_runs:increase_24h{suite=~\"ariadne|metis|ananke|atlasbot|pegasus|pegasus-health|pegasus_health|soteria|titan_iac|titan-iac|bstein_home|bstein-home|data_prepper|data-prepper|lesavka\",status!~\"ok|passed|success\"}) or on() vector(0))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Suites With Runs (24h)",
|
|
"panel_id": 154,
|
|
"panel_type": "stat",
|
|
"description": "Configured suites with at least one published quality-gate run in 24h; full count means the dashboard is fresh.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum((sum by (suite) (platform_quality:suite_runs:increase_24h{suite=~\"ariadne|metis|ananke|atlasbot|pegasus|soteria|titan_iac|bstein_home|data_prepper|lesavka\"}) > bool 0)) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Avg Coverage",
|
|
"panel_id": 155,
|
|
"panel_type": "stat",
|
|
"description": "Average latest line coverage across suites; higher means code is better protected by tests.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(avg((max by (suite) (platform_quality:suite_coverage_percent:latest_1h{suite=~\"ariadne|metis|ananke|atlasbot|pegasus|soteria|titan_iac|bstein_home|data_prepper|lesavka\"}))) or on() vector(0))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "GitOps Health",
|
|
"panel_id": 150,
|
|
"panel_type": "state-timeline",
|
|
"description": "GitOps readiness and suspension health over time. Blue means perfect; warmer colors mean a readiness or suspension problem appeared.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"label_replace(100 * sum(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})) / clamp_min(count(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})), 1), \"signal\", \"Kustomizations Ready\", \"__name__\", \".*\") or label_replace(100 * sum(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})) / clamp_min(count(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})), 1), \"signal\", \"HelmReleases Ready\", \"__name__\", \".*\") or label_replace(100 * (1 - (sum(max by (namespace, name) (ananke_gitops_kustomization_suspended{job=\"ananke-power\"})) or on() vector(0)) / clamp_min((count(max by (namespace, name) (ananke_gitops_kustomization_ready{job=\"ananke-power\"})) or on() vector(0)), 1)), \"signal\", \"Kustomizations Not Suspended\", \"__name__\", \".*\") or label_replace(100 * (1 - (sum(max by (namespace, name) (ananke_gitops_helmrelease_suspended{job=\"ananke-power\"})) or on() vector(0)) / clamp_min((count(max by (namespace, name) (ananke_gitops_helmrelease_ready{job=\"ananke-power\"})) or on() vector(0)), 1)), \"signal\", \"HelmReleases Not Suspended\", \"__name__\", \".*\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "One-off Job Pods (age hours)",
|
|
"panel_id": 44,
|
|
"panel_type": "bargauge",
|
|
"description": "Temporary job pods by age; low or empty is good, old pods usually need cleanup.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sort_desc(((time() - kube_pod_start_time{pod!=\"\"}) / 3600) * on(namespace,pod) group_left(owner_name) (kube_pod_owner{owner_kind=\"Job\"} unless on(namespace, owner_name) label_replace(kube_job_owner{owner_kind=\"CronJob\"}, \"owner_name\", \"$1\", \"job_name\", \"(.*)\")) * on(namespace,pod) group_left(phase) max by (namespace,pod,phase) (kube_pod_status_phase{phase=~\"Running|Succeeded\"}))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Ariadne Run Volume",
|
|
"panel_id": 45,
|
|
"panel_type": "timeseries",
|
|
"description": "Ariadne automation attempts and failures; attempts show activity, failures show work to investigate.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(increase(ariadne_task_runs_total[5m])) or on() vector(0)",
|
|
"sum(increase(ariadne_task_runs_total{status=\"error\"}[5m])) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Test Category Health",
|
|
"panel_id": 46,
|
|
"panel_type": "state-timeline",
|
|
"description": "Health by major test category across all suites over the last 24 hours. Skipped tests are healthy; failures and errors lower the lane.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"avg by (category) (platform_quality:test_category_health_rate:percent_1h{suite=~\"ariadne|metis|ananke|atlasbot|pegasus|soteria|titan_iac|bstein_home|data_prepper|lesavka\",branch!=\"\",branch=~\"main|master|origin/main|origin/master\",category=~\"api|chaos|compatibility|component|contract|e2e|integration|performance|regression|reliability|security|smoke|system|ui\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Jenkins Last Success (h, newest first)",
|
|
"panel_id": 142,
|
|
"panel_type": "stat",
|
|
"description": "Top 6 most recent Jenkins successes by age (newest first). Green means last run succeeded; red means last run did not succeed. Use Atlas Jobs for the full list.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sort((label_replace((sort(bottomk(6, min by (exported_job,job_url,weather_icon) ((time() - ariadne_jenkins_build_weather_job_last_success_timestamp_seconds) / 3600)))) and on(exported_job,job_url,weather_icon) (max by (exported_job,job_url,weather_icon) (ariadne_jenkins_build_weather_job_last_status) == 1), \"run_state\", \"ok\", \"exported_job\", \".*\")) or (label_replace((sort(bottomk(6, min by (exported_job,job_url,weather_icon) ((time() - ariadne_jenkins_build_weather_job_last_success_timestamp_seconds) / 3600)))) and on(exported_job,job_url,weather_icon) (max by (exported_job,job_url,weather_icon) (ariadne_jenkins_build_weather_job_last_status) != 1), \"run_state\", \"bad\", \"exported_job\", \".*\")))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Jenkins Last Failure (h, newest first)",
|
|
"panel_id": 243,
|
|
"panel_type": "stat",
|
|
"description": "Top 6 most recent Jenkins failures by age (newest first). Green means last run succeeded; red means last run did not succeed. Use Atlas Jobs for the full list.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sort((label_replace((sort(bottomk(6, min by (exported_job,job_url,weather_icon) ((time() - ariadne_jenkins_build_weather_job_last_failure_timestamp_seconds) / 3600)))) and on(exported_job,job_url,weather_icon) (max by (exported_job,job_url,weather_icon) (ariadne_jenkins_build_weather_job_last_status) == 1), \"run_state\", \"ok\", \"exported_job\", \".*\")) or (label_replace((sort(bottomk(6, min by (exported_job,job_url,weather_icon) ((time() - ariadne_jenkins_build_weather_job_last_failure_timestamp_seconds) / 3600)))) and on(exported_job,job_url,weather_icon) (max by (exported_job,job_url,weather_icon) (ariadne_jenkins_build_weather_job_last_status) != 1), \"run_state\", \"bad\", \"exported_job\", \".*\")))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "PVC Backup Health / Age",
|
|
"panel_id": 47,
|
|
"panel_type": "bargauge",
|
|
"description": "Backup age in hours computed from last-success timestamps for restic-managed PVCs (nightly target: <=20h green, <40h yellow, <50h orange, >=50h red). PVCs that have backup history but currently no successful backup (missing/no_completed/error) are pinned to 999h for visibility.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sort_desc(max by (namespace, pvc) (((time() - pvc_backup_last_success_timestamp_seconds{driver=\"restic\"}) / 3600) or on(namespace,pvc,volume,driver) ((((pvc_backup_health_reason{driver=\"restic\",reason=~\"missing|no_completed|lookup_failed|unknown_timestamp\"} > 0) * (pvc_backup_count{driver=\"restic\"} > bool 0)) * 999))) or on() ((label_replace(label_replace(vector(999), \"namespace\", \"maintenance\", \"__name__\", \".*\"), \"pvc\", \"backup-telemetry-missing\", \"__name__\", \".*\")) unless on() ((count({__name__=~\"pvc_backup_(count|last_success_timestamp_seconds|health_reason)\",driver=\"restic\"})) > 0)))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Mail Sent (1d)",
|
|
"panel_id": 30,
|
|
"panel_type": "stat",
|
|
"description": "Outbound mail sent in the last day; useful context for mail health and bounce rates.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max(postmark_outbound_sent{window=\"1d\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Mail Bounces (1d)",
|
|
"panel_id": 31,
|
|
"panel_type": "stat",
|
|
"description": "Outbound mail bounce rate and count; zero is best, high values risk delivery reputation.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max(postmark_outbound_bounce_rate{window=\"1d\"})",
|
|
"max(postmark_outbound_bounced{window=\"1d\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Mail Success Rate (1d)",
|
|
"panel_id": 32,
|
|
"panel_type": "stat",
|
|
"description": "Outbound mail success rate; higher is better for user notifications.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"clamp_min(100 - max(postmark_outbound_bounce_rate{window=\"1d\"}), 0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Mail Limit Used (30d)",
|
|
"panel_id": 33,
|
|
"panel_type": "stat",
|
|
"description": "Postmark monthly send limit used; lower leaves more quota headroom.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max(postmark_sending_limit_used_percent)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Postgres Connections Used",
|
|
"panel_id": 34,
|
|
"panel_type": "stat",
|
|
"description": "Current Postgres connections; lower leaves room for apps during spikes.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"label_replace(sum(pg_stat_activity_count), \"conn\", \"used\", \"__name__\", \".*\") or label_replace(max(pg_settings_max_connections), \"conn\", \"max\", \"__name__\", \".*\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Postgres Hottest Connections",
|
|
"panel_id": 35,
|
|
"panel_type": "stat",
|
|
"description": "Database with the most active connections; high values identify the pressure source.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"topk(1, sum by (datname) (pg_stat_activity_count))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Namespace CPU Share",
|
|
"panel_id": 11,
|
|
"panel_type": "piechart",
|
|
"description": "Shares are normalized within the selected filter. Switching scope changes the denominator.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"100 * ( sum(rate(container_cpu_usage_seconds_total{namespace!=\"\",pod!=\"\",container!=\"\",container!=\"POD\",$namespace_scope_cpu}[1m])) by (namespace) ) / clamp_min(sum( sum(rate(container_cpu_usage_seconds_total{namespace!=\"\",pod!=\"\",container!=\"\",container!=\"POD\",$namespace_scope_cpu}[1m])) by (namespace) ), 1)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Namespace GPU Utilization",
|
|
"panel_id": 12,
|
|
"panel_type": "piechart",
|
|
"description": "Instant share of observed GPU compute activity by namespace. Host covers GPU work outside Kubernetes pods; idle appears only when observed GPU activity is zero.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(100 * ((((sum by (namespace) (nvidia_namespace_gpu_sm_util_percent{namespace!=\"\",pod!=\"\",$namespace_scope_gpu})) > 0)) or (label_replace(((sum(((avg by (node) (label_replace(label_replace(DCGM_FI_DEV_GPU_UTIL, \"pod\", \"$1\", \"Hostname\", \"(.*)\"), \"namespace\", \"monitoring\", \"\", \"\") * on(namespace,pod) group_left(node) kube_pod_info{namespace=\"monitoring\"}) or max by (node) (jetson_gr3d_freq_percent{node!=\"\"})) unless on(node) (max by (node,gpu,uuid,model) (last_over_time(nvidia_gpu_device_utilization_percent[5m]))))) or on() vector(0)) > 0), \"namespace\", \"unattributed\", \"\", \"\"))) / clamp_min((sum((((sum by (namespace) (nvidia_namespace_gpu_sm_util_percent{namespace!=\"\",pod!=\"\",$namespace_scope_gpu})) > 0)) or (label_replace(((sum(((avg by (node) (label_replace(label_replace(DCGM_FI_DEV_GPU_UTIL, \"pod\", \"$1\", \"Hostname\", \"(.*)\"), \"namespace\", \"monitoring\", \"\", \"\") * on(namespace,pod) group_left(node) kube_pod_info{namespace=\"monitoring\"}) or max by (node) (jetson_gr3d_freq_percent{node!=\"\"})) unless on(node) (max by (node,gpu,uuid,model) (last_over_time(nvidia_gpu_device_utilization_percent[5m]))))) or on() vector(0)) > 0), \"namespace\", \"unattributed\", \"\", \"\"))) or on() vector(0)), 1)) or (label_replace(vector(100), \"namespace\", \"idle\", \"\", \"\") and on() ((sum((((sum by (namespace) (nvidia_namespace_gpu_sm_util_percent{namespace!=\"\",pod!=\"\",$namespace_scope_gpu})) > 0)) or (label_replace(((sum(((avg by (node) (label_replace(label_replace(DCGM_FI_DEV_GPU_UTIL, \"pod\", \"$1\", \"Hostname\", \"(.*)\"), \"namespace\", \"monitoring\", \"\", \"\") * on(namespace,pod) group_left(node) kube_pod_info{namespace=\"monitoring\"}) or max by (node) (jetson_gr3d_freq_percent{node!=\"\"})) unless on(node) (max by (node,gpu,uuid,model) (last_over_time(nvidia_gpu_device_utilization_percent[5m]))))) or on() vector(0)) > 0), \"namespace\", \"unattributed\", \"\", \"\"))) or on() vector(0)) == 0))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Namespace RAM Share",
|
|
"panel_id": 13,
|
|
"panel_type": "piechart",
|
|
"description": "Shares are normalized within the selected filter. Switching scope changes the denominator.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"100 * ( sum(container_memory_working_set_bytes{namespace!=\"\",pod!=\"\",container!=\"\",container!=\"POD\",$namespace_scope_ram}) by (namespace) ) / clamp_min(sum( sum(container_memory_working_set_bytes{namespace!=\"\",pod!=\"\",container!=\"\",container!=\"POD\",$namespace_scope_ram}) by (namespace) ), 1)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Worker Node CPU",
|
|
"panel_id": 14,
|
|
"panel_type": "timeseries",
|
|
"description": "Worker CPU over time; lower is calmer, sustained high load may need rescheduling.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(avg by (node) (((1 - avg by (instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[5m]))) * 100) * on(instance) group_left(node) label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh|titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\"))) * on(node) group_left() label_replace(node_uname_info{nodename=~\"titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Worker Node RAM",
|
|
"panel_id": 15,
|
|
"panel_type": "timeseries",
|
|
"description": "Worker memory over time; lower is safer, sustained high use risks evictions.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(avg by (node) ((avg by (instance) ((node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100)) * on(instance) group_left(node) label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh|titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\"))) * on(node) group_left() label_replace(node_uname_info{nodename=~\"titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Control plane CPU",
|
|
"panel_id": 16,
|
|
"panel_type": "timeseries",
|
|
"description": "Control-plane CPU over time; low steady usage means Kubernetes has control headroom.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(avg by (node) (((1 - avg by (instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[5m]))) * 100) * on(instance) group_left(node) label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh|titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\"))) * on(node) group_left() label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh\"}, \"node\", \"$1\", \"nodename\", \"(.*)\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Control plane RAM",
|
|
"panel_id": 17,
|
|
"panel_type": "timeseries",
|
|
"description": "Control-plane memory over time; low steady usage means Kubernetes has control headroom.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(avg by (node) ((avg by (instance) ((node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100)) * on(instance) group_left(node) label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh|titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\"))) * on(node) group_left() label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh\"}, \"node\", \"$1\", \"nodename\", \"(.*)\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Node Pod Share",
|
|
"panel_id": 28,
|
|
"panel_type": "piechart",
|
|
"description": "Share of pods per node; uneven share can reveal overloaded workers.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(sum(kube_pod_info{pod!=\"\" , node!=\"\"}) by (node) / clamp_min(sum(kube_pod_info{pod!=\"\" , node!=\"\"}), 1)) * 100"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Top Nodes by Pod Count",
|
|
"panel_id": 29,
|
|
"panel_type": "bargauge",
|
|
"description": "Nodes with the most pods; lower and balanced is easier to operate.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sort_desc(topk(12, sum(kube_pod_info{pod!=\"\" , node!=\"\"}) by (node)))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Cluster Ingress Throughput",
|
|
"panel_id": 18,
|
|
"panel_type": "timeseries",
|
|
"description": "Traffic entering the cluster; spikes should line up with expected usage.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(rate(node_network_receive_bytes_total{device!~\"lo|cni.*|veth.*|flannel.*|docker.*|virbr.*|vxlan.*|wg.*\"}[5m])) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Cluster Egress Throughput",
|
|
"panel_id": 19,
|
|
"panel_type": "timeseries",
|
|
"description": "Traffic leaving the cluster; spikes should line up with expected usage.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(rate(node_network_transmit_bytes_total{device!~\"lo|cni.*|veth.*|flannel.*|docker.*|virbr.*|vxlan.*|wg.*\"}[5m])) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Intra-Cluster Throughput",
|
|
"panel_id": 20,
|
|
"panel_type": "timeseries",
|
|
"description": "Traffic inside the cluster; high values can expose chatty services.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(rate(container_network_receive_bytes_total{namespace!=\"traefik\",pod!=\"\"}[5m]) + rate(container_network_transmit_bytes_total{namespace!=\"traefik\",pod!=\"\"}[5m])) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Root Filesystem Usage",
|
|
"panel_id": 21,
|
|
"panel_type": "timeseries",
|
|
"description": "Node root disk usage; lower is safer, high values can break kubelet.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"avg by (node) ((avg by (instance) ((1 - (node_filesystem_avail_bytes{mountpoint=\"/\",fstype!~\"tmpfs|overlay\"} / node_filesystem_size_bytes{mountpoint=\"/\",fstype!~\"tmpfs|overlay\"})) * 100)) * on(instance) group_left(node) label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh|titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\"))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Overview",
|
|
"panel_title": "Nodes Closest to Full Astraios Disks",
|
|
"panel_id": 22,
|
|
"panel_type": "timeseries",
|
|
"description": "Astraios disk fullness by node; lower is safer for storage reliability.",
|
|
"tags": [
|
|
"atlas",
|
|
"overview"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"avg by (node) ((avg by (instance) ((1 - (node_filesystem_avail_bytes{mountpoint=\"/mnt/astraios\",fstype!~\"tmpfs|overlay\"} / node_filesystem_size_bytes{mountpoint=\"/mnt/astraios\",fstype!~\"tmpfs|overlay\"})) * 100)) * on(instance) group_left(node) label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh|titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\"))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Pods",
|
|
"panel_title": "Problem Pods",
|
|
"panel_id": 1,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"pods"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(max by (namespace,pod) (kube_pod_status_phase{phase!~\"Running|Succeeded\"})) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Pods",
|
|
"panel_title": "CrashLoop / ImagePull",
|
|
"panel_id": 2,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"pods"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(max by (namespace,pod) (kube_pod_container_status_waiting_reason{reason=~\"CrashLoopBackOff|ImagePullBackOff\"})) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Pods",
|
|
"panel_title": "Stuck Terminating (>10m)",
|
|
"panel_id": 3,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"pods"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(max by (namespace,pod) (((time() - kube_pod_deletion_timestamp{pod!=\"\"}) > bool 600) and on(namespace,pod) (kube_pod_deletion_timestamp{pod!=\"\"} > bool 0))) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Pods",
|
|
"panel_title": "Control Plane Workloads",
|
|
"panel_id": 4,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"pods"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(kube_pod_info{node=~\"titan-0a|titan-0b|titan-0c\",namespace!~\"^(kube-.*|.*-system|traefik|monitoring|logging|cert-manager|maintenance|postgres)$\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Pods",
|
|
"panel_title": "Pods Not Running",
|
|
"panel_id": 5,
|
|
"panel_type": "table",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"pods"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(time() - kube_pod_created{pod!=\"\"}) * on(namespace,pod) group_left(node) kube_pod_info * on(namespace,pod) group_left(phase) max by (namespace,pod,phase) (kube_pod_status_phase{phase!~\"Running|Succeeded\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Pods",
|
|
"panel_title": "CrashLoop / ImagePull",
|
|
"panel_id": 6,
|
|
"panel_type": "table",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"pods"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(time() - kube_pod_created{pod!=\"\"}) * on(namespace,pod) group_left(node) kube_pod_info * on(namespace,pod,container) group_left(reason) max by (namespace,pod,container,reason) (kube_pod_container_status_waiting_reason{reason=~\"CrashLoopBackOff|ImagePullBackOff\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Pods",
|
|
"panel_title": "Terminating >10m",
|
|
"panel_id": 7,
|
|
"panel_type": "table",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"pods"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(((time() - kube_pod_deletion_timestamp{pod!=\"\"}) and on(namespace,pod) (kube_pod_deletion_timestamp{pod!=\"\"} > bool 0)) * on(namespace,pod) group_left(node) kube_pod_info)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Pods",
|
|
"panel_title": "Node Pod Share",
|
|
"panel_id": 8,
|
|
"panel_type": "piechart",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"pods"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(sum(kube_pod_info{pod!=\"\" , node!=\"\"}) by (node) / clamp_min(sum(kube_pod_info{pod!=\"\" , node!=\"\"}), 1)) * 100"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Pods",
|
|
"panel_title": "Top Nodes by Pod Count",
|
|
"panel_id": 9,
|
|
"panel_type": "bargauge",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"pods"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sort_desc(topk(12, sum(kube_pod_info{pod!=\"\" , node!=\"\"}) by (node)))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Pods",
|
|
"panel_title": "Namespace Plurality by Node v27",
|
|
"panel_id": 10,
|
|
"panel_type": "table",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"pods"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(sum by (namespace,node) (kube_pod_info{pod!=\"\" , node!=\"\"}) / on(namespace) group_left() clamp_min(sum by (namespace) (kube_pod_info{pod!=\"\"}), 1) * 100) * on(namespace,node) group_left() ((sum by (namespace,node) (kube_pod_info{pod!=\"\" , node!=\"\"}) / on(namespace) group_left() clamp_min(sum by (namespace) (kube_pod_info{pod!=\"\"}), 1) * 100) + on(node) group_left() ((sum by (node) (kube_node_info{node=\"titan-0a\"}) * 0 + 0.001) or (sum by (node) (kube_node_info{node=\"titan-0b\"}) * 0 + 0.002) or (sum by (node) (kube_node_info{node=\"titan-0c\"}) * 0 + 0.003) or (sum by (node) (kube_node_info{node=\"titan-db\"}) * 0 + 0.004) or (sum by (node) (kube_node_info{node=\"titan-jh\"}) * 0 + 0.005) or (sum by (node) (kube_node_info{node=\"titan-04\"}) * 0 + 0.006) or (sum by (node) (kube_node_info{node=\"titan-05\"}) * 0 + 0.007) or (sum by (node) (kube_node_info{node=\"titan-06\"}) * 0 + 0.008) or (sum by (node) (kube_node_info{node=\"titan-07\"}) * 0 + 0.009000000000000001) or (sum by (node) (kube_node_info{node=\"titan-08\"}) * 0 + 0.01) or (sum by (node) (kube_node_info{node=\"titan-09\"}) * 0 + 0.011) or (sum by (node) (kube_node_info{node=\"titan-10\"}) * 0 + 0.012) or (sum by (node) (kube_node_info{node=\"titan-11\"}) * 0 + 0.013000000000000001) or (sum by (node) (kube_node_info{node=\"titan-20\"}) * 0 + 0.014) or (sum by (node) (kube_node_info{node=\"titan-21\"}) * 0 + 0.015) or (sum by (node) (kube_node_info{node=\"titan-12\"}) * 0 + 0.016) or (sum by (node) (kube_node_info{node=\"titan-13\"}) * 0 + 0.017) or (sum by (node) (kube_node_info{node=\"titan-14\"}) * 0 + 0.018000000000000002) or (sum by (node) (kube_node_info{node=\"titan-15\"}) * 0 + 0.019) or (sum by (node) (kube_node_info{node=\"titan-16\"}) * 0 + 0.02) or (sum by (node) (kube_node_info{node=\"titan-17\"}) * 0 + 0.021) or (sum by (node) (kube_node_info{node=\"titan-18\"}) * 0 + 0.022) or (sum by (node) (kube_node_info{node=\"titan-19\"}) * 0 + 0.023) or (sum by (node) (kube_node_info{node=\"titan-22\"}) * 0 + 0.024) or (sum by (node) (kube_node_info{node=\"titan-23\"}) * 0 + 0.025) or (sum by (node) (kube_node_info{node=\"titan-24\"}) * 0 + 0.026000000000000002)) == bool on(namespace) group_left() (max by (namespace) ((sum by (namespace,node) (kube_pod_info{pod!=\"\" , node!=\"\"}) / on(namespace) group_left() clamp_min(sum by (namespace) (kube_pod_info{pod!=\"\"}), 1) * 100) + on(node) group_left() ((sum by (node) (kube_node_info{node=\"titan-0a\"}) * 0 + 0.001) or (sum by (node) (kube_node_info{node=\"titan-0b\"}) * 0 + 0.002) or (sum by (node) (kube_node_info{node=\"titan-0c\"}) * 0 + 0.003) or (sum by (node) (kube_node_info{node=\"titan-db\"}) * 0 + 0.004) or (sum by (node) (kube_node_info{node=\"titan-jh\"}) * 0 + 0.005) or (sum by (node) (kube_node_info{node=\"titan-04\"}) * 0 + 0.006) or (sum by (node) (kube_node_info{node=\"titan-05\"}) * 0 + 0.007) or (sum by (node) (kube_node_info{node=\"titan-06\"}) * 0 + 0.008) or (sum by (node) (kube_node_info{node=\"titan-07\"}) * 0 + 0.009000000000000001) or (sum by (node) (kube_node_info{node=\"titan-08\"}) * 0 + 0.01) or (sum by (node) (kube_node_info{node=\"titan-09\"}) * 0 + 0.011) or (sum by (node) (kube_node_info{node=\"titan-10\"}) * 0 + 0.012) or (sum by (node) (kube_node_info{node=\"titan-11\"}) * 0 + 0.013000000000000001) or (sum by (node) (kube_node_info{node=\"titan-20\"}) * 0 + 0.014) or (sum by (node) (kube_node_info{node=\"titan-21\"}) * 0 + 0.015) or (sum by (node) (kube_node_info{node=\"titan-12\"}) * 0 + 0.016) or (sum by (node) (kube_node_info{node=\"titan-13\"}) * 0 + 0.017) or (sum by (node) (kube_node_info{node=\"titan-14\"}) * 0 + 0.018000000000000002) or (sum by (node) (kube_node_info{node=\"titan-15\"}) * 0 + 0.019) or (sum by (node) (kube_node_info{node=\"titan-16\"}) * 0 + 0.02) or (sum by (node) (kube_node_info{node=\"titan-17\"}) * 0 + 0.021) or (sum by (node) (kube_node_info{node=\"titan-18\"}) * 0 + 0.022) or (sum by (node) (kube_node_info{node=\"titan-19\"}) * 0 + 0.023) or (sum by (node) (kube_node_info{node=\"titan-22\"}) * 0 + 0.024) or (sum by (node) (kube_node_info{node=\"titan-23\"}) * 0 + 0.025) or (sum by (node) (kube_node_info{node=\"titan-24\"}) * 0 + 0.026000000000000002)))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Power",
|
|
"panel_title": "UPS Current Load",
|
|
"panel_id": 1,
|
|
"panel_type": "stat",
|
|
"description": "Per-UPS live snapshot: current draw in watts, estimated battery runtime if discharge started now, and charging/discharging status.",
|
|
"tags": [
|
|
"atlas",
|
|
"power",
|
|
"climate"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max((ananke_ups_load_percent{job=\"ananke-power\",source=\"Pyrphoros\"} * ananke_ups_power_nominal_watts{job=\"ananke-power\",source=\"Pyrphoros\"}) / 100) or on() vector(0)",
|
|
"max(ananke_ups_runtime_seconds{job=\"ananke-power\",source=\"Pyrphoros\"}) or on() vector(0)",
|
|
"max(ananke_ups_on_battery{job=\"ananke-power\",source=\"Pyrphoros\"}) or on() vector(0)",
|
|
"max((ananke_ups_load_percent{job=\"ananke-power\",source=\"Statera\"} * ananke_ups_power_nominal_watts{job=\"ananke-power\",source=\"Statera\"}) / 100) or on() vector(0)",
|
|
"max(ananke_ups_runtime_seconds{job=\"ananke-power\",source=\"Statera\"}) or on() vector(0)",
|
|
"max(ananke_ups_on_battery{job=\"ananke-power\",source=\"Statera\"}) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Power",
|
|
"panel_title": "UPS History (Power Draw)",
|
|
"panel_id": 2,
|
|
"panel_type": "timeseries",
|
|
"description": "Historical UPS power consumption in watts for titan-db and tethys.",
|
|
"tags": [
|
|
"atlas",
|
|
"power",
|
|
"climate"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max((ananke_ups_load_percent{job=\"ananke-power\",source=\"Pyrphoros\"} * ananke_ups_power_nominal_watts{job=\"ananke-power\",source=\"Pyrphoros\"}) / 100)",
|
|
"max((ananke_ups_load_percent{job=\"ananke-power\",source=\"Statera\"} * ananke_ups_power_nominal_watts{job=\"ananke-power\",source=\"Statera\"}) / 100)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Power",
|
|
"panel_title": "Current Climate",
|
|
"panel_id": 3,
|
|
"panel_type": "stat",
|
|
"description": "Current tent temperature, humidity, VPD, and dew point. These render once Typhon climate telemetry is online.",
|
|
"tags": [
|
|
"atlas",
|
|
"power",
|
|
"climate"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max(max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_temperature_celsius != 0)) or on() vector(0)",
|
|
"max(max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_vpd_kpa != 0)) or on() vector(0)",
|
|
"max(max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_relative_humidity_percent != 0)) or on() vector(0)",
|
|
"max((243.12 * (ln(clamp_min((max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_relative_humidity_percent != 0)), 1) / 100) + (17.62 * (max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_temperature_celsius != 0))) / (243.12 + (max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_temperature_celsius != 0))))) / (17.62 - (ln(clamp_min((max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_relative_humidity_percent != 0)), 1) / 100) + (17.62 * (max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_temperature_celsius != 0))) / (243.12 + (max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_temperature_celsius != 0)))))) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Power",
|
|
"panel_title": "Climate History",
|
|
"panel_id": 4,
|
|
"panel_type": "timeseries",
|
|
"description": "Two-axis chart: tent temperature/humidity/dew point (left axis) and tent VPD in kPa (right axis).",
|
|
"tags": [
|
|
"atlas",
|
|
"power",
|
|
"climate"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_temperature_celsius != 0)",
|
|
"max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_relative_humidity_percent != 0)",
|
|
"max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_vpd_kpa != 0)",
|
|
"(243.12 * (ln(clamp_min((max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_relative_humidity_percent != 0)), 1) / 100) + (17.62 * (max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_temperature_celsius != 0))) / (243.12 + (max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_temperature_celsius != 0))))) / (17.62 - (ln(clamp_min((max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_relative_humidity_percent != 0)), 1) / 100) + (17.62 * (max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_temperature_celsius != 0))) / (243.12 + (max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_temperature_celsius != 0)))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Power",
|
|
"panel_title": "Fan Activity",
|
|
"panel_id": 5,
|
|
"panel_type": "stat",
|
|
"description": "Current fan activity levels (0-10): inside outlet, inside inlet, outside inlet, and interior fans.",
|
|
"tags": [
|
|
"atlas",
|
|
"power",
|
|
"climate"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"round(max(typhon_fan_speed_level{fan_group=\"outlet\"}) or on() vector(0))",
|
|
"round(max(typhon_fan_speed_level{fan_group=\"inside_inlet\"}) or on() vector(0))",
|
|
"round(max(typhon_fan_speed_level{fan_group=\"outside_inlet\"}) or on() vector(0))",
|
|
"round(max(typhon_fan_speed_level{fan_group=\"interior\"}) or on() vector(0))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Power",
|
|
"panel_title": "Fan Intensity History",
|
|
"panel_id": 6,
|
|
"panel_type": "timeseries",
|
|
"description": "Historical fan activity for all four fan groups (0-10 scale).",
|
|
"tags": [
|
|
"atlas",
|
|
"power",
|
|
"climate"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_fan_speed_level{fan_group=\"outlet\"})",
|
|
"max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_fan_speed_level{fan_group=\"inside_inlet\"})",
|
|
"max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_fan_speed_level{fan_group=\"outside_inlet\"})",
|
|
"max without (job,instance,pod,service,endpoint,namespace,node,controller_name,controller_id,port_name,fan_group) (typhon_fan_speed_level{fan_group=\"interior\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Storage",
|
|
"panel_title": "Astreae Usage",
|
|
"panel_id": 1,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"storage"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"100 - (sum(node_filesystem_avail_bytes{mountpoint=\"/mnt/astreae\",fstype!~\"tmpfs|overlay\"}) / sum(node_filesystem_size_bytes{mountpoint=\"/mnt/astreae\",fstype!~\"tmpfs|overlay\"}) * 100)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Storage",
|
|
"panel_title": "Asteria Usage",
|
|
"panel_id": 2,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"storage"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"100 - (sum(node_filesystem_avail_bytes{mountpoint=\"/mnt/asteria\",fstype!~\"tmpfs|overlay\"}) / sum(node_filesystem_size_bytes{mountpoint=\"/mnt/asteria\",fstype!~\"tmpfs|overlay\"}) * 100)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Storage",
|
|
"panel_title": "Astreae Free",
|
|
"panel_id": 3,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"storage"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(node_filesystem_avail_bytes{mountpoint=\"/mnt/astreae\",fstype!~\"tmpfs|overlay\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Storage",
|
|
"panel_title": "Asteria Free",
|
|
"panel_id": 4,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"storage"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(node_filesystem_avail_bytes{mountpoint=\"/mnt/asteria\",fstype!~\"tmpfs|overlay\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Storage",
|
|
"panel_title": "Astreae Per-Node Usage",
|
|
"panel_id": 5,
|
|
"panel_type": "timeseries",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"storage"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(avg by (node) ((avg by (instance) ((1 - (node_filesystem_avail_bytes{mountpoint=\"/mnt/astreae\",fstype!~\"tmpfs|overlay\"} / node_filesystem_size_bytes{mountpoint=\"/mnt/astreae\",fstype!~\"tmpfs|overlay\"})) * 100)) * on(instance) group_left(node) label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh|titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\"))) * on(node) group_left() label_replace(node_uname_info{nodename=~\"titan-1[2-9]|titan-2[2-4]\"}, \"node\", \"$1\", \"nodename\", \"(.*)\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Storage",
|
|
"panel_title": "Asteria Per-Node Usage",
|
|
"panel_id": 6,
|
|
"panel_type": "timeseries",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"storage"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(avg by (node) ((avg by (instance) ((1 - (node_filesystem_avail_bytes{mountpoint=\"/mnt/asteria\",fstype!~\"tmpfs|overlay\"} / node_filesystem_size_bytes{mountpoint=\"/mnt/asteria\",fstype!~\"tmpfs|overlay\"})) * 100)) * on(instance) group_left(node) label_replace(node_uname_info{nodename=~\"titan-0a|titan-0b|titan-0c|titan-db|titan-jh|titan-04|titan-05|titan-06|titan-07|titan-08|titan-09|titan-10|titan-11|titan-20|titan-21|titan-12|titan-13|titan-14|titan-15|titan-16|titan-17|titan-18|titan-19|titan-22|titan-23|titan-24\"}, \"node\", \"$1\", \"nodename\", \"(.*)\"))) * on(node) group_left() label_replace(node_uname_info{nodename=~\"titan-1[2-9]|titan-2[2-4]\"}, \"node\", \"$1\", \"nodename\", \"(.*)\")"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Storage",
|
|
"panel_title": "Astreae Usage History",
|
|
"panel_id": 7,
|
|
"panel_type": "timeseries",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"storage"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"100 - (sum(node_filesystem_avail_bytes{mountpoint=\"/mnt/astreae\",fstype!~\"tmpfs|overlay\"}) / sum(node_filesystem_size_bytes{mountpoint=\"/mnt/astreae\",fstype!~\"tmpfs|overlay\"}) * 100)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Storage",
|
|
"panel_title": "Asteria Usage History",
|
|
"panel_id": 8,
|
|
"panel_type": "timeseries",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"storage"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"100 - (sum(node_filesystem_avail_bytes{mountpoint=\"/mnt/asteria\",fstype!~\"tmpfs|overlay\"}) / sum(node_filesystem_size_bytes{mountpoint=\"/mnt/asteria\",fstype!~\"tmpfs|overlay\"}) * 100)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Storage",
|
|
"panel_title": "Maintenance Sweepers Ready",
|
|
"panel_id": 30,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"storage"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"kube_daemonset_status_number_ready{namespace=\"maintenance\",daemonset=\"node-image-sweeper\"} / on(namespace,daemonset) kube_daemonset_status_desired_number_scheduled{namespace=\"maintenance\",daemonset=\"node-image-sweeper\"} * 100"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Storage",
|
|
"panel_title": "Maintenance Cron Freshness (s)",
|
|
"panel_id": 31,
|
|
"panel_type": "stat",
|
|
"description": "",
|
|
"tags": [
|
|
"atlas",
|
|
"storage"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"time() - max by (cronjob) (kube_cronjob_status_last_successful_time{namespace=\"maintenance\",cronjob=\"image-sweeper\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Current Gate Health (%)",
|
|
"panel_id": 156,
|
|
"panel_type": "stat",
|
|
"description": "Average latest required gate checks passing across selected suites; this is the current quality state.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(avg((min by (suite) (((100 * (sum by (suite) (((clamp_max(max by (suite, check) ((((sum by (suite, branch, check, status) (platform_quality:check_status:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"tests|coverage|loc|style|docs_naming|gate_glue|sonarqube\",status=~\"ok|passed|success|not_applicable|skipped|na|n/a\"})) or (sum by (suite, branch, check, status) (platform_quality:check_status:present_1h{suite=~\"${suite:regex}\",suite=~\"ariadne|atlasbot|bstein_home|data_prepper\",branch!=\"\",branch=~\"${branch:regex}\",check=\"supply_chain\",status=~\"ok|passed|success|not_applicable|skipped|na|n/a\"})))) > 0), 1)) unless on(suite, check) (clamp_max(max by (suite, check) ((((sum by (suite, branch, check, status) (platform_quality:check_status:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"tests|coverage|loc|style|docs_naming|gate_glue|sonarqube\",status!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})) or (sum by (suite, branch, check, status) (platform_quality:check_status:present_1h{suite=~\"${suite:regex}\",suite=~\"ariadne|atlasbot|bstein_home|data_prepper\",branch!=\"\",branch=~\"${branch:regex}\",check=\"supply_chain\",status!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})))) > 0), 1))))) / clamp_min((sum by (suite) (clamp_max(max by (suite, check) ((((sum by (suite, branch, check, status) (platform_quality:check_status:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"tests|coverage|loc|style|docs_naming|gate_glue|sonarqube\",status!=\"\"})) or (sum by (suite, branch, check, status) (platform_quality:check_status:present_1h{suite=~\"${suite:regex}\",suite=~\"ariadne|atlasbot|bstein_home|data_prepper\",branch!=\"\",branch=~\"${branch:regex}\",check=\"supply_chain\",status!=\"\"})))) > 0), 1))), 1))) or (min by (suite) (platform_quality:test_category_health_rate:percent_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",category=~\"api|chaos|compatibility|component|contract|e2e|integration|manual|performance|regression|reliability|security|smoke|system|ui|unit\"}))))) or on() vector(0))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "CI Run Success Rate (24h)",
|
|
"panel_id": 2,
|
|
"panel_type": "stat",
|
|
"description": "Percent of selected quality-gate CI runs that completed successfully in 24h; this is run health, not individual test pass rate.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"100 * ((sum(platform_quality:suite_runs:increase_24h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",status=~\"ok|passed|success\"}) or on() vector(0))) / clamp_min(((sum(platform_quality:suite_runs:increase_24h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\"}) or on() vector(0))), 1)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "CI Run Success Rate (7d)",
|
|
"panel_id": 3,
|
|
"panel_type": "stat",
|
|
"description": "Percent of selected quality-gate CI runs that completed successfully in 7d; higher means more stable automation.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"100 * ((sum(increase((max without(instance, job) (platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}))[7d:1h])) or on() vector(0))) / clamp_min(((sum(increase((max without(instance, job) (platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}))[7d:1h])) or on() vector(0))), 1)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Failed Runs (24h)",
|
|
"panel_id": 4,
|
|
"panel_type": "stat",
|
|
"description": "Selected quality-gate runs that failed in 24h; zero is good and anything else needs a look.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(sum(platform_quality:suite_runs:increase_24h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",status!~\"ok|passed|success\"}) or on() vector(0))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "CI Runs (24h)",
|
|
"panel_id": 5,
|
|
"panel_type": "stat",
|
|
"description": "Selected quality-gate CI run count in 24h; zero means the dashboard may be stale.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(sum(platform_quality:suite_runs:increase_24h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\"}) or on() vector(0))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Suite Freshness (24h)",
|
|
"panel_id": 157,
|
|
"panel_type": "stat",
|
|
"description": "Percent of selected suites with at least one quality-gate CI run in 24h; 100% means inputs are fresh.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"100 * (sum((sum by (suite) (platform_quality:suite_runs:increase_24h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\"})) > bool 0) or on() vector(0)) / clamp_min(count(((count by (suite) (platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}) >= bool 0))), 1)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Avg Coverage (%)",
|
|
"panel_id": 6,
|
|
"panel_type": "stat",
|
|
"description": "Average latest line coverage for selected suites; higher means better test protection.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(avg((max by (suite) (platform_quality:suite_coverage_percent:latest_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\"}))) or on() vector(0))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Suites with LOC >500",
|
|
"panel_id": 7,
|
|
"panel_type": "stat",
|
|
"description": "Selected suites with oversized source files; zero is good for maintainability.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(sum(((max by (suite) (platform_quality:suite_source_lines_over_500_total:latest_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\"})) > bool 0)) or on() vector(0))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Latest Gate Health by Suite",
|
|
"panel_id": 8,
|
|
"panel_type": "bargauge",
|
|
"description": "Current health by suite from required gate checks, capped by category-level test health. Skipped and not-applicable results are healthy; failures and errors lower the value.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sort(((min by (suite) (((100 * (sum by (suite) (((clamp_max(max by (suite, check) ((((sum by (suite, branch, check, status) (platform_quality:check_status:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"tests|coverage|loc|style|docs_naming|gate_glue|sonarqube\",status=~\"ok|passed|success|not_applicable|skipped|na|n/a\"})) or (sum by (suite, branch, check, status) (platform_quality:check_status:present_1h{suite=~\"${suite:regex}\",suite=~\"ariadne|atlasbot|bstein_home|data_prepper\",branch!=\"\",branch=~\"${branch:regex}\",check=\"supply_chain\",status=~\"ok|passed|success|not_applicable|skipped|na|n/a\"})))) > 0), 1)) unless on(suite, check) (clamp_max(max by (suite, check) ((((sum by (suite, branch, check, status) (platform_quality:check_status:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"tests|coverage|loc|style|docs_naming|gate_glue|sonarqube\",status!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})) or (sum by (suite, branch, check, status) (platform_quality:check_status:present_1h{suite=~\"${suite:regex}\",suite=~\"ariadne|atlasbot|bstein_home|data_prepper\",branch!=\"\",branch=~\"${branch:regex}\",check=\"supply_chain\",status!~\"ok|passed|success|not_applicable|skipped|na|n/a\"})))) > 0), 1))))) / clamp_min((sum by (suite) (clamp_max(max by (suite, check) ((((sum by (suite, branch, check, status) (platform_quality:check_status:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"tests|coverage|loc|style|docs_naming|gate_glue|sonarqube\",status!=\"\"})) or (sum by (suite, branch, check, status) (platform_quality:check_status:present_1h{suite=~\"${suite:regex}\",suite=~\"ariadne|atlasbot|bstein_home|data_prepper\",branch!=\"\",branch=~\"${branch:regex}\",check=\"supply_chain\",status!=\"\"})))) > 0), 1))), 1))) or (min by (suite) (platform_quality:test_category_health_rate:percent_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",category=~\"api|chaos|compatibility|component|contract|e2e|integration|manual|performance|regression|reliability|security|smoke|system|ui|unit\"})))) or on(suite) ((((0 * ((count by (suite) (platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}) >= bool 0)))) - 1))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "CI Run Success by Suite (24h)",
|
|
"panel_id": 9,
|
|
"panel_type": "bargauge",
|
|
"description": "24h CI run success rate. This is whether automation finished cleanly, so it can stay low after failed or aborted runs even when tests and latest gate checks are green.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sort(((100 * (sum by (suite) (platform_quality:suite_runs:increase_24h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",status=~\"ok|passed|success\"})) / clamp_min((sum by (suite) (platform_quality:suite_runs:increase_24h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\"})), 1)) and on(suite) ((sum by (suite) (platform_quality:suite_runs:increase_24h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\"})) > 0)) or on(suite) ((((0 * ((count by (suite) (platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}) >= bool 0)))) - 1)))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Coverage by Suite (Latest, gate 95)",
|
|
"panel_id": 17,
|
|
"panel_type": "bargauge",
|
|
"description": "Latest suite coverage; 95%+ is acceptable and 100% is strongest.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sort((max by (suite) (platform_quality:suite_coverage_percent:latest_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\"})) or on(suite) ((((0 * ((count by (suite) (platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}) >= bool 0)))) - 1)))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Files <=500 LOC by Suite (Latest)",
|
|
"panel_id": 18,
|
|
"panel_type": "bargauge",
|
|
"description": "Percent of managed LOC-gated files at or under 500 lines. Older suite payloads fall back to 100%/0% until they emit platform_quality_gate_source_files_total.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sort(((100 * clamp_min((max by (suite) (platform_quality:suite_source_files_total:latest_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\"})) - (max by (suite) (platform_quality:suite_source_lines_over_500_total:latest_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\"})), 0) / (max by (suite) (platform_quality:suite_source_files_total:latest_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\"}))) and on(suite) ((max by (suite) (platform_quality:suite_source_files_total:latest_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\"})) > 0)) or on(suite) (100 * (1 - clamp_max((max by (suite) (platform_quality:suite_source_lines_over_500_total:latest_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\"})), 1))) or on(suite) ((((0 * ((count by (suite) (platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}) >= bool 0)))) - 1)))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "CI Run Success by Suite (7d rolling)",
|
|
"panel_id": 11,
|
|
"panel_type": "state-timeline",
|
|
"description": "Seven-day rolling CI run success rate per suite. Each suite gets its own lane, so failed or aborted runs lower the lane color without implying raw test failures.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(100 * sum by (suite) (increase((max without(instance, job) (platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\",status=~\"ok|passed|success\"}))[7d:1h])) / (sum by (suite) (increase((max without(instance, job) (platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}))[7d:1h])))) and on(suite) ((sum by (suite) (increase((max without(instance, job) (platform_quality_gate_runs_total{suite=~\"${suite:regex}\",exported_job=\"platform-quality-ci\"}))[7d:1h]))) > 0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Test Category Health History",
|
|
"panel_id": 153,
|
|
"panel_type": "state-timeline",
|
|
"description": "Health by test category from memoized hourly rollups. Use the Suite filter to focus one project; skipped tests are healthy, while failures and errors lower the lane.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"avg by (category) (platform_quality:test_category_health_rate:percent_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",category=~\"api|chaos|compatibility|component|contract|e2e|integration|manual|performance|regression|reliability|security|smoke|system|ui|unit\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Daily Run Volume (Selected Scope)",
|
|
"panel_id": 12,
|
|
"panel_type": "timeseries",
|
|
"description": "Twenty-four-hour rolling quality-gate run counts for the selected suite/branch scope. This is volume, not a pass-rate percentage.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sum(platform_quality:suite_runs:increase_24h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",status=~\"ok|passed|success\"}) or on() vector(0)",
|
|
"sum(platform_quality:suite_runs:increase_24h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",status!~\"ok|passed|success\"}) or on() vector(0)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Coverage History by Suite",
|
|
"panel_id": 13,
|
|
"panel_type": "state-timeline",
|
|
"description": "Latest reported line coverage per suite over time. Coverage is separate from LOC compliance so one signal cannot hide the other.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"max by (suite) (platform_quality:suite_coverage_percent:latest_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Files <=500 LOC History by Suite",
|
|
"panel_id": 14,
|
|
"panel_type": "state-timeline",
|
|
"description": "Percent of LOC-gated source files at or under the 500-line limit. This uses the existing file-count telemetry; longest-file history needs a new publisher metric.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(100 * clamp_min((max by (suite) (platform_quality:suite_source_files_total:latest_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\"})) - (max by (suite) (platform_quality:suite_source_lines_over_500_total:latest_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\"})), 0) / (max by (suite) (platform_quality:suite_source_files_total:latest_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\"}))) and on(suite) ((max by (suite) (platform_quality:suite_source_files_total:latest_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\"})) > 0) or on(suite) (100 * (1 - clamp_max((max by (suite) (platform_quality:suite_source_lines_over_500_total:latest_1h{suite=~\"${suite:regex}\",branch=~\"${branch:regex}\"})), 1)))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Tests Failure Rate",
|
|
"panel_id": 130,
|
|
"panel_type": "state-timeline",
|
|
"description": "Latest bad-state percentage for this check family, evaluated over time. Higher means more selected suites/checks are failing in the freshness window; this is not an event-count spike chart.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(((100 * (sum by (suite) (platform_quality:check_failed_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"tests|unit|build\"})) / clamp_min((sum by (suite) (platform_quality:check_seen_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"tests|unit|build\"})), 1))) or on(suite) ((0 * ((count by (suite) (platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}) >= bool 0)))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Coverage Failure Rate",
|
|
"panel_id": 131,
|
|
"panel_type": "state-timeline",
|
|
"description": "Latest bad-state percentage for this check family, evaluated over time. Higher means more selected suites/checks are failing in the freshness window; this is not an event-count spike chart.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(((100 * (sum by (suite) (platform_quality:check_failed_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"coverage\"})) / clamp_min((sum by (suite) (platform_quality:check_seen_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"coverage\"})), 1))) or on(suite) ((0 * ((count by (suite) (platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}) >= bool 0)))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "LOC Failure Rate",
|
|
"panel_id": 132,
|
|
"panel_type": "state-timeline",
|
|
"description": "Latest bad-state percentage for this check family, evaluated over time. Higher means more selected suites/checks are failing in the freshness window; this is not an event-count spike chart.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(((100 * (sum by (suite) (platform_quality:check_failed_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"loc|smell\"})) / clamp_min((sum by (suite) (platform_quality:check_seen_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"loc|smell\"})), 1))) or on(suite) ((0 * ((count by (suite) (platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}) >= bool 0)))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Style Failure Rate",
|
|
"panel_id": 133,
|
|
"panel_type": "state-timeline",
|
|
"description": "Latest bad-state percentage for this check family, evaluated over time. Higher means more selected suites/checks are failing in the freshness window; this is not an event-count spike chart.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(((100 * (sum by (suite) (platform_quality:check_failed_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"docs|naming|hygiene|lint|docs_naming|style\"})) / clamp_min((sum by (suite) (platform_quality:check_seen_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"docs|naming|hygiene|lint|docs_naming|style\"})), 1))) or on(suite) ((0 * ((count by (suite) (platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}) >= bool 0)))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Gate Glue Failure Rate",
|
|
"panel_id": 134,
|
|
"panel_type": "state-timeline",
|
|
"description": "Latest bad-state percentage for this check family, evaluated over time. Higher means more selected suites/checks are failing in the freshness window; this is not an event-count spike chart.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(((100 * (sum by (suite) (platform_quality:check_failed_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"gate|glue|gate_glue\"})) / clamp_min((sum by (suite) (platform_quality:check_seen_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"gate|glue|gate_glue\"})), 1))) or on(suite) ((0 * ((count by (suite) (platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}) >= bool 0)))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "SonarQube Failure Rate",
|
|
"panel_id": 135,
|
|
"panel_type": "state-timeline",
|
|
"description": "Latest bad-state percentage for this check family, evaluated over time. Higher means more selected suites/checks are failing in the freshness window; this is not an event-count spike chart.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(((100 * (sum by (suite) (platform_quality:check_failed_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"sonarqube|sonar\"})) / clamp_min((sum by (suite) (platform_quality:check_seen_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"sonarqube|sonar\"})), 1))) or on(suite) ((0 * ((count by (suite) (platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}) >= bool 0)))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Supply Chain Failure Rate",
|
|
"panel_id": 136,
|
|
"panel_type": "state-timeline",
|
|
"description": "Latest bad-state percentage for this check family, evaluated over time. Higher means more selected suites/checks are failing in the freshness window; this is not an event-count spike chart.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(((100 * (sum by (suite) (platform_quality:check_failed_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\"})) / clamp_min((sum by (suite) (platform_quality:check_seen_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\"})), 1))) or on(suite) ((0 * ((count by (suite) (platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}) >= bool 0)))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Tests Healthy Rate",
|
|
"panel_id": 138,
|
|
"panel_type": "state-timeline",
|
|
"description": "Latest acceptable-state percentage for this check family, evaluated over time. Higher means more selected suites/checks are healthy in the freshness window; gaps mean there was no check evidence.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(((100 * (sum by (suite) (platform_quality:check_healthy_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"tests|unit|build\"})) / clamp_min((sum by (suite) (platform_quality:check_seen_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"tests|unit|build\"})), 1))) or on(suite) ((0 * ((count by (suite) (platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}) >= bool 0)))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Coverage Healthy Rate",
|
|
"panel_id": 139,
|
|
"panel_type": "state-timeline",
|
|
"description": "Latest acceptable-state percentage for this check family, evaluated over time. Higher means more selected suites/checks are healthy in the freshness window; gaps mean there was no check evidence.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(((100 * (sum by (suite) (platform_quality:check_healthy_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"coverage\"})) / clamp_min((sum by (suite) (platform_quality:check_seen_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"coverage\"})), 1))) or on(suite) ((0 * ((count by (suite) (platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}) >= bool 0)))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "LOC Healthy Rate",
|
|
"panel_id": 140,
|
|
"panel_type": "state-timeline",
|
|
"description": "Latest acceptable-state percentage for this check family, evaluated over time. Higher means more selected suites/checks are healthy in the freshness window; gaps mean there was no check evidence.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(((100 * (sum by (suite) (platform_quality:check_healthy_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"loc|smell\"})) / clamp_min((sum by (suite) (platform_quality:check_seen_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"loc|smell\"})), 1))) or on(suite) ((0 * ((count by (suite) (platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}) >= bool 0)))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Style Healthy Rate",
|
|
"panel_id": 141,
|
|
"panel_type": "state-timeline",
|
|
"description": "Latest acceptable-state percentage for this check family, evaluated over time. Higher means more selected suites/checks are healthy in the freshness window; gaps mean there was no check evidence.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(((100 * (sum by (suite) (platform_quality:check_healthy_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"docs|naming|hygiene|lint|docs_naming|style\"})) / clamp_min((sum by (suite) (platform_quality:check_seen_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"docs|naming|hygiene|lint|docs_naming|style\"})), 1))) or on(suite) ((0 * ((count by (suite) (platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}) >= bool 0)))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Gate Glue Healthy Rate",
|
|
"panel_id": 142,
|
|
"panel_type": "state-timeline",
|
|
"description": "Latest acceptable-state percentage for this check family, evaluated over time. Higher means more selected suites/checks are healthy in the freshness window; gaps mean there was no check evidence.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(((100 * (sum by (suite) (platform_quality:check_healthy_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"gate|glue|gate_glue\"})) / clamp_min((sum by (suite) (platform_quality:check_seen_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"gate|glue|gate_glue\"})), 1))) or on(suite) ((0 * ((count by (suite) (platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}) >= bool 0)))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "SonarQube Healthy Rate",
|
|
"panel_id": 143,
|
|
"panel_type": "state-timeline",
|
|
"description": "Latest acceptable-state percentage for this check family, evaluated over time. Higher means more selected suites/checks are healthy in the freshness window; gaps mean there was no check evidence.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(((100 * (sum by (suite) (platform_quality:check_healthy_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"sonarqube|sonar\"})) / clamp_min((sum by (suite) (platform_quality:check_seen_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"sonarqube|sonar\"})), 1))) or on(suite) ((0 * ((count by (suite) (platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}) >= bool 0)))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Supply Chain Healthy Rate",
|
|
"panel_id": 144,
|
|
"panel_type": "state-timeline",
|
|
"description": "Latest acceptable-state percentage for this check family, evaluated over time. Higher means more selected suites/checks are healthy in the freshness window; gaps mean there was no check evidence.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(((100 * (sum by (suite) (platform_quality:check_healthy_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\"})) / clamp_min((sum by (suite) (platform_quality:check_seen_flag:present_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",check=~\"ironbank|supply_chain|image_compliance|artifact_security\"})), 1))) or on(suite) ((0 * ((count by (suite) (platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}) >= bool 0)))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Problematic Tests Over Time (Top failures)",
|
|
"panel_id": 145,
|
|
"panel_type": "state-timeline",
|
|
"description": "Current outlier tests by rolling 24h failure count. A test needs at least two recent failures to appear, then falls off once it quiets down.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(sum by (suite, test) (sum_over_time(platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",test!=\"\",test!=\"__no_test_cases__\",status=\"failed\"}[24h:1h]))) and on (suite, test) topk(12, (sum by (suite, test) (sum_over_time(platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",test!=\"\",test!=\"__no_test_cases__\",status=\"failed\"}[24h:1h] @ end()))) >= 2)"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Most Problematic Test by Suite (7d)",
|
|
"panel_id": 147,
|
|
"panel_type": "bargauge",
|
|
"description": "Worst test per suite summed across 7d. This catches repeat offenders while keeping dashboard loads bounded; current hourly top list is quiet.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sort_desc(topk by (suite) (1, (sum by (suite, test) (sum_over_time(platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",test!=\"\",test!=\"__no_test_cases__\",status=\"failed\"}[7d:1h])))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Selected Test Pass/Fail History",
|
|
"panel_id": 146,
|
|
"panel_type": "timeseries",
|
|
"description": "Stacked hourly outcome volume for the selected suite/branch/test scope. This uses vmalert rollups only, avoiding expensive raw long-range per-test scans.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(sum(platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",test!=\"\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",status=\"passed\"}) or on() vector(0))",
|
|
"(sum(platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",test!=\"\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",status=\"failed\"}) or on() vector(0))",
|
|
"(sum(platform_quality:test_case_status:count_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",test!=\"\",test=~\"${test:regex}\",test!=\"__no_test_cases__\",status=\"skipped\"}) or on() vector(0))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Selected Test Pass Rate History",
|
|
"panel_id": 152,
|
|
"panel_type": "state-timeline",
|
|
"description": "Average pass rate per suite for the selected test filter, using memoized hourly test-case pass-rate rollups instead of raw historical scans.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"avg by (suite) (platform_quality:test_case_pass_rate:percent_1h{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",test!=\"\",test=~\"${test:regex}\",test!=\"__no_test_cases__\"})"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Tests Metrics Present by Suite",
|
|
"panel_id": 27,
|
|
"panel_type": "bargauge",
|
|
"description": "Whether suite-level test counts are present; 100% means the suite is reporting.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sort((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"lesavka\", \"__name__\", \".*\")) and on(suite) count by (suite) ({__name__=~\".*_quality_gate_tests_total\",exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"lesavka\", \"__name__\", \".*\"))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Checks Metrics Present by Suite",
|
|
"panel_id": 28,
|
|
"panel_type": "bargauge",
|
|
"description": "Whether gate check metrics are present; 100% means health panels have inputs.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sort((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"lesavka\", \"__name__\", \".*\")) and on(suite) count by (suite) ({__name__=~\".*_quality_gate_checks_total\",exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"lesavka\", \"__name__\", \".*\"))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Coverage Metrics Present by Suite",
|
|
"panel_id": 29,
|
|
"panel_type": "bargauge",
|
|
"description": "Whether coverage metrics are present; 100% means coverage panels are reliable.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sort((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"lesavka\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_workspace_line_coverage_percent{exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"lesavka\", \"__name__\", \".*\"))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "LOC Compliance Metrics Present by Suite",
|
|
"panel_id": 30,
|
|
"panel_type": "bargauge",
|
|
"description": "Whether LOC metrics are present; 100% means size panels are reliable.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sort((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"lesavka\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_source_lines_over_500_total{exported_job=\"platform-quality-ci\"}) and on(suite) count by (suite) (platform_quality_gate_source_files_total{exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"lesavka\", \"__name__\", \".*\"))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Test-Case Metrics Present by Suite",
|
|
"panel_id": 148,
|
|
"panel_type": "bargauge",
|
|
"description": "Whether per-test metrics are present; 100% enables drilldowns.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sort((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"lesavka\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_test_case_result{exported_job=\"platform-quality-ci\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"lesavka\", \"__name__\", \".*\"))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Real Test Cases Present by Suite",
|
|
"panel_id": 151,
|
|
"panel_type": "bargauge",
|
|
"description": "Whether real test names are present; 100% means not just placeholder telemetry.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sort((100 * (((label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"lesavka\", \"__name__\", \".*\")) and on(suite) count by (suite) (platform_quality_gate_test_case_result{exported_job=\"platform-quality-ci\",test!=\"__no_test_cases__\"})))) or on(suite) (0 * (label_replace(vector(1), \"suite\", \"ariadne\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"metis\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"ananke\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"atlasbot\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"pegasus\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"soteria\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"titan_iac\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"bstein_home\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"data_prepper\", \"__name__\", \".*\") or label_replace(vector(1), \"suite\", \"lesavka\", \"__name__\", \".*\"))))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Primary Branch Clean by Suite (7d)",
|
|
"panel_id": 150,
|
|
"panel_type": "bargauge",
|
|
"description": "Percent clean of non-primary branch evidence; 100% means only main/master is reporting.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sort((100 * (((count by (suite) (max_over_time(platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}[7d:1h]))) > bool 0) unless on(suite) ((count by (suite) (max_over_time(platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\",branch!~\"main|master|origin/main|origin/master|unknown\"}[7d:1h]))) > bool 0))) or on(suite) (0 * ((count by (suite) (max_over_time(platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}[7d:1h]))) > bool 0)))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Recent Branch Evidence by Suite (7d)",
|
|
"panel_id": 149,
|
|
"panel_type": "bargauge",
|
|
"description": "Branches with recent CI evidence; unexpected branches can mean drift or stale work.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"sort_desc(count by (suite, branch) (max_over_time(platform_quality_gate_build_info{suite=~\"${suite:regex}\",branch!=\"\",branch=~\"${branch:regex}\",exported_job=\"platform-quality-ci\"}[7d:1h])))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "SonarQube API Up",
|
|
"panel_id": 31,
|
|
"panel_type": "stat",
|
|
"description": "Whether the SonarQube exporter can reach SonarQube; 1 is good.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(max(sonarqube_up) or on() vector(0))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Sonar Projects (Selected)",
|
|
"panel_id": 32,
|
|
"panel_type": "stat",
|
|
"description": "Selected SonarQube project count; zero means Sonar is not tracking that suite.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(count(max by (project_key) (sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\"})) or on() vector(0))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Sonar Gate Fetch Errors",
|
|
"panel_id": 33,
|
|
"panel_type": "stat",
|
|
"description": "Sonar exporter fetch errors; zero is good because stale Sonar data misleads.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"(max(sonarqube_quality_gate_fetch_errors_total) or on() vector(0))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Sonar Gate Status Mix (Selected)",
|
|
"panel_id": 34,
|
|
"panel_type": "piechart",
|
|
"description": "Mix of Sonar gate states; OK is good and non-OK needs cleanup.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"count by (status) (max by (project_key, status) (sonarqube_project_quality_gate_pass{project_key=~\"${suite:regex}\"}))"
|
|
]
|
|
},
|
|
{
|
|
"dashboard": "Atlas Testing",
|
|
"panel_title": "Sonar Gate Health by Project",
|
|
"panel_id": 35,
|
|
"panel_type": "state-timeline",
|
|
"description": "SonarQube gate status over time by project. OK projects render as full healthy lanes; non-OK projects drop to red without disappearing.",
|
|
"tags": [
|
|
"atlas",
|
|
"testing",
|
|
"quality-gate",
|
|
"ci"
|
|
],
|
|
"datasource_uid": "atlas-vm",
|
|
"datasource_type": "prometheus",
|
|
"exprs": [
|
|
"platform_quality:sonar_gate_health_percent:latest_1h{project_key=~\"${suite:regex}\"}"
|
|
]
|
|
}
|
|
]
|