Última actualización: 2026-05-05
Prometheus: http://192.168.1.12:9090
Windows Exporter: http://localhost:9182/metrics


SINTAXIS BÁSICA PROMQL

OperadorDescripciónEjemplo
rate()Tasa de cambio por segundorate(metric[5m])
irate()Tasa instantánea (últimos 2 puntos)irate(metric[5m])
avg()Promedioavg by(instance) (metric)
sum()Suma totalsum(metric)
max() / min()Valor máximo/mínimomax(metric)
count()Contar seriescount(metric)
changes()Cuántas veces cambióchanges(metric[1h])
increase()Incremento total en períodoincrease(metric[1h])
by()Agrupar por etiquetaavg by(instance) (metric)
without()Excluir etiquetaavg without(cpu) (metric)

Rangos de tiempo: [1m], [5m], [15m], [1h], [24h]


1. MÉTRICAS DE CPU

Uso de CPU (%)

100 - (avg by(instance) (irate(windows_cpu_time_total{mode="idle"}[5m])) * 100)

Explicación: Resta el tiempo idle de 100% para obtener uso real.
Umbral alerta: >80% warning, >95% critical
Posible causa: Malware, minería, proceso descontrolado


CPU por núcleo

100 - (irate(windows_cpu_time_total{mode="idle"}[5m]) * 100)

Explicación: Muestra uso de cada core individualmente.
Útil para: Detectar si un proceso usa solo 1 core o todos


CPU por modo (user, kernel, idle)

irate(windows_cpu_time_total[5m])

Explicación: Desglosa tiempo en modo usuario vs kernel.
Anomalía: Mucho tiempo en kernel = posible rootkit o driver malicioso


Top procesos por CPU

topk(10, rate(windows_process_cpu_time_total[5m]))

Explicación: Los 10 procesos con más CPU en últimos 5 min.
Útil para: Identificar proceso específico consumiendo recursos


2. MÉTRICAS DE MEMORIA

Memoria usada (%)

(1 - (windows_os_physical_memory_free_bytes / windows_os_visible_memory_total_bytes)) * 100

Explicación: Calcula porcentaje de memoria física usada.
Umbral alerta: >85% warning, >95% critical
Posible causa: Memory leak, ransomware cifrando,太多 aplicaciones


Memoria disponible (GB)

windows_os_physical_memory_free_bytes / 1073741824

Explicación: Convierte bytes a GB para lectura fácil.
Útil para: Ver tendencia de consumo a lo largo del tiempo


Top procesos por memoria

topk(10, windows_process_private_bytes)

Explicación: Los 10 procesos con más memoria privada.
Anomalía: Proceso desconocido con >1GB = investigar


Memoria de página (page file) usada

windows_os_page_file_size - windows_os_page_file_free

Explicación: Cuánto swap/pagefile está en uso.
Anomalía: Uso alto de pagefile = memoria física insuficiente


3. MÉTRICAS DE DISCO

Espacio en disco usado (%)

(1 - (windows_logical_disk_free_bytes / windows_logical_disk_size_bytes)) * 100

Explicación: Porcentaje de disco ocupado por volumen.
Umbral alerta: >85% warning, >95% critical
Posible causa: Logs creciendo, ransomware cifrando, backups acumulados


Espacio libre por volumen

windows_logical_disk_free_bytes{volume="C:"} / 1073741824

Explicación: GB libres en disco C:.
Útil para: Monitorear disco específico


Operaciones de disco por segundo

rate(windows_logical_disk_disk_reads_total[5m])
rate(windows_logical_disk_disk_writes_total[5m])

Explicación: IOPS (lecturas/escrituras por segundo).
Anomalía: Pico de escrituras = posible ransomware o exfiltración


Tiempo de espera de disco

rate(windows_logical_disk_disk_read_seconds_total[5m])
rate(windows_logical_disk_disk_write_seconds_total[5m])

Explicación: Cuánto tiempo pasa el disco leyendo/escribiendo.
Anomalía: >50% del tiempo = disco saturado o fallando


4. MÉTRICAS DE RED

Tráfico de red (bytes/s)

rate(windows_net_bytes_total[5m])

Explicación: Bytes transmitidos/recibidos por segundo por interfaz.
Umbral alerta: >100MB/s sostenido = investigar
Posible causa: Exfiltración de datos, DDoS, backup en red


Tráfico por interfaz específica

rate(windows_net_bytes_total{nic="Ethernet"}[5m])

Explicación: Filtra por nombre de interfaz de red.
Útil para: Monitorear NIC específica (ej: no contar localhost)


Paquetes con error

rate(windows_net_packets_outbound_errors_total[5m])
rate(windows_net_packets_received_errors_total[5m])

Explicación: Errores de red por segundo.
Anomalía: >10 errores/s = problema de red o ataque


Conexiones TCP establecidas

windows_tcp_connections{state="established"}

Explicación: Número de conexiones TCP activas.
Umbral alerta: >100 conexiones = posible botnet o C2
Posible causa: Malware comunicándose con servidor remoto


Conexiones por estado

windows_tcp_connections

Explicación: Todas las conexiones agrupadas por estado (ESTABLISHED, SYN_SENT, TIME_WAIT, etc.)
Anomalía: Muchas SYN_SENT = posible escaneo de puertos saliente


5. MÉTRICAS DE SEGURIDAD

Windows Defender estado

windows_service_state{name="WinDefend"}
windows_service_state{name="WinDefend"} == 1

Explicación: Estado del servicio Windows Defender.
Valores: 1=Stopped, 2=Running, 3=Paused
Alerta CRÍTICA: == 2 (detenido) = posible compromiso


Firewall estado

windows_service_state{name=~".*firewall.*"}

Explicación: Estado de servicios de firewall.
Alerta CRÍTICA: == 2 (detenido) = sistema expuesto


Servicios de seguridad detenidos

windows_service_state{name=~".*(defend|security|firewall|update).*"} == 2

Explicación: Detecta si cualquier servicio de seguridad está parado.
Posible causa: Atacante deshabilitó protecciones


Intentos de login fallidos

rate(windows_logon_total{status="failure"}[5m])

Explicación: Logins fallidos por segundo.
Umbral alerta: >5/s = posible ataque de fuerza bruta
Requiere: WMI Exporter con collector logon habilitado


Sesiones activas de administrador

windows_logon_sessions{username=~".*admin.*"}
# Muestra sesiones activas (no fallidos, pero útil)
count(windows_logon_session)

Explicación: Sesiones activas de usuarios admin.
Anomalía: Admin logueado en horario no laboral = investigar


Sistema reiniciado recientemente

changes(windows_system_system_up_time[1h]) > 0
time() - windows_system_system_up_time_seconds < 300

Explicación: Detecta si el uptime cambió en última hora (reinicio).
Posible causa: Atacante reinició para persistencia o cubrir huellas


6. MÉTRICAS DE PROCESOS

Procesos activos totales

count(windows_process_start_time_seconds_total)

Explicación: Número total de procesos corriendo.
Anomalía: >200 procesos = posible infección o malware


Pico de creación de procesos

rate(windows_process_start_time_seconds_total[5m])

Explicación: Procesos nuevos iniciados por segundo.
Umbral alerta: >10 procesos/s = posible propagación de malware
Posible causa: Gusanos, ransomware, script malicioso


Proceso específico por nombre

windows_process_start_time_seconds_total{process_name="powershell.exe"}

Explicación: Detecta si PowerShell está corriendo.
Anomalía: PowerShell a las 3 AM = investigar


Procesos sospechosos comunes

# PowerShell
windows_process_name{process_name="powershell.exe"}
count(windows_process_info{process_name="powershell.exe"})
 
# CMD
windows_process_name{process_name="cmd.exe"}
 
# WScript/VScript
windows_process_name{process_name=~".*wscript.*|.*cscript.*"}
 
# Certutil (usado para descargar malware)
windows_process_name{process_name="certutil.exe"}
 
# Bitsadmin (usado para exfiltración)
windows_process_name{process_name="bitsadmin.exe"}

Explicación: Detecta procesos comúnmente abusados por atacantes.
Nota: No son maliciosos per se, pero requieren contexto


Proceso con CPU elevada

rate(windows_process_cpu_time_total[5m]) > 0.8

Explicación: Procesos usando >80% CPU.
Posible causa: Minería de criptomonedas, malware


Proceso con memoria elevada

windows_process_private_bytes > 1073741824

Explicación: Procesos usando >1GB de memoria.
Posible causa: Memory leak, ransomware cifrando en memoria


7. QUERIES DE DETECCIÓN DE AMENAZAS

Posible minería de criptomonedas

# CPU sostenida >90% por 30 minutos
avg_over_time(100 - (avg by(instance) (irate(windows_cpu_time_total{mode="idle"}[5m])) * 100)[30m:]) > 90

Indicadores: CPU alta constante, mismo proceso todo el tiempo, temperatura alta


Posible ransomware cifrando

# Alta actividad de disco + CPU + red
(rate(windows_logical_disk_disk_writes_total[5m]) > 1000) 
and 
(100 - (avg by(instance) (irate(windows_cpu_time_total{mode="idle"}[5m])) * 100) > 50)

Indicadores: Escrituras masivas, CPU alta, archivos .encrypted apareciendo


Posible exfiltración de datos

# Tráfico de red saliente anormalmente alto
rate(windows_net_bytes_total[5m]) > 100000000

Indicadores: >100MB/s sostenido, horario no laboral, destino IP desconocido


Posible botnet/C2 communication

# Muchas conexiones establecidas + tráfico constante
windows_tcp_connections{state="established"} > 100

Indicadores: >100 conexiones, mismas IPs externas, puertos inusuales


Posible ataque de fuerza bruta

# Múltiples logins fallidos
rate(windows_logon_total{status="failure"}[5m]) > 5

Indicadores: >5 intentos/s, misma cuenta objetivo, origen IP externo


Posible movimiento lateral

# Nuevas conexiones SMB/RDP
windows_tcp_connections{state="established",destination_port="445"} > 10
windows_tcp_connections{state="established",destination_port="3389"} > 5

Indicadores: Conexiones a múltiples hosts internos, horario no laboral


8. QUERIES DE RENDIMIENTO (BASELINE)

CPU promedio (última hora)

avg_over_time(100 - (avg by(instance) (irate(windows_cpu_time_total{mode="idle"}[5m])) * 100)[1h:])

Útil para: Establecer baseline normal de tu sistema


Memoria promedio (última hora)

avg_over_time((1 - (windows_os_physical_memory_free_bytes / windows_os_visible_memory_total_bytes)) * 100[1h:])

Útil para: Detectar desviación del consumo normal


Sistema más lento de lo normal

# CPU actual vs promedio histórico
(100 - (avg by(instance) (irate(windows_cpu_time_total{mode="idle"}[5m])) * 100)) 
- 
avg_over_time(100 - (avg by(instance) (irate(windows_cpu_time_total{mode="idle"}[5m])) * 100)[24h:]) > 30

Explicación: CPU actual es >30% más alta que el promedio de 24h


9. QUERIES PARA DASHBOARDS

Resumen del sistema (single stat)

# CPU Usage %
100 - (avg by(instance) (irate(windows_cpu_time_total{mode="idle"}[5m])) * 100)
 
# Memory Usage %
(1 - (windows_os_physical_memory_free_bytes / windows_os_visible_memory_total_bytes)) * 100
 
# Disk Usage % C:
(1 - (windows_logical_disk_free_bytes{volume="C:"} / windows_logical_disk_size_bytes{volume="C:"})) * 100
 
# Total Processes
count(windows_process_start_time_seconds_total)
 
# Active TCP Connections
sum(windows_tcp_connections{state="established"})

Gráfico de líneas (time series)

# CPU por núcleo
100 - (irate(windows_cpu_time_total{mode="idle"}[5m]) * 100)
 
# Memoria usada vs libre
windows_os_physical_memory_free_bytes
windows_os_visible_memory_total_bytes - windows_os_physical_memory_free_bytes
 
# Tráfico de red (in/out)
rate(windows_net_bytes_received_total[5m])
rate(windows_net_bytes_transmitted_total[5m])

Tabla (top N)

# Top 10 procesos por CPU
topk(10, rate(windows_process_cpu_time_total[5m]))
 
# Top 10 procesos por memoria
topk(10, windows_process_private_bytes)
 
# Top 10 discos por uso
topk(10, (1 - (windows_logical_disk_free_bytes / windows_logical_disk_size_bytes)) * 100)

10. COMANDOS DE DEPURACIÓN

Ver todas las métricas disponibles

http://localhost:9182/metrics

Ver métricas de Prometheus

up
prometheus_tsdb_storage_blocks_bytes
prometheus_http_requests_total

Ver estado de targets

http://192.168.1.12:9090/targets

Ver alertas activas

ALERTS
ALERTS{alertstate="firing"}

Ver estado de reglas

http://192.168.1.12:9090/rules

RECURSOS ADICIONALES


QUICK REFERENCE

Detección rápida de amenazas:

AmenazaQueryUmbral
MineríaCPU >90% por 30minavg_over_time(...[30m:]) > 90
RansomwareEscrituras + CPU altasdisk_writes > 1000 AND CPU > 50%
ExfiltraciónRed >100MB/srate(net_bytes[5m]) > 100000000
BotnetConexiones >100tcp_connections{established} > 100
Fuerza brutaLogins fallidos >5/srate(logon_total{failure}[5m]) > 5
Defender desactivadoServicio detenidoservice_state{name="WinDefend"} == 2

Autor: Sammi De Blas
Propósito: Cybersecurity Monitoring Lab
Contacto: analista@sammideblas.com