Día 51 - Tu Primer Dashboard con Grafana
📊 Tu Primer Dashboard en 30 Minutos
"Hoy vas a ver números de tu computadora convertirse en gráficos hermosos en tiempo real. ¡Es súper satisfactorio! 📈✨"
🎯 Meta del día:
- ✅ Grafana funcionando en tu browser
- ✅ Ver al menos 1 gráfico de tu sistema
- ✅ Entender cómo fluyen los datos: Sistema → Prometheus → Grafana
🤔 Recordatorio Rápido: ¿Qué vamos a hacer?
Ayer aprendiste los 3 pilares. Hoy vamos a ver métricas en acción:
Tu computadora → Node Exporter → Prometheus → Grafana → TU BROWSER
(genera) (recolecta) (almacena) (grafica) (ves gráficos)
En español simple:
- Tu computadora genera números (CPU, RAM, disco)
- Node Exporter los expone en formato que Prometheus entiende
- Prometheus los recolecta cada pocos segundos
- Grafana los convierte en gráficos bonitos
- Tú los ves en el browser y dices "¡WOW!" 🤩
🐳 Paso 1: Setup Súper Simple con Docker
Crear la estructura de archivos:
mkdir mi-observabilidad
cd mi-observabilidad
docker-compose.yml (el más simple del mundo):
services:
# 1. Recolecta métricas de tu sistema
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
ports:
- "9100:9100"
command:
- '--path.rootfs=/host'
volumes:
- '/:/host:ro,rslave'
restart: unless-stopped
# 2. Almacena las métricas
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
restart: unless-stopped
# 3. Muestra gráficos bonitos
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin123
volumes:
- grafana-storage:/var/lib/grafana
restart: unless-stopped
volumes:
grafana-storage:
prometheus.yml (configuración mínima):
global:
scrape_interval: 15s # Cada 15 segundos recolecta datos
scrape_configs:
# Le dice a Prometheus dónde encontrar métricas
- job_name: 'node-exporter'
static_configs:
- targets: ['node-exporter:9100']
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
🚀 Paso 2: ¡Arrancar Todo!
# Levantar todo el stack
docker compose up -d
# Verificar que todo esté corriendo
docker ps
# Deberías ver 3 contenedores corriendo:
# - grafana (puerto 3000)
# - prometheus (puerto 9090)
# - node-exporter (puerto 9100)
Verificar que funciona:
# 1. Node Exporter (métricas crudas)
curl http://localhost:9100/metrics | head -20
# Deberías ver algo como:
# node_cpu_seconds_total{cpu="0",mode="idle"} 12345.67
# node_memory_MemTotal_bytes 8.394604e+09
# 2. Prometheus (interface web)
# Abrir en browser: http://localhost:9090
# 3. Grafana (dashboard web)
# Abrir en browser: http://localhost:3000
# Usuario: admin
# Password: admin123
📊 Paso 3: Configurar Grafana (Paso a Paso)
1. Entrar a Grafana:
- Ve a:
http://localhost:3000
- Usuario:
admin
- Password:
admin123
- Te va a pedir cambiar la password (podés usar
admin123
de nuevo)
2. Agregar Prometheus como Data Source:
- Click en el menú hamburguesa (☰) → Connections → Data sources
- Click "Add data source"
- Seleccionar "Prometheus"
- URL:
http://prometheus:9090
- Click "Save & Test" → Deberías ver ✅ "Data source is working"
3. Crear tu primer dashboard:
- Click en "+" → Dashboard
- Click "Add visualization"
- Seleccionar "Prometheus" como data source
🎯 Paso 4: Tus Primeros Gráficos
Gráfico 1: CPU Usage 🔥
Query para pegar:
100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
Configuración:
- Panel title: "CPU Usage %"
- Unit: "Percent (0-100)"
- Min: 0, Max: 100
Gráfico 2: Memoria RAM 💾
Query para pegar:
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100
Configuración:
- Panel title: "Memory Usage %"
- Unit: "Percent (0-100)"
- Min: 0, Max: 100
Gráfico 3: Espacio en Disco 💿
Query para pegar:
100 - ((node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100)
Configuración:
- Panel title: "Disk Usage %"
- Unit: "Percent (0-100)"
- Min: 0, Max: 100
Gráfico 4: Network Traffic 🌐
Query para pegar (recibido):
rate(node_network_receive_bytes_total{device!="lo"}[5m]) * 8
Query para pegar (enviado):
rate(node_network_transmit_bytes_total{device!="lo"}[5m]) * 8
Configuración:
- Panel title: "Network Traffic"
- Unit: "bits/sec"
🧪 Paso 5: ¡Hacer que los Gráficos Se Muevan!
Test 1: Subir CPU
# En una terminal nueva
# Linux/Mac:
stress --cpu 1 --timeout 60s
# Si no tenés stress, usar:
yes > /dev/null &
sleep 10
kill %1
# Windows (PowerShell):
for ($i=0; $i -lt 100000000; $i++) { $x = $i * $i }
¡Mirá el gráfico de CPU subir en tiempo real! 📈
Test 2: Usar Memoria
# Crear archivo grande temporal
dd if=/dev/zero of=archivo_grande bs=1M count=500
# Ver gráfico de memoria subir
# Después borrar:
rm archivo_grande
Test 3: Network Activity
# Generar tráfico de red
curl -o archivo_test.zip http://speedtest.ftp.otenet.gr/files/test1Mb.db
rm archivo_test.zip
¡Ver los gráficos reaccionar en tiempo real es SÚPER satisfactorio! 🎉
🎨 Paso 6: Hacer que se Vea Profesional
Personalizar tu dashboard:
-
Click en el ícono de configuración (⚙️) del dashboard
-
General:
- Title: "Mi Sistema - Dashboard Personal"
- Description: "Métricas en tiempo real de mi computadora"
- Tags: "sistema", "personal", "monitoring"
-
Time options:
- Refresh: "5s" (se actualiza cada 5 segundos)
- Time range: "Last 15 minutes"
-
Guardar: Click en 💾 → Save dashboard
Organizar paneles:
- Drag & drop para mover gráficos
- Resize arrastrando las esquinas
- Duplicate un panel para experimentar
Colores que se ven profesionales:
- CPU: Rojo/Naranja (indica "calor")
- Memory: Azul (indica "data")
- Disk: Verde/Amarillo (indica "storage")
- Network: Púrpura (indica "comunicación")
🔍 Paso 7: Explorar Prometheus (Bonus)
Ve a http://localhost:9090
y explorá:
Queries útiles para probar:
# Ver todas las métricas disponibles
{__name__=~"node_.*"}
# CPU por core
node_cpu_seconds_total
# Memoria total en GB
node_memory_MemTotal_bytes / 1024 / 1024 / 1024
# Uptime del sistema
node_time_seconds - node_boot_time_seconds
Interfaz de Prometheus:
- Graph: Ver métricas en gráfico simple
- Table: Ver datos en tabla
- Status → Targets: Ver qué está monitoreando
🛠️ Troubleshooting Común
❌ "Grafana no carga"
# Verificar logs
docker logs grafana
# Reiniciar si es necesario
docker restart grafana
❌ "No data en los gráficos"
- Verificar Prometheus:
http://localhost:9090/targets
- Todos los targets deben estar UP (verde)
- Si están DOWN, revisar
prometheus.yml
❌ "Node Exporter no funciona"
# En Windows, el volumen no funciona igual
# Usar esta versión simplificada:
docker-compose-windows.yml:
services:
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./prometheus-simple.yml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin123
prometheus-simple.yml:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
📚 Conceptos Importantes que Aprendiste Hoy
1. Data Source:
- Prometheus es el "data source" de Grafana
- Un dashboard puede tener múltiples data sources
2. PromQL (Prometheus Query Language):
node_cpu_seconds_total
= métrica crudarate()
= velocidad de cambioavg()
= promedio* 100
= convertir a porcentaje
3. Time Series:
- Todas las métricas tienen timestamps
- Prometheus almacena historial
- Podés ver "qué pasó hace 1 hora"
4. Refresh Rate:
- Dashboard se actualiza automáticamente
- Configurable: 5s, 30s, 1m, etc.
🧠 Revisión del Día
Concepto | ¿Lo lograste? | Notas |
---|---|---|
Grafana funcionando en localhost:3000 | ✔️ / ❌ | |
Ver al menos 1 gráfico con datos | ✔️ / ❌ | |
Entender flujo: Sistema → Prometheus → Grafana | ✔️ / ❌ | |
Hacer que un gráfico cambie con activity | ✔️ / ❌ | |
Personalizar dashboard básicamente | ✔️ / ❌ |
🎯 Mini Challenges (Opcional)
Challenge 1: Metric Explorer
- Abrí Prometheus:
http://localhost:9090
- Explorá diferentes métricas que empiecen con
node_
- Encontrá al menos 3 métricas que no usamos hoy
Challenge 2: Dashboard Personal
- Agregá un panel que muestre la hora actual
- Query:
time()
- Configuralo como "Stat" en lugar de "Time series"
Challenge 3: Stress Test
- Corré
stress --cpu 2 --memory 1G --timeout 60s
- Tomá screenshot de tus gráficos durante el stress
- Ver cómo CPU y memoria suben
💡 Pro Tips del Día
🎨 Visualization:
- Time series: Para datos que cambian con el tiempo
- Stat: Para un número grande actual
- Gauge: Para porcentajes (0-100%)
- Bar gauge: Para comparar múltiples valores
📊 Dashboard Organization:
- Métricas críticas arriba (CPU, Memory)
- Métricas secundarias abajo (Network, Disk)
- Usar colores consistentes
⚡ Performance:
- No hacer refresh cada 1 segundo (consume recursos)
- 5-30 segundos es perfecto para la mayoría de casos
- Usar time ranges apropiados (15min para debugging, 24h para tendencias)
🚀 ¿Qué Sigue Mañana?
Día 52: Monitorear Aplicaciones Reales
- Crear una app simple (Flask/Express)
- Agregarle métricas custom
- Ver métricas de TU aplicación en Grafana
- No solo sistema, sino TU código!
Preparación para mañana:
- Mantené el stack corriendo:
docker-compose up -d
- Pensá qué tipo de app te gustaría monitorear
- Guardá tu dashboard de hoy (lo vamos a expandir)
🎉 ¡Felicitaciones!
Hoy lograste algo súper importante:
✅ Viste datos reales en gráficos hermosos ✅ Entendiste el flujo completo de observabilidad ✅ Configuraste un stack profesional ✅ Experimentaste con métricas en tiempo real ✅ Creaste tu primer dashboard personalizado
Esto es exactamente lo que usan las empresas grandes. Netflix, Google, Facebook - todos usan Prometheus + Grafana (o algo similar).
Lo que acabás de aprender vale fácil $10,000+ extra por año en salary. 💰
📸 Compartí tu dashboard funcionando con #DevOpsConRoxs - Día 51
¡Mañana vamos a monitorear aplicaciones reales que VOS escribas! 🚀📊