Sarviewer: monitorización y visualización del rendimiento del sistema con sar + gnuplot

El paquete sysstat nos proporciona en Linux la interesante herramienta sar para monitorizar nuestro sistema: uso de CPU, RAM, interfaces de red, lectura/escritura en discos… Esto, unido a las extensas posibilidades que ofrece gnuplot para crear gráficas a partir de los datos obtenidos con sar, nos ofrece un interesante combo.

En mi cuenta de GitHub he subido recientemente un repo llamado sarviewer con un conjunto de scripts en bash y gnuplot para tal menester. La estructura es la siguiente:

  • Directorio data/ → almacenamiento de los datos obtenidos por sar
  • Directorio graphs/ → donde se almacenan los gráficas (en formato PNG) generadas por gnuplot
  • Directorio plotters/ → scripts de gnuplot
  • data_collector.sh → para recolectar datos con sar. El script nos preguntará el n.º de samples a tomar y el intervalo entre ellos. Útil para monitorizar el uso de recursos durante tests de estrés o bien si sólo queremos recopilar datos durante un breve período de tiempo.
  • system_data_reader.sh → para leer datos ya generados por el demonio sar. Éste debe haberse habilitado previamente en /etc/default/sysstat
  • plotter.sh → llama a los scripts dentro de plotters/ para generar las gráficas

He creado el repo con la intención de darle dos usos principalmente. En función de ello podremos utilizar un script u otro.

Obteniendo datos puntuales con data_collector.sh

Imaginemos que en un momento dado queremos ejecutar una aplicación y ver qué recursos consume o de qué manera impacta en nuestro sistema. Utilizaríamos entonces el script data_collector.sh especificando cuantas muestras queremos obtener y el intervalo de tiempo entre ellas. Una vez termina la recolección, este script llama a su vez a plotter.sh para generar las gráficas.

Podemos cancelar el colector en cualquier momento, aunque si lo hacemos tendremos que lanzar el script plotter.sh para generar las gráficas a partir de los datos recopilados hasta entonces.

Script system_data_reader.sh para leer los datos generados por el demonio sar

De esta manera podemos tener una visión general del rendimiento y uso de recursos de una máquina un día en concreto, de manera retroactiva. Para ello el script system_data_reader.sh nos da la posibilidad de leer cualquier fichero sa* almacenado en /var/log/sysstat para parsear los datos. Este script también llama a plotter.sh cuando ha terminado de tratar los datos para generar las gráficas correspondientes.

Gráficas de ejemplo

Algunos ejemplos de las gráficas generadas:

Como siempre, si os es útil podéis utilizar el repo y modificarlo para vuestras necesidades. Las sugerencias también son bienvenidas 😉