monitoring: los 12 estados de servicio miden el servicio, no el namespace
Los paneles heredados preguntaban "cuántos pods hay Running en el namespace".
Para n8n u ollama da igual, pero el panel llamado "grafana" contaba los 7 pods
de monitoring y el de "argocd" los suyos: se habrían quedado en verde con
Grafana muerta mientras Prometheus siguiera en pie. Lo mismo en "authentik" y
"gitea", que sumaban su Postgres, su Redis y el runner.
Ahora los 12 usan la misma forma: ¿están en pie TODOS los componentes de los
que depende el servicio?
min((kube_deployment_status_replicas_available{SEL} >= bool 1)
or (kube_statefulset_status_replicas_ready{SEL} >= bool 1)) or vector(0)
El selector define qué es el servicio: el namespace entero cuando el namespace
ES el servicio (argocd, authentik); acotado cuando alberga varias cosas
(grafana dentro de monitoring, researchowl/searxng); y en gitea sólo el
StatefulSet, porque si cae el runner se paran los builds pero Gitea sigue
sirviendo — pintarlo "Down" sería una falsa alarma.
Cambio invisible salvo cuando algo falla: los 12 mapean 0 -> "Down" y >=1 ->
"Running", así que en pantalla nunca se vio el número. Y además exige réplicas
*disponibles*, no pods en fase Running: un pod arrancado pero que no pasa el
readiness ya no cuenta como sano.
Verificado los 12 en verde y los 12 en rojo (simulando escasez de réplicas), y
el caso que de verdad importa: UN solo componente caído entre sanos arrastra el
panel a 0 (probado con dex-server en argocd y con el Postgres de authentik).
Después, los 12 otra vez a través del proxy de datasource de Grafana.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -398,7 +398,7 @@ data:
|
|||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "prometheus"
|
"uid": "prometheus"
|
||||||
},
|
},
|
||||||
"expr": "sum(kube_pod_status_phase{namespace=\"n8n\",phase=\"Running\"}) or vector(0)",
|
"expr": "min((kube_deployment_status_replicas_available{namespace=\"n8n\"} >= bool 1) or (kube_statefulset_status_replicas_ready{namespace=\"n8n\"} >= bool 1)) or vector(0)",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"legendFormat": "n8n",
|
"legendFormat": "n8n",
|
||||||
"refId": "A"
|
"refId": "A"
|
||||||
@@ -486,7 +486,7 @@ data:
|
|||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "prometheus"
|
"uid": "prometheus"
|
||||||
},
|
},
|
||||||
"expr": "sum(kube_pod_status_phase{namespace=\"vaultwarden\",phase=\"Running\"}) or vector(0)",
|
"expr": "min((kube_deployment_status_replicas_available{namespace=\"vaultwarden\"} >= bool 1) or (kube_statefulset_status_replicas_ready{namespace=\"vaultwarden\"} >= bool 1)) or vector(0)",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"legendFormat": "vaultwarden",
|
"legendFormat": "vaultwarden",
|
||||||
"refId": "A"
|
"refId": "A"
|
||||||
@@ -574,7 +574,7 @@ data:
|
|||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "prometheus"
|
"uid": "prometheus"
|
||||||
},
|
},
|
||||||
"expr": "sum(kube_pod_status_phase{namespace=\"monitoring\",phase=\"Running\"}) or vector(0)",
|
"expr": "min((kube_deployment_status_replicas_available{namespace=\"monitoring\",deployment=\"kube-prometheus-stack-grafana\"} >= bool 1) or (kube_statefulset_status_replicas_ready{namespace=\"monitoring\",deployment=\"kube-prometheus-stack-grafana\"} >= bool 1)) or vector(0)",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"legendFormat": "grafana",
|
"legendFormat": "grafana",
|
||||||
"refId": "A"
|
"refId": "A"
|
||||||
@@ -662,7 +662,7 @@ data:
|
|||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "prometheus"
|
"uid": "prometheus"
|
||||||
},
|
},
|
||||||
"expr": "sum(kube_pod_status_phase{namespace=\"authentik\",phase=\"Running\"}) or vector(0)",
|
"expr": "min((kube_deployment_status_replicas_available{namespace=\"authentik\"} >= bool 1) or (kube_statefulset_status_replicas_ready{namespace=\"authentik\"} >= bool 1)) or vector(0)",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"legendFormat": "authentik",
|
"legendFormat": "authentik",
|
||||||
"refId": "A"
|
"refId": "A"
|
||||||
@@ -750,7 +750,7 @@ data:
|
|||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "prometheus"
|
"uid": "prometheus"
|
||||||
},
|
},
|
||||||
"expr": "sum(kube_pod_status_phase{namespace=\"homarr\",phase=\"Running\"}) or vector(0)",
|
"expr": "min((kube_deployment_status_replicas_available{namespace=\"homarr\"} >= bool 1) or (kube_statefulset_status_replicas_ready{namespace=\"homarr\"} >= bool 1)) or vector(0)",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"legendFormat": "homarr",
|
"legendFormat": "homarr",
|
||||||
"refId": "A"
|
"refId": "A"
|
||||||
@@ -838,7 +838,7 @@ data:
|
|||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "prometheus"
|
"uid": "prometheus"
|
||||||
},
|
},
|
||||||
"expr": "sum(kube_pod_status_phase{namespace=\"gitea\",phase=\"Running\"}) or vector(0)",
|
"expr": "min((kube_deployment_status_replicas_available{namespace=\"gitea\",statefulset=\"gitea\"} >= bool 1) or (kube_statefulset_status_replicas_ready{namespace=\"gitea\",statefulset=\"gitea\"} >= bool 1)) or vector(0)",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"legendFormat": "gitea",
|
"legendFormat": "gitea",
|
||||||
"refId": "A"
|
"refId": "A"
|
||||||
@@ -926,7 +926,7 @@ data:
|
|||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "prometheus"
|
"uid": "prometheus"
|
||||||
},
|
},
|
||||||
"expr": "sum(kube_pod_status_phase{namespace=\"argocd\",phase=\"Running\"}) or vector(0)",
|
"expr": "min((kube_deployment_status_replicas_available{namespace=\"argocd\"} >= bool 1) or (kube_statefulset_status_replicas_ready{namespace=\"argocd\"} >= bool 1)) or vector(0)",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"legendFormat": "argocd",
|
"legendFormat": "argocd",
|
||||||
"refId": "A"
|
"refId": "A"
|
||||||
@@ -1014,7 +1014,7 @@ data:
|
|||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "prometheus"
|
"uid": "prometheus"
|
||||||
},
|
},
|
||||||
"expr": "sum(kube_pod_status_phase{namespace=\"ollama\",phase=\"Running\"}) or vector(0)",
|
"expr": "min((kube_deployment_status_replicas_available{namespace=\"ollama\"} >= bool 1) or (kube_statefulset_status_replicas_ready{namespace=\"ollama\"} >= bool 1)) or vector(0)",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"legendFormat": "ollama",
|
"legendFormat": "ollama",
|
||||||
"refId": "A"
|
"refId": "A"
|
||||||
@@ -1102,7 +1102,7 @@ data:
|
|||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "prometheus"
|
"uid": "prometheus"
|
||||||
},
|
},
|
||||||
"expr": "sum(kube_deployment_status_replicas_available{namespace=\"ghost-en\",deployment=\"ghost-en\"}) or vector(0)",
|
"expr": "min((kube_deployment_status_replicas_available{namespace=\"ghost-en\"} >= bool 1) or (kube_statefulset_status_replicas_ready{namespace=\"ghost-en\"} >= bool 1)) or vector(0)",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"legendFormat": "ghost-en",
|
"legendFormat": "ghost-en",
|
||||||
"refId": "A"
|
"refId": "A"
|
||||||
@@ -1190,7 +1190,7 @@ data:
|
|||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "prometheus"
|
"uid": "prometheus"
|
||||||
},
|
},
|
||||||
"expr": "sum(kube_deployment_status_replicas_available{namespace=\"zona-exclusion\",deployment=\"zona-exclusion\"}) or vector(0)",
|
"expr": "min((kube_deployment_status_replicas_available{namespace=\"zona-exclusion\"} >= bool 1) or (kube_statefulset_status_replicas_ready{namespace=\"zona-exclusion\"} >= bool 1)) or vector(0)",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"legendFormat": "zona-exclusion",
|
"legendFormat": "zona-exclusion",
|
||||||
"refId": "A"
|
"refId": "A"
|
||||||
@@ -1278,7 +1278,7 @@ data:
|
|||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "prometheus"
|
"uid": "prometheus"
|
||||||
},
|
},
|
||||||
"expr": "sum(kube_deployment_status_replicas_available{namespace=\"researchowl\",deployment=\"researchowl\"}) or vector(0)",
|
"expr": "min((kube_deployment_status_replicas_available{namespace=\"researchowl\",deployment=\"researchowl\"} >= bool 1) or (kube_statefulset_status_replicas_ready{namespace=\"researchowl\",deployment=\"researchowl\"} >= bool 1)) or vector(0)",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"legendFormat": "researchowl",
|
"legendFormat": "researchowl",
|
||||||
"refId": "A"
|
"refId": "A"
|
||||||
@@ -1366,7 +1366,7 @@ data:
|
|||||||
"type": "prometheus",
|
"type": "prometheus",
|
||||||
"uid": "prometheus"
|
"uid": "prometheus"
|
||||||
},
|
},
|
||||||
"expr": "sum(kube_deployment_status_replicas_available{namespace=\"researchowl\",deployment=\"searxng\"}) or vector(0)",
|
"expr": "min((kube_deployment_status_replicas_available{namespace=\"researchowl\",deployment=\"searxng\"} >= bool 1) or (kube_statefulset_status_replicas_ready{namespace=\"researchowl\",deployment=\"searxng\"} >= bool 1)) or vector(0)",
|
||||||
"instant": true,
|
"instant": true,
|
||||||
"legendFormat": "searxng",
|
"legendFormat": "searxng",
|
||||||
"refId": "A"
|
"refId": "A"
|
||||||
@@ -1728,6 +1728,6 @@ data:
|
|||||||
"timezone": "browser",
|
"timezone": "browser",
|
||||||
"title": "ChemaVX Homelab Overview",
|
"title": "ChemaVX Homelab Overview",
|
||||||
"uid": "chemavx-homelab-v1",
|
"uid": "chemavx-homelab-v1",
|
||||||
"version": 5,
|
"version": 6,
|
||||||
"weekStart": ""
|
"weekStart": ""
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user