SAR: Informes de CPU, memoria y disco en GNU/Linux

SAR es una herramienta clásica de los sistemas UNIX y GNU/Linux. SAR significa “System Activity Report”, esto es, en el idioma de Cervantes y Cortázar: Informe de actividad del sistema.

Se utiliza para recopilar, informar y guardar datos de la CPU, memoria y lectura/escritura del disco. El comando SAR genera los informes sobre la marcha, además también se puede configurar para guardar dichos informes en ficheros de registro.

Informes de CPU, memoria y disco en GNU/Linux con SAR

Para la entrada voy a utilizar un sistema Linux Mint LMDE 3, pero los ejemplos deberían servir para la mayoría de las distribuciones que tengan esta herramienta de SYSSTAT instalada.

Si no lo tenemos instalada, realizamos el siguiente paso:

  1. #En sistemas RHEL, Centos y ScientificLinux
  2. sudo yum -y install sysstat
  3. # En sistemas Debian, Ubuntu o Linux Mint
  4. sudo apt install sysstat
  5. # En sistemas Fedora
  6. sudo dnf install sysstat
  7. # En sistemas SUSE o Opensuse mediante YAST o
  8. sudo zypper -i sysstat

Una vez instalado “sysstat”, se creará el servicio con el mismo nombre, que debemos añadir al inicio:

  1. systemctl enable sysstat
  2. systemctl start sysstat

En sistemas antiguos debemos utilizar “chkconfig”, por ejemplo:

  1. chkconfig –level 3 sysstat on
  2. service sysstat start

Además, este servicio añade una serie de tareas al crontab, lo podemos comprobar:

  1. root@turbolinuxpc:/etc/cron.d# cat sysstat 
  2. # The first element of the path is a directory where the debian-sa1
  3. # script is located
  4. PATH=/usr/lib/sysstat:/usr/sbin:/usr/sbin:/usr/bin:/sbin:/bin
  5.  
  6. # Activity reports every 10 minutes everyday
  7. 5-55/10 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1
  8.  
  9. # Additional run at 23:59 to rotate the statistics file
  10. 59 23 * * * root command -v debian-sa1 > /dev/null && debian-sa1 60

Por último que no menos importante en esta parte, habilitamos la recopilación de datos, modificando el fichero de configuración «/etc/default/sysstat»

  1. sudo vi /etc/default/sysstat
  2. cambiamos ENABLED="false" to ENABLED="true"

Modos de uso de SAR

Veamos algunos ejemplos, el primero el uso más básico, que nos muestre información del sistema cada 2 segundos hasta cinco veces:

  1. sar 2 5

Con el resultado:

  1. davidochobits@turbolinuxpc:~$ sar 2 5
  2. Linux 4.9.0-8-amd64 (turbolinuxpc)  12/03/19    _x86_64_    (8 CPU)
  3.  
  4. 19:00:00        CPU     %user     %nice   %system   %iowait    %steal     %idle
  5. 19:00:02        all      0,31      0,06      0,50      0,37      0,00     98,75
  6. 19:00:04        all      0,06      0,06      0,00      0,13      0,00     99,75
  7. 19:00:06        all      0,12      0,00      0,12      0,12      0,00     99,62
  8. 19:00:08        all      0,19      0,06      0,06      0,19      0,00     99,50
  9. 19:00:10        all      0,13      0,06      0,13      0,13      0,00     99,56
  10. Media:          all      0,16      0,05      0,16      0,19      0,00     99,442

Si el tanto por ciento de espera (iowait) de E/S es más que cero, durante un periodo largo, entonces podemos considerar que hay algún cuello de botella en el sistema de E/S, bien de disco bien de red.

Guardar la información de SAR en un fichero

Para logar el objetivo de guardar la información de SAR en un fichero, utilizando la salida standard, debemos utilizar el parámetro “-o

  1. sar 2 5 -o /tmp/datos > /dev/null 2>&1

Así más adelante podemos consultar la información:

  1. sar -f /tmp/datos

Podemos un vídeo generado con Peek, del que hablamos recientemente:

Visualizar fichero con SAR

Generar informe de memoria

Para generar un reporte extenso centrado en el uso de la memoria, usaremos el parámetro “-r”, como sigue:

  1. [root@localhost ~]# sar -r 2 5

Con el resultado:

  1. davidochobits@turbolinuxpc:~$ sar -r 2 5
  2. Linux 4.9.0-8-amd64 (turbolinuxpc)  12/03/19    _x86_64_    (8 CPU)
  3.  
  4. 19:02:05    kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
  5. 19:02:07      5583852   2525752     31,15     57608    883476   5079048     30,59   1619212    704296       124
  6. 19:02:09      5584072   2525532     31,14     57608    883576   5079048     30,59   1619016    704396       124
  7. 19:02:11      5583948   2525656     31,14     57608    883512   5079048     30,59   1619112    704328       124
  8. 19:02:13      5584072   2525532     31,14     57608    883512   5079048     30,59   1619112    704328       124
  9. 19:02:15      5584072   2525532     31,14     57608    883512   5079048     30,59   1619180    704328       124
  10. Media:        5584003   2525601     31,14     57608    883518   5079048     30,59   1619126    704335       12

“kbcommit” y “%commit” es la memoria general utilizada, incluida la memoria RAM y la transaccional o SWAP

Crear reporte de los dispositivos de bloque

Si queremos crear un informe dedicado a los dispositivos de bloque, esto es, mayormente los discos, debemos utilizar el parámetro “-d” Si además le añadimos el parámetro “-p”, la salida será mucho más legible.

  1. sar -d -p 2 4

Veamos el resultado:

  1. davidochobits@turbolinuxpc:~$ sar -d -p 2 4
  2. Linux 4.9.0-8-amd64 (turbolinuxpc)  12/03/19    _x86_64_    (8 CPU)
  3.  
  4. 19:03:18          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
  5. 19:03:20          sda      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
  6.  
  7. 19:03:20          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
  8. 19:03:22          sda      2,50      0,00    140,00     56,00      0,00      0,00      0,00      0,00
  9.  
  10. 19:03:22          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
  11. 19:03:24          sda      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
  12.  
  13. 19:03:24          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
  14. 19:03:26          sda      0,00      0,00      0,00      0,00      0,00      0,00      0,00      0,00
  15.  
  16. Media:            DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
  17. Media:            sda      0,62      0,00     35,00     56,00      0,00      0,00      0,00      0,00

Informe con estadísticas de red

Si utilizamos el parámetro “-n”, generaremos un reporte con toda la actividad de la red reciente:

Por ejemplo:

  1. sar -n ALL

Consultar los registros de SAR

Los registros por defecto se almacenan en la ruta “/var/log/sysstat”, utilizando el valor “-f”, podemos leer los ficheros de registro:

  1. sar -r -f /var/log/sysstat/

Fuentes consultadas:

Linuxtechi.com – Generate CPU, Memory and I/O report using SAR command