Top en modo batch / segundo plano: Métricas y monitorización de procesos

Top permite mediante su modo bath redirigir su salida a un fichero u otro comando. Esto sumado a la posibilidad de dejarlo funcionando por un tiempo determinado en segundo plano, facilita la obtención de métricas y monitorización de procesos cuando no se está presente o simplemente se quiere dejar constancia de algún evento.

Es una solución puntual que se puede aplicar cuando todavía no se tienen instaladas otras herramientas en el equipo como telegraf, icinga, cacti, collectd, etc y se requiere analizar algún tipo de problema. Es útil por ejemplo dejarlo por la noche mediante un cronjob esperando la ejecución / métricas de X programa o tarea, registrar cuando han empezado las interrupciones de entrada y salida, qué procesos están generando picos de CPU a las 5 de la mañana, etc.

Se muestran a continuación algunos ejemplos de uso. El comando “ts” del paquete more-utils permite que se tenga un registro de la fecha en todas las lineas de la salida, útil si se filtra mediante grep u otra aplicación la salida del comando top.

Registrar métricas de top filtrando con grep.

top -d 1 -b -n 999999999 -c | ts | grep "%Cp[u]" 

oct 31 20:22:29 %Cpu(s):  2,3 us,  1,5 sy,  0,0 ni, 96,2 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st
oct 31 20:22:30 %Cpu(s):  0,2 us,  0,4 sy,  0,0 ni, 99,4 id,  0,0 wa,  0,0 hi,  0,0 si,  0,0 st
oct 31 20:22:31 %Cpu(s):  0,5 us,  6,4 sy,  0,0 ni, 99,0 id,  0,0 wa,  0,0 hi,  0,1 si,  0,0 st
oct 31 20:22:32 %Cpu(s):  1,2 us,  6,2 sy,  0,0 ni, 99,5 id,  10,4 wa,  0,0 hi,  0,0 si,  0,0 st
oct 31 20:22:33 %Cpu(s):  2,2 us,  0,2 sy,  0,0 ni, 99,4 id,  11,0 wa,  0,1 hi,  0,0 si,  0,0 st
oct 31 20:22:34 %Cpu(s):  1,4 us,  0,2 sy,  0,0 ni, 99,4 id,  08,0 wa,  0,0 hi,  0,0 si,  0,0 st

Dejar en segundo plano el comando top redirigiendo la salida a un fichero y filtrando con grep comandos que tenga la cadena de texto “busindre.com” y “nmap”.

# -d 1 -n 999999999 (Cada segundo y durante 999999999 segundos).
# -c Argumentos de los comandos.
# El comando ts permite introducir la fecha.
# COLUMNS=512 Especifica un "Screen width" que permite ver el comando completo (top soporta máximo 512 columnas).
 
COLUMNS=512 top -d 1 -b -n 999999999 -c | ts | grep -i "busindre.c[o]m\|nm[a]p" > fichero 2>&1 &
 
# Fichero (No se redirecciona al fichero inmediatamente).
oct 29 22:03:36  5205 XXX     20   0   17292   4352   3748 S   0,0   0,0   0:00.05 ping busindre.com
oct 29 22:03:37  5205 XXX     20   0   17292   4352   3748 S   0,0   0,0   0:00.05 ping busindre.com
 
oct 29 22:07:06  7807 XXX     20   0   26140  12716   5900 S   3,0   0,1   0:00.03 nmap -Pn -p 665-8968 8.8.8.8
oct 29 22:07:07  7807 XXX     20   0   26140  12716   5900 S   0,0   0,1   0:00.03 nmap -Pn -p 665-8968 8.8.8.8
oct 29 22:07:08  7807 XXX     20   0   26140  12716   5900 S   0,0   0,1   0:00.03 nmap -Pn -p 665-8968 8.8.8.8

Simular visualmente el funcionamiento de top interpretando un fichero creado anteriormente con su opción -b “Batch-mode”. Para ello se puede utilizar el comando “less” y su función de búsqueda (/palabra).

top -d 1 -b -n 300 -c > fichero   # Redireccionamos la salida de un top de 5 Minutos con frecuencia de un segundo.
less fichero   # Escribimos lo siguiente "/load average" para localizar la cabecera de top. Cada vez que se pulse la letra "n" veremos la siguiente instantánea contenida en "fichero". Permitiendo avanzar rápidamente en el tiempo si la dejamos pulsada