GUIDEPanel de control general con resumen de los 4 Golden Signals
Para que este dashboard funcione correctamente necesitas:
Prometheus datasource configurado en Grafananode_exporter para métricas de nodos (CPU, memoria, disco)kube-state-metrics para estado de pods y recursos K8sup metric para health check (scrape_duration_seconds)Estos dashboards fueron probados con Grafana 12.3 y kube-prometheus-stack. Para importar: vaya a Dashboards → Import, pegue el JSON y seleccione su datasource Prometheus en el menú desplegable.
job="node-exporter" es el label de job por defecto configurado por kube-prometheus-stack. Su instalación puede usar job="node" u otro valor — ajústelo según corresponda.$job_node (en el JSON del dashboard) le permite alternar entre node-exporter y node sin editar las queries de los paneles individualmente.$job_node en Configuración del Dashboard → Variables.┌────────────────────────────────────────┐ │ OVERVIEW — 4 GOLDEN SIGNALS │ ├────────────────────────────────────────┤ │ Health │ Avg │ Error │ CPU │ │ Score │ Latency │ Rate │ Satur. │ ├──────────┼──────────┼─────────┼────────┤ │ Signals Summary (4 KPIs) [6 cols] │ ├────────────────────────────────────────┤ │ Node Status Grid │ Pod Status │ │ (tabla) │ (tabla) │ ├────────────────────────────────────────┤ │ Top Resource Consumers [12 cols] │ └────────────────────────────────────────┘
Muestra el porcentaje de targets "up" en Prometheus.
Default query:100 * count(up == 1) / count(up)
Para cambiar: Si usas un exporter custom, sustituye up por tu métrica:
100 * count(my_service_healthy == 1) / count(my_service_healthy)
Umbrales: Edita Thresholds en panel (default: 90 yellow, 75 red)
Latencia promedio de requests en milisegundos.
avg(rate(http_request_duration_seconds_sum[5m])) / avg(rate(http_request_duration_seconds_count[5m])) * 1000
Cambiar métrica: Si no usas Prometheus HTTP conventions, usa:
avg(my_request_latency_ms)
Porcentaje de requests con status code 5xx.
100 * sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m]))
Personalización: Para incluir 4xx:
100 * sum(rate(http_requests_total{status=~"[45].."}[5m]))
/ sum(rate(http_requests_total[5m]))
Uso de CPU como porcentaje.
100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
Filtrar por instancia específica:
100 - (avg(rate(node_cpu_seconds_total{mode="idle",instance="server1:9100"}[5m])) * 100)
Tabla con 4 KPIs principales. Personalizar:
http_request_duration_seconds por tu métrica5m → 1m para más sensibilidad)Tabla dinámica con estado de nodos.
max by (instance) (up{job="node"})
Cambiar columnas: En panel → Columns, añade:
node_cpu_seconds_total → CPU totalnode_memory_MemAvailable_bytes → Memoria disponiblenode_filesystem_avail_bytes → Espacio discoTabla de pods con estado.
max by (pod, namespace) (kube_pod_status_phase)
Filtrar por namespace: En variables, crea selector:
label_values(kube_pod_info, namespace)
Luego usa en la query:
max by (pod, namespace) (kube_pod_status_phase{namespace="$namespace"})
Ranking de pods por CPU/memoria.
topk(10, sum by (pod, namespace) (rate(container_cpu_usage_seconds_total[5m])) * 100)
Cambiar top N: Reemplaza topk(10 con topk(20 para top 20
Este dashboard incluye 3 temas predefinidos. Usa los botones arriba o edita JSON:
| Tema | Primary | Glow | Background |
|---|---|---|---|
| GREEN | #33FF00 |
rgba(51,255,0,0.5) | #0A1A0A |
| AMBER | #FFB000 |
rgba(255,176,0,0.5) | #0D1117 |
| BLUE | #00BFFF |
rgba(0,191,255,0.5) | #0A0A1A |
| Dispositivo | Resolución | GridPos Height |
|---|---|---|
| iPad Pro 12.9 | 2048×2732 | 12-14 |
| iPad Air 10.9 | 1640×2360 | 10-12 |
| Samsung Tab S9 | 1752×2800 | 11-13 |
| Google Pixel Tablet | 1600×2560 | 10-12 |
| Desktop 1920×1080 | Full | 8-10 |
Para ajustar: En Grafana, edita cada panel → Panel tab → Panel options → modifica gridPos.h