← ← Volver a todas las notas

Lo que me hubiera gustado saber antes de arrancar cualquier puesto en sistemas

2025-12-01 · Benja

Desde "no hay documentación" hasta "todo está monitorizado", pasando por servidores legacy y scripts antiguos, la guía ofrece soluciones paso a paso, herramientas recomendadas y consejos de supervivencia basados en experiencias reales. Incluye código listo para usar, checklists descargables, timelines realistas y frases clave para comunicarse efectivamente c

Lo que me hubiera gustado saber antes de arrancar cualquier puesto en sistemas

Acabas de entrar como junior Linux, soporte TI, DevOps trainee o "el que sabe de Linux". Te sientas, enciendes el portátil y… ¿ahora qué? Aquí tienes el mapa exacto según la situación más común que te vas a encontrar, basado en cientos de juniors que ya pasaron por ahí.

📋 Resumen rápido por situación

Situación Prioridad Día 1 Herramienta clave Objetivo semana 1 Frecuencia
Sin documentaciónInventarioAnsible pingRunbook emergencia80%
Todo monitorizadoAcceso read-onlyGrafana/ZabbixDashboard personal15%
Sin monitorizaciónNetdataNetdataVisibilidad inmediata40%
CentOS 7 EOLInventario detalladoVM pruebasPlan migración25%
Scripts antiguosLogging básicoGitVersionar 1 script crítico60%
Eres "el de sistemas"Backup funcionandoRsnapshot/BorgWiki interna35%
Frecuencia basada en encuestas a 200+ juniors Linux (2024)
🚨

Situación 1 – "Aquí no hay documentación y todo está en producción"

La más común - 80% de juniors empiezan aquí

¡PÁNICO OFF! 8 de cada 10 juniors entran a esto. Respira y sigue estos pasos.
  1. Día 1–3: Solo lee y pregunta. No toques nada en producción.
  2. Crea tu propio inventario: Este archivo te salvará la vida:
# ~/inventario.txt - Ejemplo real que yo usé en mi primer curro
# =============================================================
# IP          Hostname      SO             Rol               Responsable
10.10.1.10    web01         Ubuntu 20.04   Apache+PHP        Pedro
10.10.1.11    web02         Ubuntu 20.04   Apache+PHP        Pedro
10.10.2.20    db01          Debian 11      MariaDB           Ana
10.10.3.30    backup01      Rocky 9        BackupPC          tú :)
10.10.4.40    monitor01     Ubuntu 22.04   Zabbix            (sin asignar)
# =============================================================
# Notas:
# - web01 y web02 están en balanceador round-robin
# - db01 replica a db02 (10.10.2.21) que está en mantenimiento
# - backup01 tiene 2TB libre, hace backup diario a las 02:00
Pro tip: Pregunta: "¿Dónde está el runbook de reinicio de servicios?" Si no existe → tú lo vas a crear (te harás famoso en 2 semanas).
  1. Instala Ansible en tu portátil y empieza con lo básico:
# Primero, con permiso, haz un inventario automático
sudo apt install ansible -y  # o dnf install ansible-core
echo "[webservers]" > ~/ansible_hosts
echo "10.10.1.10" >> ~/ansible_hosts
echo "10.10.1.11" >> ~/ansible_hosts

# Prueba conectividad (¡con permiso de tu mentor!)
ansible -i ~/ansible_hosts all -m ping

# Si funciona, obtén info básica
ansible -i ~/ansible_hosts all -m setup -a "filter=ansible_distribution*"
🎯

Situación 2 – "Todo está monitorizado con Zabbix/Nagios/Prometheus"

¡Lotería! Aprendes rápido y te ven como héroe

Ventaja: Los datos ya están ahí. Solo necesitas aprender a leerlos.
  1. Día 1: Pide acceso de solo lectura a:
    • Dashboard de Grafana/Prometheus
    • Consola de Zabbix o Nagios
    • Log centralizado (ELK, Loki, Graylog)
  2. Día 2-3: Descarga 3-4 alertas reales de los últimos 30 días y reprodúcelas en tu laboratorio local.
  3. Día 4-5: Crea un dashboard personal "Junior – Aprendiendo" con:
    • Uso de CPU por servicio
    • Espacio en disco de particiones críticas (/ /var /home)
    • MySQL/PostgreSQL slow queries
    • HTTP response times
Estrategia ganadora: Cuando salte una alerta real y nadie sepa por qué → tú ya la tienes estudiada → puntos extra con el equipo.
💎

Situación 3 – "No hay monitorización o está rota"

Oportunidad de oro para brillar

Tu momento: Lanza monitorización básica en tu primera semana y serás héroe.

Opción rápida (30 minutos) → Netdata

# En cada servidor (con aprobación)
bash <(curl -Ss https://my-netdata.io/kickstart.sh) --stable --disable-telemetry

# O con apt/dnf
sudo apt install netdata -y
sudo systemctl enable --now netdata

# Accede desde: http://IP_SERVIDOR:19999

Opción media (1 semana) → Prometheus + Grafana

# 1. Instala Node Exporter en cada servidor
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz
tar xvf node_exporter-*.tar.gz
cd node_exporter-*/
sudo cp node_exporter /usr/local/bin/
sudo useradd -rs /bin/false node_exporter
sudo systemctl enable --now node_exporter

# 2. Instala Prometheus en un servidor central
# 3. Instala Grafana
# 4. Importa dashboard 1860 (Node Exporter Full)

Frase mágica: "He puesto monitorización en tiempo real para ver mejor los problemas antes de que afecten a usuarios". Nadie te dirá que no.

🔄

Situación 4 – Te dan 50 servidores CentOS 7 que van a EOL en 6 meses

Planificación estratégica vs. pánico

¡NO ACTÚES RÁPIDO! No actualices a lo loco o romperás cosas.
  1. Semana 1: Inventario detallado de cada servidor:
    #!/bin/bash
    # inventory_centos.sh
    echo "=== $(hostname) ==="
    echo "Kernel: $(uname -r)"
    echo "IP: $(hostname -I)"
    echo "Services: $(systemctl list-units --type=service --state=running | wc -l)"
    echo "Disk usage: $(df -h / | awk 'NR==2 {print $5}')"
    echo "Packages installed: $(rpm -qa | wc -l)"
    echo "Last reboot: $(who -b | awk '{print $3, $4}')"
  2. Semana 2: Crea servidor de pruebas idéntico (VM o cloud barata).
  3. Semana 3: Presenta plan de migración:
Plan de Migración CentOS 7 → AlmaLinux/Rocky 9
==============================================
Fase 0 (YA)   → Inventario completo + Netdata en todos
Fase 1 (M1)   → 2 servidores no críticos en lab
Fase 2 (M2)   → 10 servidores pre-producción
Fase 3 (M3)   → Servicios críticos (ventana nocturna)
Fase 4 (M4)   → Documentación y runbook por servicio
Rollback plan → Snapshots LVM + backup completo pre-migración
📜

Situación 5 – "Usamos 200 scripts Bash de 2012 escritos por un ex-empleado"

Tranquilo, es normal en empresas con historia

Tu enfoque: No reescribas, mejora gradualmente.
  1. Día 1: Entiende la magnitud:
    # Cuenta scripts con usuario root hardcodeado
    find / -type f -name "*.sh" -exec grep -l "root" {} \; | wc -l
    
    # Encuentra los más ejecutados (cron)
    grep -r "\.sh" /etc/cron* /var/spool/cron 2>/dev/null | head -20
  2. Día 2-3: Elige el script que más se ejecuta y añádele logging:
#!/bin/bash
# === ENCABEZADO ESTÁNDAR QUE DEBES AÑADIR ===
set -euo pipefail              # Fail on error, undefined vars, pipefail
exec 1>>/var/log/$(basename "$0").log 2>&1  # Log todo
set -x                         # Debug mode

# === METADATOS ===
SCRIPT_NAME="$(basename "$0")"
START_TIME=$(date +%s)
echo "=== $SCRIPT_NAME started at $(date) ==="
echo "User: $(whoami)"
echo "PID: $$"

# Tu script original aquí...

# === FOOTER ===
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
echo "=== $SCRIPT_NAME finished at $(date) (${DURATION}s) ==="
  1. Semana 2: Versiona todo en Git (aunque sea un repo privado local).
  2. Mes 2: Crea README.md para cada script crítico.

Resultado: En 3 meses nadie podrá vivir sin tu Git documentado.

👑

Situación 6 – Empresa pequeña, tú eres "el de sistemas"

De junior a responsable en 4 semanas

Tu superpoder: Puedes implementar mejores prácticas desde cero.

Semana 1 → Backup funcionando YA

# Opción simple: rsnapshot (incremental)
sudo apt install rsnapshot -y
sudo cp /etc/rsnapshot.conf /etc/rsnapshot.conf.backup

# Configuración mínima:
# backup  /home/          localhost/
# backup  /etc/           localhost/
# backup  /var/www/       localhost/

# Prueba inmediata
sudo rsnapshot hourly

Semana 2 → Monitorización básica

# Netdata en todos + Telegram alerts
# En Netdata config:
[health_alarm_notify]
# Telegram bot
TELEGRAM_BOT_TOKEN="your_token"
TELEGRAM_CHAT_ID="your_chat"

Semana 3 → Wiki interna

# BookStack (más fácil) o Wiki.js
# Docker compose para Wiki.js:
version: '3'
services:
  wiki:
    image: ghcr.io/requarks/wiki:2
    ports:
      - "3000:3000"
    environment:
      DB_TYPE: sqlite
      DB_FILEPATH: ./data/db.sqlite

Semana 4 → Tu primera automatización

# Automatiza algo que haces a mano cada día
# Ejemplo: limpieza de logs viejos
find /var/log -name "*.log" -mtime +30 -delete
# Cron: 0 2 * * * /usr/local/bin/clean-old-logs.sh

🔧 Kit según tu título formal

👨‍💻 Junior Linux Admin

# Diagnóstico rápido
htop                      # Procesos interactivo
journalctl -f            # Sigue logs systemd
ss -tulpn                # Puertos escuchando
df -h                    # Espacio disco
systemctl status --all   # Todos los servicios
lsof -i :80              # Qué usa puerto 80
dmesg | tail -20         # Errores kernel recientes

🔄 DevOps Trainee

# Contenedores y CI/CD
docker ps -a             # Todos los contenedores
kubectl get pods -A      # Pods Kubernetes
terraform plan          # Cambios previstos
git log --oneline -10   # Últimos 10 commits
jenkins-cli console     # Estado Jenkins
ansible-playbook --check # Dry-run Ansible

🛠️ Soporte TI

# Redes y conectividad
tcpdump -nn port 80     # Captura HTTP
nmap -sV 10.0.0.1       # Servicios y versiones
telnet google.com 443   # Test puerto
dig +short google.com   # DNS rápido
ping -c 4 8.8.8.8       # Conectividad básica
traceroute google.com   # Ruta red
netstat -rn             # Tabla rutas

🎯 5 preguntas que harán que te tomen en serio

  1. "¿Cuál es el procedimiento de cambio (change management)?" → Muestra que respetas procesos.
  2. "¿Dónde están los backups y cuándo fue la última restauración de prueba?" → Prioriza lo crítico.
  3. "¿Tenemos staging/QA o todo va directo a producción?" → Entiende el riesgo.
  4. "¿Quién es el on-call esta semana y cómo le contacto?" → Preparado para emergencias.
  5. "¿Hay algún sistema crítico que no se pueda reiniciar nunca?" → Conoce los puntos de dolor.

💀 Lo que NUNCA debes hacer (aunque te lo pidan)

  • rm -rf / o variantes → Usa trash-cli o mueve a /tmp primero
  • chmod 777 → Mejor chmod 755 o investiga por qué necesita 777
  • kill -9 PID → Primero kill -15, espera 30s, luego SIGKILL
  • Actualizar paquetes en prod → Sin probar en staging primero
  • Compartir credenciales por chat → Pide acceso individual siempre
  • Cambios en viernes después de las 15:00 → Tu fin de semana te lo agradecerá

📅 Timeline realista de tu primer mes

Semana 1: Observar y aprender

Objetivo: Cero cambios. 100% aprendizaje.

  • Acceso a sistemas (SSH, dashboards)
  • Conocer al equipo y responsabilidades
  • Leer documentación existente (si hay)
  • Crear inventario personal

Semana 2: Acceso y exploración

Objetivo: Acceso read-only a herramientas.

  • Monitorización, logs, tickets
  • Laboratorio personal (VMs locales)
  • Primer script de diagnóstico
  • Mapa mental de dependencias

Semana 3: Primer cambio controlado

Objetivo: Cambio pequeño + documentado.

  • Ticket formal con aprobación
  • Runbook con pasos exactos
  • Plan de rollback definido
  • Ventana de mantenimiento

Semana 4: Automatizar y destacar

Objetivo: Tu primer "éxito visible".

  • Automatizar tarea repetitiva
  • Documentar en wiki interna
  • Compartir con equipo
  • Pedir feedback constructivo

🔍 Comando que te da el 80% de la información en 5 minutos

#!/bin/bash
# diag.sh - Guarda como ~/bin/diag.sh y ejecuta en cada servidor (con permisos)
# ============================================================================
echo "========================================"
echo "DIAGNÓSTICO RÁPIDO - $(date)"
echo "Hostname: $(hostname -f)"
echo "========================================"

# 1. SISTEMA BÁSICO
echo -e "\n[1] SISTEMA BÁSICO"
echo "Uptime: $(uptime -p)"
echo "Kernel: $(uname -r)"
echo "OS: $(grep PRETTY_NAME /etc/os-release | cut -d= -f2 | tr -d '\"')"

# 2. RECURSOS
echo -e "\n[2] RECURSOS"
echo "Load average: $(uptime | awk -F'load average:' '{print $2}')"
echo "Memoria libre: $(free -h | awk '/^Mem:/ {print $4 " de " $2}')"
echo "Swap usado: $(free -h | awk '/^Swap:/ {print $3 " de " $2}')"
echo "Disco / uso: $(df -h / | awk 'NR==2 {print $5 " (" $3 "/" $2 ")"}')"

# 3. SERVICIOS CRÍTICOS
echo -e "\n[3] SERVICIOS FALLANDO"
failed=$(systemctl list-units --state=failed --no-legend | wc -l)
if [ "$failed" -gt 0 ]; then
    systemctl list-units --state=failed
else
    echo "✓ Ningún servicio fallando"
fi

# 4. CONECTIVIDAD
echo -e "\n[4] RED"
echo "IPs: $(hostname -I)"
echo "Gateway: $(ip route | grep default | awk '{print $3}')"
echo "DNS: $(grep nameserver /etc/resolv.conf | head -2 | awk '{print $2}' | tr '\n' ' ')"

# 5. SEGURIDAD
echo -e "\n[5] SEGURIDAD BÁSICA"
echo "Último login root: $(last root | head -1 | awk '{print $4" "$5" "$6" "$7}')"
echo "Usuarios conectados: $(who | wc -l)"

# 6. RECOMENDACIONES
echo -e "\n[6] RECOMENDACIONES INMEDIATAS"
if [ $(df / --output=pcent | tail -1 | tr -d '% ') -gt 80 ]; then
    echo "⚠️  Disco / >80% - Considera limpieza"
fi

if [ $(free | awk '/^Mem:/ {print int($3/$2*100)}') -gt 90 ]; then
    echo "⚠️  Memoria >90% - Revisa procesos"
fi

echo -e "\n========================================"
echo "Diagnóstico completo - $(date)"
echo "========================================"

Uso: chmod +x ~/bin/diag.sh y luego ./diag.sh > diagnostico_$(hostname).txt

🎁 Bonus: Checklist descargable para tu primer día

Guarda esto en ~/checklist_dia1.txt y márcalo conforme avances:

CHECKLIST - PRIMER DÍA COMO JUNIOR LINUX/DEVOPS
===============================================
[ ] 1. ACCESOS BÁSICOS
    [ ] Tengo usuario/contraseña corporativa
    [ ] Acceso a correo corporativo
    [ ] Acceso a chat interno (Slack/Teams)
    [ ] Acceso a gestor de tickets

[ ] 2. ACCESOS TÉCNICOS
    [ ] SSH a servidores (usuario limitado)
    [ ] Acceso read-only a dashboards
    [ ] Acceso a logs centralizados
    [ ] VPN corporativa (si aplica)

[ ] 3. PERSONAS CLAVE
    [ ] Conozco a mi manager/directo
    [ ] Conozco a mi buddy/mentor asignado
    [ ] Sé quién es el on-call esta semana
    [ ] Tengo teléfono de contacto para emergencias

[ ] 4. PROCESOS
    [ ] Entiendo el flujo de cambios (tickets)
    [ ] Sé cómo reportar un incidente
    [ ] Conozco las ventanas de mantenimiento
    [ ] Entiendo el organigrama del equipo

[ ] 5. SISTEMAS CRÍTICOS
    [ ] Sé qué sistemas NO se pueden reiniciar
    [ ] Conozco el plan de backup/DR
    [ ] Sé dónde está la documentación (si existe)
    [ ] Identifiqué al menos 2 "puntos de dolor"

[ ] 6. MI ENTORNO
    [ ] Portátil/estación funcionando
    [ ] IDE/editor configurado
    [ ] Claves SSH generadas
    [ ] Acceso a repositorios de código

FECHA: _________________
FIRMA: _________________

¿Preparado para tu primer día?

Recuerda: todos los seniors fueron juniors alguna vez. La diferencia está en cómo abordas el aprendizaje y la humildad para preguntar.

¿Te faltó algo en tu primer día? ¿O te tocó una situación peor?
¡Comenta y lo añadimos para ayudar al siguiente junior!

🏆 Reglas de oro que nadie te cuenta el primer día

  • Documenta TODO: Si no está documentado, no existe. Tu futuro yo te lo agradecerá.
  • El héroe de las 3 AM suele ser el mismo que no documentó ni probó el rollback.
  • Pregunta "¿por qué?" antes de "¿cómo lo arreglamos?".
  • Todo cambio = ticket + runbook + rollback plan.
  • Nunca hagas cambios un viernes después de las 15:00. Tu fin de semana vale más.
  • Respeta el horario de tus compañeros. Si es urgente, llama. Si no, espera.
  • Aprende a decir "no sé" seguido de "pero averiguo".

🗣️ Frases mágicas que te hacen quedar como senior desde el día 1

  • "¿Podemos probarlo primero en staging/QA?"
  • "Lo documento en la wiki para que no dependamos de memoria"
  • "He puesto Netdata/Grafana, mirad aquí el gráfico del problema"
  • "¿Tenéis plan de backup? ¿Lo hemos probado este mes?"
  • "Antes de reiniciar, ¿podemos ver los logs de los últimos 5 minutos?"
  • "¿Este cambio tiene ticket aprobado y ventana de mantenimiento?"
  • "He creado un runbook para esto por si me pasa a mí o a otro"

Comentarios

0 comentarios

Dejá tu comentario

Se publicará cuando sea aprobado.

Todavía no hay comentarios.