Monitorizar un proceso

De Recursos Educativos
Ir a la navegación Ir a la búsqueda

Pongamos que queremos monitorizar la CPU y memoria que consume un proceso Linux a lo largo del tiempo y no tenemos ninguna herramienta en el servidor, ni munin, ni Cacti, ni nada parecido. O puede que tengamos estas herramientas pero que necesitemos un gráfico con una granularidad de menos de 5 minutos.

Este método no tiene dependencias en el servidor en el que se ejecuta. Una vez generados los datos este ejemplo usa GNUplot para pintar el resultado, pero se podría usar una hoja de cálculo.

Recolectar los datos

En la maquina en la que corra el proceso NombreProceso creamos el siguiente script monitor.sh:

#!/bin/bash

while [[ today != doomsday ]] ;
do
  fichero=/tmp/NombreProceso.$(date +%Y-%m-%d).stats
  echo -n "$(date +%d-%H:%M:%S) " >> ${fichero}
  ps -e -o fname,pid,pcpu,etime,vsz,osz,rss | grep NombreProceso >> ${fichero}
  sleep 5 ;
done;

Y lo lanzamos asi:

nohup ./monitor.sh &

Pintarlos

En un GIF con GNUplot por ejemplo, seria:

gnuplot << __EOF__
set terminal gif
set style line 1 lt 1 lw 0
set style line 2 lt 2 lw 0
set style line 3 lt 3 lw 0
set style line 4 lt 4 lw 0
set style line 5 lt 5 lw 0
set style line 6 lt 6 lw 0
set style line 7 lt 7 lw 0
set style line 8 lt 8 lw 0
set xdata time
set timefmt "%d-%H:%M:%S"
set format x "%H:%M"
plot "$1"  using 1:4 with lines title "mbe-cache1" ls 1, "$2"  using 1:4 with lines title "mbe-cache2" ls 2, "$3"  using 1:4 with lines title "mbe-cache3" ls 3
quit
__EOF__