sysstat, la colección de herramientas de monitorización de rendimiento
El paquete sysstat es una colección de herramientas de monitorización de rendimiento. Nos puede proporcionar datos instantáneos de rendimiento, así como almacenarlos como históricos para nuestra futura referencia. Especialmente en entornos de servidor, sus datos nos proporcionan información muy valiosa sobre las posibles carencias y cuellos de botella de nuestro sistema.
Las herramientas que incluye son:
- iostat(1) reports CPU statistics and input/output statistics for devices, partitions and network filesystems.
- mpstat(1) reports individual or combined processor related statistics.
- pidstat(1) reports statistics for Linux tasks (processes) : I/O, CPU, memory, etc.
- sar(1) collects, reports and saves system activity information (CPU, memory, disks, interrupts, network interfaces, TTY, kernel tables,etc.)
- sadc(8) is the system activity data collector, used as a backend for sar.
- sa1(8) collects and stores binary data in the system activity daily data file. It is a front end to sadc designed to be run
from cron.- sa2(8) writes a summarized daily activity report. It is a front end to sar designed to be run from cron.
- sadf(1) displays data collected by sar in multiple formats (CSV, XML, etc.) This is useful to load performance data into a database, or import them in a spreadsheet to make graphs.
En Debian y Ubuntu, tras instalar el paquete (apt-get install sysstat
), ya podemos ver datos instantáneos. Todos los comandos aceptan como parámetros:
[ interval [ count ] ]
con los que le decimos al comando cuántos valores queremos y cada cuántos segundos. Por ejemplo, 5 valores de uso de CPU separados un segundo:
$ sar 1 5 Linux 2.6.27-7-generic (sistema) 11/08/2008 _x86_64_ 10:17:37 AM CPU %user %nice %system %iowait %steal %idle 10:17:38 AM all 2.45 0.00 1.47 0.00 0.00 96.08 10:17:39 AM all 1.96 0.00 0.98 0.00 0.00 97.06 10:17:40 AM all 11.17 0.00 2.91 0.00 0.00 85.92 10:17:41 AM all 13.11 0.00 1.94 0.00 0.00 84.95 10:17:42 AM all 3.37 0.00 2.88 0.00 0.00 93.75 Average: all 6.42 0.00 2.04 0.00 0.00 91.54
5 valores de uso de memoria separados 10 segundos:
$ sar -r 10 5 Linux 2.6.27-7-generic (sistema) 11/08/2008 _x86_64_ 10:18:29 AM kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad 10:18:39 AM 2651048 1404992 34.64 4840 167752 494136 30144 5.75 15140 10:18:49 AM 2382488 1673552 41.26 4844 167752 494136 30144 5.75 15172 10:18:59 AM 2114128 1941912 47.88 4844 167752 494136 30144 5.75 15172 10:19:09 AM 1844028 2212012 54.54 4864 169372 494136 30144 5.75 15172 10:19:19 AM 1572116 2483924 61.24 4888 172648 494136 30144 5.75 15204 Average: 2112762 1943278 47.91 4856 169055 494136 30144 5.75 15172
Uso de los diferentes procesadores del sistema:
$ mpstat -P ALL Linux 2.6.27-7-generic (sistema) 11/08/2008 _x86_64_ 10:22:07 AM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s 10:22:07 AM all 8.30 0.57 1.62 1.12 0.05 0.10 0.00 88.24 571.13 10:22:07 AM 0 8.40 0.14 1.30 0.26 0.00 0.00 0.00 89.90 0.95 10:22:07 AM 1 8.20 0.99 1.93 1.95 0.11 0.20 0.00 86.62 263.10
Porcentaje de uso de los procesos más activos:
$ pidstat 1 2 Linux 2.6.27-7-generic (sistema) 11/08/2008 _x86_64_ 10:23:26 AM PID %user %system %CPU CPU Command 10:23:27 AM 6143 0.98 0.98 1.96 1 Xorg 10:23:27 AM 6713 0.98 0.00 0.98 1 compiz.real 10:23:27 AM 6881 0.98 0.98 1.96 0 firefox 10:23:27 AM 9046 1.96 0.00 1.96 1 gnome-terminal 10:23:27 AM 12769 0.00 1.96 1.96 0 pidstat 10:23:27 AM PID %user %system %CPU CPU Command 10:23:28 AM 6143 3.00 0.00 3.00 1 Xorg 10:23:28 AM 6779 0.00 2.00 2.00 1 multiload-apple 10:23:28 AM 6881 1.00 0.00 1.00 0 firefox 10:23:28 AM 12769 2.00 2.00 4.00 0 pidstat Average: PID %user %system %CPU CPU Command Average: 6143 1.98 0.50 2.48 - Xorg Average: 6713 0.50 0.00 0.50 - compiz.real Average: 6779 0.00 0.99 0.99 - multiload-apple Average: 6881 0.99 0.50 1.49 - firefox Average: 9046 0.99 0.00 0.99 - gnome-terminal Average: 12769 0.99 1.98 2.97 - pidstat
Las variables que pueden ser monitorizadas son muchas y, a menudo, los comandos (especialmente iostat
, mpstat
, y sar
) se solapan en cuanto a sus posibilidades. Tendremos que navegar por sus páginas de man para poder descubrirlas todas, que son muchas.
Pero en cualquier caso, los valores instantáneos no es lo que más nos puede interesar. Los de CPU y memoria los podemos ver también en el top
, vmstat
o free
. Lo más atractivo de estas herramientas es la posibilidad recoger periódicamente datos y guardarlos en ficheros de históricos.
Para comenzar a hacerlo, hemos de editar el fichero /etc/default/systat
y poner la variable ENABLED
a “true
“:
# Should sadc collect system activity informations? Valid values # are "true" and "false". Please do not put other values, they # will be overwritten by debconf! ENABLED="true"
Y así conseguimos que las entradas de cron
del sysstat
comiencen a funcionar:
$ cat /etc/cron.d/sysstat # Global variables: # # our configuration file DEFAULT=/etc/default/sysstat # default setting, overriden in the above file ENABLED=false SA1_OPTIONS="" # Activity reports every 10 minutes everyday 5-55/10 * * * * root [ -x /usr/lib/sysstat/sa1 ] && { [ -r "$DEFAULT" ] && . "$DEFAULT" ; [ "$ENABLED" = "true" ] && exec /usr/lib/sysstat/sa1 $SA1_OPTIONS 1 1 ; } # Additional run at 23:59 to rotate the statistics file 59 23 * * * root [ -x /usr/lib/sysstat/sa1 ] && { [ -r "$DEFAULT" ] && . "$DEFAULT" ; [ "$ENABLED" = "true" ] && exec /usr/lib/sysstat/sa1 $SA1_OPTIONS 60 2 ; }
El script /usr/lib/sysstat/sa1
, que se ejecuta por defecto cada 10 minutos, llama al comando sadc
, que escribe en formato binario los datos de rendimiento actuales de todas la áreas (CPU, memoria, disco, red, etc.) en el fichero /var/log/sysstat/saXX
, donde XX indica el día del mes en el que estamos. Por defecto, se recogen datos de los últimos 7 días:
-rw-r--r-- 1 root root 5640 2008-11-01 00:15 sa01 -rw-r--r-- 1 root root 42104 2008-11-04 00:00 sa03 -rw-r--r-- 1 root root 264840 2008-11-05 00:00 sa04 -rw-r--r-- 1 root root 264840 2008-11-06 00:00 sa05 -rw-r--r-- 1 root root 264840 2008-11-07 00:00 sa06 -rw-r--r-- 1 root root 265304 2008-11-08 00:00 sa07 -rw-r--r-- 1 root root 126240 2008-11-08 11:25 sa08 -rw-r--r-- 1 root root 264840 2008-11-01 00:00 sa31
El número de días a retener se configura en el otro script, el /usr/lib/sysstat/sa2
, que hace dos tareas. Por un lado escribe un resumen diario de los parámetros de rendimiento en ficheros de texto plano con nombre sarXX
:
-rw-r--r-- 1 root root 43760 2008-11-04 07:38 sar03 -rw-r--r-- 1 root root 280091 2008-11-05 07:37 sar04 -rw-r--r-- 1 root root 280091 2008-11-06 07:37 sar05 -rw-r--r-- 1 root root 280091 2008-11-07 07:37 sar06 -rw-r--r-- 1 root root 280124 2008-11-08 07:36 sar07 -rw-r--r-- 1 root root 280092 2008-10-31 07:38 sar30
y, por el otro, elimina los ficheros saXX
y sarXX
de antigüedad anterior a la establecida, algo que se configura en la variable:
HISTORY=7
que aparece en el propio script. Éste se ejecuta diariamente desde el /etc/cron.daily/sysstat
. Aunque el sistema no estuviera encendido a la hora de ejecutar el cron diario (configurada en /etc/crontab
), el anacron se ocupa de que las tareas pendientes se ejecuten cuando el sistema arranque la próxima vez.
Tras recoger datos varios días, ya podemos, por ejemplo, ver los datos de memoria de los últimas horas:
10:55:01 AM kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad 11:05:02 AM 57092 426340 88.19 119088 83892 524232 48 0.01 0 11:15:01 AM 56968 426464 88.22 119260 83900 524232 48 0.01 0 11:25:01 AM 56720 426712 88.27 119452 83916 524232 48 0.01 0 11:35:01 AM 55340 428092 88.55 119656 83976 524232 48 0.01 0 11:45:01 AM 55092 428340 88.60 119856 83992 524232 48 0.01 0 11:55:01 AM 54968 428464 88.63 120016 84004 524232 48 0.01 0 Average: 76611 406821 84.15 111580 80913 524232 48 0.01 0
o ver los datos de CPU de hace un par de días:
$ sar -f /var/log/sysstat/sa05 09:55:01 PM CPU %user %nice %system %iowait %steal %idle 10:05:01 PM all 18.64 0.00 0.85 0.28 0.00 80.23 10:15:01 PM all 0.73 0.00 0.31 0.27 0.00 98.69 10:25:01 PM all 0.67 0.00 0.30 0.16 0.00 98.87 10:35:01 PM all 41.62 0.00 1.16 0.18 0.00 57.04 10:45:01 PM all 16.30 0.00 0.88 0.21 0.00 82.61 10:55:01 PM all 1.17 0.00 0.33 0.18 0.00 98.31 11:05:01 PM all 0.86 0.00 0.44 0.14 0.00 98.55 11:15:01 PM all 0.66 0.00 0.21 0.18 0.00 98.95 11:25:01 PM all 0.67 0.00 0.33 0.25 0.00 98.75 11:35:01 PM all 0.84 0.00 0.45 0.20 0.00 98.51 11:45:01 PM all 0.66 0.00 0.31 0.16 0.00 98.87 11:55:01 PM all 1.47 0.00 0.60 6.97 0.00 90.95 11:59:01 PM all 0.71 0.00 0.22 0.23 0.00 98.85 12:00:01 AM all 0.65 0.00 0.20 0.30 0.00 98.85 Average: all 1.32 0.07 0.37 0.39 0.00 97.86
Para más hacer aún más útiles los datos recogidos, el comando sadf
nos permite exportar los datos a un formato fácilmente importable por una base de datos, como el CVS (con puntos y comas como separador en lugar de comas) o el XML.
En este ejemplo, obtenemos los datos de memoria indicándole a sadf
qué parámetros (-r
) pasarle a sar
:
$ sadf -d /var/log/sysstat/sa08 -- -r # hostname;interval;timestamp;kbmemfree;kbmemused;%memused;kbbuffers;kbcached;kbswpfree;kbswpused;%swpused;kbswpcad sistema;602;2008-11-08 10:15:01 UTC;2515980;1540060;37.97;28444;665036;490280;34000;6.49;20432 sistema;601;2008-11-08 10:25:01 UTC;2508632;1547408;38.15;28892;666912;490280;34000;6.49;20432 sistema;601;2008-11-08 10:35:01 UTC;2506844;1549196;38.19;29312;667032;491196;33084;6.31;20508 sistema;602;2008-11-08 10:45:01 UTC;2502728;1553312;38.30;29948;669904;491212;33068;6.31;20492 sistema;602;2008-11-08 10:55:01 UTC;2496716;1559324;38.44;30572;671248;491216;33064;6.31;20488 sistema;602;2008-11-08 11:05:01 UTC;2493120;1562920;38.53;31172;671912;491216;33064;6.31;20616
Si exportamos a XML, no podemos especificar un área, sino que se exportan todas las métricas del fichero convenientemente etiquetadas:
$ sadf -x /var/log/sysstat/sa08
Y para completar del todo al paquete sysstat
, también disponemos del isag (Interactive System Activity Grapher), un programa X que se instala aparte y que nos permitirá crear gráficas de los datos que tenemos en el sistema. Si lo instalamos, lo arrancamos, elegimos uno de los ficheros de rendimiento (tenemos que hacer click sobre el desplegable que pasa un poco desapercibido a la derecha de donde pone “No File”) y ya podemos analizar los datos de forma extraordinariamente visual:
:wq
¡¡Otro pedazo de artículo!! estas que te sales
Muy interesantes estas herramientas Super Coco
. Y nunca está de menos conocerlas para si hace falta, usarlas un dia 
Saludos
@trinux, @Sagman ¡Gracias!
¿Alguien se ha encontrado con incongruencias entre la información mostrada entre sar y vmstat?
Lo único que he podido comprobar es que sar muchas veces…. no muestra la realidad
@RuBiCK Pues yo no me había fijado en tales incongruencias, pero me parecería un poco raro, porque ambos obtienen las métricas de
/proc
, de modo que las diferencias hay de venir del procesado interno o de la interpretación de las métricas… ¡o de algún bug!Mira tambien dstat! (dstat – versatile tool for generating system resource statistics)
@Sabueso ¡Gracias por el consejo! ¡Me lo apunto!
Saludos y muchas gracias si que es bueno el articulo.
en una de esas nos cuentas a algo sobre estadisticas de consumo de anchos de banda y trafico en una red
gracias!