Bienvenidos a un nuevo post en ByteMind, en este caso vamos a mostrar varios ejemplos prácticos con la utilidad sar para supervisar el rendimiento de nuestro sistema basado en Linux o Unix.
Con sar se puede monitorizar en tiempo real el rendimiento de nuestro sistema (CPU, memoria, IO…), además de poder recopilar de forma continua los datos de rendimiento, almacenarlos y realizar análisis históricos con el fin de identificar problemas.
Sar es parte del paquete sysstat y en este post veremos como instalar esta utilidad y como monitorizar diferentes estadísticas que recogemos en el siguiente listado:
- Uso colectivo de la CPU
- Estadísticas individuales de CPU
- Memoria utilizada y disponible
- Espacio de intercambio utilizado y disponible
- Actividades generales de I/O del sistema
- Actividades de I/O de dispositivos individuales
- Estadísticas de cambio de contexto
- Ejecutar cola y promedio de carga de datos
- Estadísticas de red
- Informe de datos en una franja horaria específica
Instalación
La instalación de sysstat podemos hacerla de dos formas, desde paquete o desde el origen compilando previamente el código, para ello vamos a ver a continuación las dos opciones.
Instalación paquete Sysstat
Dependiendo de la distribución utilizada instalaremos el paquete con un comando u otro.
En el caso de distribuciones basadas en Debian:
1 |
sudo apt-get install sysstat |
En el caso de distribuciones basadas en RedHat:
1 2 3 |
sudo yum install sysstat # OR sudo dnf install sysstat |
Otra opción, para los que usen distribuciones basadas en RedHat es la instalación por medio del paquete rpm que se puede descargar desde la web oficial en el siguiente enlace e instalar con el siguiente comando:
1 |
sudo rpm -ivh sysstat-12.3.1-1.x86_64.rpm |
Instalación desde source
Lo primero será descargar el paquete desde la web oficial en el siguiente enlace, podemos utilizar wget para ello:
1 |
wget http://pagesperso-orange.fr/sebastien.godard/sysstat-12.3.1.tar.gz |
Descomprimimos el mismo:
1 |
tar -xzf sysstat-12.3.1.tar.gz |
Accedemos al directorio
1 |
cd sysstat-12.3.1 |
Y procederemos con la instalación, el primer paso será configurar el paquete
1 |
./configure --enable-install-cron |
Utilizamos la opción –enable-install-cron para que automáticamente nos configure la tarea encargada de generar las estadísticas a diario y posteriormente lo compilamos e instalamos
1 2 |
make make install |
Completada la instalación podemos ver la versión con el siguiente comando:
1 2 3 |
sar -V sysstat versión 12.3.1 (C) Sebastien Godard (sysstat <at> orange.fr) |
Utilidades de Sysstat
Las siguientes son las otras utilidades de sysstat.
- sar -> recopila y muestra TODAS las estadísticas de actividades del sistema.
- sadc -> significa “recopilador de datos de actividad del sistema”. Esta es la herramienta de backend sar que realiza la recopilación de datos.
- sa1 -> almacena las actividades del sistema en un archivo de datos binarios. sa1 depende de sadc para este propósito y se ejecuta desde cron.
- sa2 -> crea un resumen diario de las estadísticas recopiladas y se ejecuta desde cron.
- sadf -> puede generar informes sar en CSV, XML y varios otros formatos. Se utiliza principalmente para integrar datos sar con otras herramientas.
- iostat -> genera estadísticas de CPU, I/O
- mpstat -> muestra estadísticas de la CPU.
- pidstat -> estadísticas basadas en la identificación del proceso (PID)
- nfsiostat -> muestra estadísticas de I/O NFS.
- cifsiostat -> genera estadísticas CIFS.
Este artículo se centra en los fundamentos de sysstat y la utilidad sar.
Recolectar estadísticas utilizando cron: sa1 y sa2
Creamos el archive sysstat en el directorio /etc/cron.d para especificar las tareas de recopilación de datos históricos de sar con el siguiente contenido
1 2 |
*/10 * * * * root /usr/local/lib/sa/sa1 1 1 50 23 * * * root /usr/local/lib/sa/sa2 -A |
Si ha instalado sysstat desde la fuente, la ubicación predeterminada de sa1 y sa2 es /usr/local/lib/sa.
Si ha instalado utilizando su método de actualización de distribución (por ejemplo: yum, dnf o apt), la ruta sería /usr/lib/sa/sa1 y /usr/lib/sa/sa2.
Pasamos a explicar las dos líneas incluidas en nuestro fichero de cron:
/usr/local/lib/sa/sa1
- Esta tarea se ejecutará cada 10 minutos y recopilará datos sar para referencia histórica.
- Si desea recopilar estadísticas sar cada 5 minutos, cambie */10 a */5 en el archivo /etc/cron.d/sysstat anterior.
- Esto escribe los datos en el archivo /var/log/sa/sa{dia_del_mes}. El archivo sa{dia_del_mes} es un archivo binario. No puede ver su contenido abriéndolo en un editor de texto.
- Por ejemplo, si hoy es el día 26 del mes, sa1 escribe los datos sar en /var/log/sa/sa26
- Puede pasar dos parámetros a sa1: intervalo (en segundos) y conteo.
- En el ejemplo de crontab anterior: sa1 1 1 significa que sa1 recopila datos sar 1 vez con un intervalo de 1 segundo (por cada 10 minutos).
/usr/local/lib/sa/sa2
- Esta tarea se ejecuta cerca de la medianoche (a las 23:50) para crear el informe de resumen diario de los datos sar.
- sa2 crea el archivo /var/log/sa/sar{dia_del_mes} (tenga en cuenta que esto es diferente al archivo sa{dia_del_mes} creado por sa1). Este archivo sar{dia_del_mes} creado por sa2 es un archivo ascii que puede ver en un editor de texto.
- Esto también eliminará los archivos sa{dia_del_mes} que son más antiguos que una semana. Por lo tanto, escriba un script de shell rápido que se ejecute todas las semanas para copiar los archivos /var/log/sa/* en algún otro directorio para realizar análisis de datos sar históricos.
Ejemplos prácticos de uso de Sar
Hay dos formas de invocar sar.
- sar seguido de una opción (sin especificar un archivo de datos ). Esto buscará el archivo de datos del día actual e informará los datos de rendimiento que se registraron hasta ese punto para el día actual.
- sar seguido de una opción, y además especificando un archivo de datos usando la opción -f. Esto informará los datos de rendimiento para ese día en particular.
En todos los ejemplos a continuación, explicaremos cómo ver ciertos datos de rendimiento para el día actual. Para buscar un día específico, agregue “-f /var/log/sa/sa{dia_del_mes}” al final del comando sar.
Todo comando sar tendrá lo siguiente como primera línea en su salida.
1 2 |
$ sar -u Linux 3.10.0-862.el7.x86_64 (centosbytemind) 02/04/2020 _x86_64_ (8 CPU) |
- Linux 3.10.0-862.el7.x86_64 – Versión del kernel de Linux del sistema.
- (centosbytemind): el nombre de host donde se recopilaron los datos sar.
- 02/04/2020: la fecha en que se recopilaron los datos sar.
- _x86_64_ – La arquitectura del sistema
- (8 CPU): número de CPU disponibles en este sistema. En sistemas multinúcleo, esto indica el número total de núcleos.
Uso de CPU de TODAS las CPU
Proporciona el uso de CPU acumulativo en tiempo real de todas las CPU.
1 2 3 4 5 6 7 8 |
$ sar -u 1 3 Linux 3.10.0-862.el7.x86_64 (centosbytemind) 02/04/2020 _x86_64_ (8 CPU) 05:27:32 PM CPU %user %nice %system %iowait %steal %idle 05:27:33 PM todos 0.00 0.00 0.00 0.00 0.00 100.00 05:27:34 PM todos 0.25 0.00 0.25 0.00 0.00 99.50 05:27:35 PM todos 0.75 0.00 0.25 0.00 0.00 99.00 Average: todos 0.33 0.00 0.17 0.00 0.00 99.50 |
Las siguientes son algunas variaciones:
- sar -u Muestra el uso de CPU para el día actual que se recopiló hasta ese momento.
- sar -u 1 3 Muestra el uso de la CPU en tiempo real cada 1 segundo durante 3 veces.
- sar -u ALL Igual que “sar -u” pero muestra campos adicionales.
- sar -u ALL 1 3 Igual que “sar -u 1 3” pero muestra campos adicionales.
- sar -u -f /var/log/sa/sa10 Muestra el uso de la CPU para el día 10 del mes desde el archivo sa10.
Uso de CPU individual
Si tiene 4 núcleos en la máquina y desea ver qué están haciendo los núcleos individuales, podemos hacerlo de la siguiente forma.
“-P ALL” indica que debe mostrar estadísticas para TODOS los núcleos individuales.
En el siguiente ejemplo en la columna “CPU” 0, 1, 2 y 3 indica los números de núcleo de CPU correspondientes.
1 2 3 4 5 6 7 8 9 |
$ sar -P ALL 1 1 Linux 3.10.0-862.el7.x86_64 (centosbytemind) 02/04/2020 _x86_64_ (8 CPU) 05:34:12 PM CPU %user %nice %system %iowait %steal %idle 05:34:13 PM todos 11.69 0.00 4.71 0.69 0.00 82.90 05:34:13 PM 0 35.00 0.00 6.00 0.00 0.00 59.00 05:34:13 PM 1 22.00 0.00 5.00 0.00 0.00 73.00 05:34:13 PM 2 3.00 0.00 1.00 0.00 0.00 96.00 05:34:13 PM 3 0.00 0.00 0.00 0.00 0.00 100.00 |
“-P 1” indica que debe mostrar estadísticas solo para el segundo núcleo. (Tenga en cuenta que el número de núcleo comienza desde 0).
1 2 3 4 5 |
$ sar -P 1 1 1 Linux 3.10.0-862.el7.x86_64 (centosbytemind) 02/04/2020 _x86_64_ (8 CPU) 05:36:25 PM CPU %user %nice %system %iowait %steal %idle 05:36:26 PM 1 8.08 0.00 2.02 1.01 0.00 88.89 |
Las siguientes son algunas variaciones:
- sar -P ALL Muestra el uso de CPU desglosado por todos los núcleos para el día actual.
- sar -P ALL 1 3 Muestra el uso de CPU en tiempo real para TODOS los núcleos cada 1 segundo durante 3 veces (desglosado por todos los núcleos).
- sar -P 1 Muestra el uso de CPU para el núcleo número 1 para el día actual.
- sar -P 1 1 3 Muestra el uso de CPU en tiempo real para el número central 1, cada 1 segundo durante 3 veces.
- sar -P ALL -f /var/log/sa/sa10 Muestra el uso de la CPU desglosado por todos los núcleos para el día 10 del mes desde el archivo sa10.
Memoria libre y usada
Esto informa las estadísticas de memoria. “1 3” informa por cada 1 segundo un total de 3 veces.
Lo más probable es que se centre en “kbmemfree” y “kbmemused” para la memoria libre y usada.
1 2 3 4 5 6 7 8 |
$ sar -r 1 3 Linux 3.10.0-862.el7.x86_64 (centosbytemind) 02/04/2020 _x86_64_ (8 CPU) 05:28:06 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact 05:28:07 PM 6209248 2097432 25.25 189024 1796544 141372 0.85 1921060 88204 05:28:08 PM 6209248 2097432 25.25 189024 1796544 141372 0.85 1921060 88204 05:28:09 PM 6209248 2097432 25.25 189024 1796544 141372 0.85 1921060 88204 Average: 6209248 2097432 25.25 189024 1796544 141372 0.85 1921060 88204 |
Algunas variaciones serían las siguientes:
- sar -r
- sar -r 1 3
- sar -r -f /var/log/sa/sa10
Espacio de intercambio utilizado
Esto informa las estadísticas de intercambio. “1 3” informa por cada 1 segundo un total de 3 veces.
Si “kbswpused” y “% swpused” están en 0, entonces su sistema no está intercambiando.
1 2 3 4 5 6 7 8 |
$ sar -S 1 3 Linux 3.10.0-862.el7.x86_64 (centosbytemind) 02/04/2020 _x86_64_ (8 CPU) 05:31:06 PM kbswpfree kbswpused %swpused kbswpcad %swpcad 05:31:07 PM 8385920 0 0.00 0 0.00 05:31:08 PM 8385920 0 0.00 0 0.00 05:31:09 PM 8385920 0 0.00 0 0.00 Average: 8385920 0 0.00 0 0.00 |
Algunas variaciones serían las siguientes:
- sar -S
- sar -S 1 3
- sar -S -f / var / log / sa / sa10
Notas:
- Use “sar -R” para identificar el número de páginas de memoria liberadas, utilizadas y almacenadas en caché por segundo por el sistema.
- Use “sar -H” para identificar las páginas enormes (en KB) que se utilizan y están disponibles.
- Use “sar -B” para generar estadísticas de paginación. es decir, número de KB paginado (y fuera) del disco por segundo.
- Use “sar -W” para generar estadísticas de intercambio de páginas. es decir, cambio de página (y fuera) por segundo.
Actividades generales de I/O
Esto informa las estadísticas de I/O. “1 3” informa por cada 1 segundo un total de 3 veces.
Los siguientes campos se muestran en el ejemplo a continuación.
- tps: transacciones por segundo (esto incluye lectura y escritura)
- rtps – transacciones por segundo de lectura
- wtps: transacciones por segundo de escritura
- pan/s – Bytes leídos por segundo
- bwrtn/s – Bytes escritos por segundo
1 2 3 4 5 6 7 8 |
$ sar -b 1 3 Linux 3.10.0-862.el7.x86_64 (centosbytemind) 02/04/2020 _x86_64_ (8 CPU) 05:56:28 PM tps rtps wtps pan/s bwrtn/s 05:56:29 PM 346.00 264.00 82.00 2208.00 768.00 05:56:30 PM 100.00 36.00 64.00 304.00 816.00 05:56:31 PM 282.83 32.32 250.51 258.59 2537.37 Average: 242.81 111.04 131.77 925.75 1369.90 |
Algunas variaciones serían las siguientes:
- sar -b
- sar -b 1 3
- sar -b -f / var / log / sa / sa10
Nota:
- Use “sar -v” para mostrar el número de manejadores de inodo, manejadores de archivos y pseudo terminales utilizados por el sistema.
Actividades de I/O del dispositivo de bloque individual
Para identificar las actividades de los dispositivos de bloque individuales (es decir, un punto de montaje específico, o LUN, o partición), use “sar -d”
1 2 3 4 5 6 7 8 9 10 11 12 |
$ sar -d 1 1 Linux 3.10.0-862.el7.x86_64 (centosbytemind) 02/04/2020 _x86_64_ (8 CPU) 05:59:45 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 05:59:46 PM dev8-0 1.01 0.00 0.00 0.00 0.00 4.00 1.00 0.10 05:59:46 PM dev8-1 1.01 0.00 0.00 0.00 0.00 4.00 1.00 0.10 05:59:46 PM dev120-64 3.03 64.65 0.00 21.33 0.03 9.33 5.33 1.62 05:59:46 PM dev120-65 3.03 64.65 0.00 21.33 0.03 9.33 5.33 1.62 05:59:46 PM dev120-0 8.08 0.00 105.05 13.00 0.00 0.38 0.38 0.30 05:59:46 PM dev120-1 8.08 0.00 105.05 13.00 0.00 0.38 0.38 0.30 05:59:46 PM dev120-96 1.01 8.08 0.00 8.00 0.01 9.00 9.00 0.91 05:59:46 PM dev120-97 1.01 8.08 0.00 8.00 0.01 9.00 9.00 0.91 |
En el ejemplo anterior, “DEV” indica el dispositivo de bloque específico.
Por ejemplo: “dev120-1” significa un dispositivo de bloque con 120 como número mayor y 1 como número menor.
El nombre del dispositivo (columna DEV) puede mostrar el nombre real del dispositivo (por ejemplo: sda, sda1, sdb1, etc.), si usa la opción -p (impresión bonita) como se muestra a continuación.
1 2 3 4 5 6 7 8 9 10 11 12 |
$ sar -p -d 1 1 Linux 3.10.0-862.el7.x86_64 (centosbytemind) 02/04/2020 _x86_64_ (8 CPU) 01:59:45 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 01:59:46 PM sda 1.01 0.00 0.00 0.00 0.00 4.00 1.00 0.10 01:59:46 PM sda1 1.01 0.00 0.00 0.00 0.00 4.00 1.00 0.10 01:59:46 PM sdb1 3.03 64.65 0.00 21.33 0.03 9.33 5.33 1.62 01:59:46 PM sdc1 3.03 64.65 0.00 21.33 0.03 9.33 5.33 1.62 01:59:46 PM sde1 8.08 0.00 105.05 13.00 0.00 0.38 0.38 0.30 01:59:46 PM sdf1 8.08 0.00 105.05 13.00 0.00 0.38 0.38 0.30 01:59:46 PM sda2 1.01 8.08 0.00 8.00 0.01 9.00 9.00 0.91 01:59:46 PM sdb2 1.01 8.08 0.00 8.00 0.01 9.00 9.00 0.91 |
Algunas variaciones serían las siguientes:
- sar -d
- sar -d 1 3
- sar -d -f / var / log / sa / sa10
- sar -p -d
Mostrar cambio de contexto por segundo
Esto informa el número total de procesos creados por segundo y el número total de cambios de contexto por segundo. “1 3” informa por cada 1 segundo un total de 3 veces.
1 2 3 4 5 6 7 |
$ sar -w 1 3 Linux 3.10.0-862.el7.x86_64 (centosbytemind) 02/04/2020 _x86_64_ (8 CPU) 05:32:24 PM proc/s cswch/s 05:32:25 PM 3.00 53.00 05:32:26 PM 4.00 61.39 05:32:27 PM 2.00 57.00 |
Algunas variaciones serían las siguientes:
- sar -w
- sar -w 1 3
- sar -w -f / var / log / sa / sa10
Los informes ejecutan la cola y el promedio de carga
Esto informa el tamaño de la cola de ejecución y el promedio de carga de los últimos 1 minuto, 5 minutos y 15 minutos. “1 3” informa por cada 1 segundo un total de 3 veces.
1 2 3 4 5 6 7 8 |
$ sar -q 1 3 Linux 3.10.0-862.el7.x86_64 (centosbytemind) 02/04/2020 _x86_64_ (8 CPU) 06:28:53 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 06:28:54 PM 0 230 2.00 3.00 5.00 0 06:28:55 PM 2210 2.01 3.15 5.15 0 06:28:56 PM 2 230 2.12 3.12 5.12 0 Average: 3 230 3.12 3.12 5.12 0 |
Nota: La columna “blocked” muestra la cantidad de tareas que están actualmente bloqueadas y en espera de que se complete la operación de I/O.
Algunas variaciones serían las siguientes:
- sar -q
- sar -q 1 3
- sar -q -f /var/log/sa/sa10
Informe de estadísticas de red
Esto informa varias estadísticas de red. Por ejemplo: número de paquetes recibidos (transmitidos) a través de la tarjeta de red, estadísticas de falla de paquetes, etc. “1 3” informa por cada 1 segundo un total de 3 veces.
1 |
sar -n KEYWORD |
KEYWORD puede ser uno de los siguientes:
- DEV: muestra las estadísticas vitales de los dispositivos de red para eth0, eth1, etc.,
- EDEV: muestra estadísticas de fallas de dispositivos de red
- NFS: muestra las actividades del cliente NFS
- NFSD: muestra las actividades del servidor NFS
- SOCK – Muestra los enchufes en uso para IPv4
- IP: muestra el tráfico de red IPv4
- EIP: muestra errores de red IPv4
- ICMP: muestra el tráfico de red ICMPv4
- EICMP: muestra errores de red ICMPv4
- TCP: muestra el tráfico de red TCPv4
- ETCP: muestra errores de red TCPv4
- UDP: muestra el tráfico de red UDPv4
- SOCK6, IP6, EIP6, ICMP6, UDP6 son para IPv6
- TODOS: muestra toda la información anterior. La salida será muy larga.
1 2 3 4 5 6 7 |
$ sar -n DEV 1 1 Linux 3.10.0-862.el7.x86_64 (centosbytemind) 02/04/2020 _x86_64_ (8 CPU) 06:11:13 PM IFACE rxpck/s txpck/s rxbyt/s txbyt/s rxcmp/s txcmp/s rxmcst/s 06:11:14 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 06:11:14 PM eth0 342.57 342.57 93923.76 141773.27 0.00 0.00 0.00 06:11:14 PM eth1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 |
Informe de datos Sar utilizando la hora de inicio
Cuando ve datos sar históricos desde el archivo /var/log/sa/saXX usando la opción “sar -f”, muestra todos los datos sar para ese día específico a partir de las 12:00 am de ese día.
Usando la opción “-s hh:mi:ss”, puede especificar la hora de inicio. Por ejemplo, si especifica “sar -s 10:00:00”, mostrará los datos sar a partir de las 10 a.m. (en lugar de comenzar a partir de la medianoche) como se muestra a continuación.
Puede combinar la opción -s con otra opción sar.
Por ejemplo, para informar el promedio de carga el día 2 de este mes a partir de las 10 de la mañana, combine las opciones -q y -s como se muestra a continuación.
1 2 3 4 5 6 7 8 9 |
$ sar -q -f /var/log/sa/sa2 -s 10:00:01 Linux 3.10.0-862.el7.x86_64 (centosbytemind) 02/04/2020 _x86_64_ (8 CPU) 10:00:01 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 10:10:01 AM 0127 2.00 3.00 5.00 0 10:20:01 AM 0127 2.00 3.00 5.00 0 ... 11:20:01 AM 0127 5.00 3.00 3.00 0 12:00:01 PM 0 127 4.00 2.00 1.00 0 |
No hay opción para limitar el tiempo final. Solo tiene que ser creativo y usar el comando head como se muestra a continuación.
Por ejemplo, a partir de las 10 a.m., si desea ver 7 entradas, debe canalizar la salida anterior a “head -n 10”.
1 2 3 4 5 6 7 8 9 10 11 |
$ sar -q -f /var/log/sa/sa2 -s 10:00:01 | head -n 10 Linux 3.10.0-862.el7.x86_64 (centosbytemind) 02/04/2020 _x86_64_ (8 CPU) 10:00:01 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked 10:10:01 AM 0127 2.00 3.00 5.00 0 10:20:01 AM 0127 2.00 3.00 5.00 0 10:30:01 AM 0127 3.00 5.00 2.00 0 10:40:01 AM 0127 4.00 2.00 1.00 2 10:50:01 AM 0127 3.00 5.00 5.00 0 11:00:01 AM 0 127 2.00 1.00 6.00 0 11:10:01 AM 0127 1.00 3.00 7.00 2 |
Esto es todo por ahora, espero les sea de utilidad y les haya gustado. Si tienen algún aporte al respecto, comentario o duda expónganlo en la sección de comentarios de esta página. Nos vemos en el siguiente post.
como sabría las estadísticas de un archiv.c con el comando sar?