Monitorización de recursos


Monitorización de recursos


Disponemos de toda una amplia colección de órdenes que nos permiten recoger medidas directamente a través del sistema operativo. El principal problema al que nos enfrentamos es el desconocimiento de los mismos.
Las órdenes de identificación del hardware o el software de una máquina no suelen ser estándar y aquí aparecen los propios de las plataformas Solaris, los más extendidos en ambientes de producción. Las demás, bien hayan tenido su origen en plataformas Unix o Linux pueden encontrarse disponibles en la actualidad para la práctica totalidad de las plataformas existentes.


Conceptos básicos

Los cuatro conceptos que no debemos de olvidar a la hora de realizar las pruebas son:
  • Latencia. Básicamente, mide el tiempo transcurrido entre la realización de una petición y el comienzo de la visualización o ejecución de los resultados. Se mide en unidades de tiempo (segundos, milisegundos…)
  • Rendimiento. Demanda de trabajo capaz de ser procesada satisfactoriamente por un sistema por unidad de tiempo. Se mide en hits por segundo, Kbytes por hora, Mbytes por día, etc.
  • Utilización. La utilización mide la fracción de un componente o servicio que estamos usando realmente. Es uno de los parámetros mas comprometidos. Los administradores de sistemas se sienten seguros si la utilización es baja, pero esto limita el rendimiento. Tampoco podemos maximixar la utilización porque corremos el riesgo de bloquear el sistema ante un aumento inesperado de carga. Además, muchos componentes (utilización de CPU, por ejemplo) ofrecen sus mejores prestaciones cuando trabajan en torno al 70-80% de su utilización, presentando peor comportamiento por encima de esta cifra.
  • Eficiencia o eficacia. Se define habitualmente como el cociente entre rendimiento y utilización. En el terreno que nos ocupa, nuestro objetivo ha de ser disminuir la latencia y aumentar los otros tres parámetros: rendimiento, utilización y eficiencia.
  • Calidad de servicio. En sentido amplio, se define como la satisfacción por parte del cliente de sus distintas necesidades de acuerdo con sus requisitos. En el campo que nos ocupa, son tres los parámetros que miden la calidad del servicio:
    • Tiempo de respuesta ante las peticiones.
    • Probabilidad de error, rechazo o pérdida de las peticiones.
    • Caídas o interrupciones de servicio.

Cuello de botella

Elemento software o hardware de un sistema que limita su rendimiento y/o las prestaciones que este ofrece. Todo sistema, por muy potente que sea, posee cuellos de botella: son los eslabones más débiles que nos delimitan la verdadera fuerza de nuestro sistema. No obstante, no siempre tenemos la obligación de encontrarlos: basta con asegurar que la calidad de servicio será aceptable de acuerdo a los requisitos exigidos.
  • Demanda de trabajo. Peticiones generadas por los clientes y que deben de ser atendidas por el sistema.
  • Prestaciones del sistema. Comportamiento del sistema frente a la demanda de trabajo.

Órdenes de monitorización polivalentes

vmstat (Virtual Memory Statistic)

A pesar de su nombre, esta orden ofrece mucho más que un análisis de la memoria del sistema. A través de el podemos obtener datos del estado de los procesos, la utilización de la CPU, la utilización de memoria, el tráfico en los discos, etc. Veremos, a continuación, un breve resumen de la poderosa funcionalidad de esta orden.
La sintaxis de la llamada es la siguiente:
vmstat <opciones> <intervalo de medición> <nº de muestras>
usuario@usuarioPC:~$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
4 0 44148 15236 19356 158004 2 5 55 27 48 116 2 3 94 1

sar (System Activity Reporter)

Es, al igual que vmstat, una orden polivalente que nos permite obtener datos sobre datos de disco, utilización de CPU, utilización de memoria, etc.
La sintaxis de la llamada es:
sar <opciones> <intervalo de medición> <nº de mediciones>
Necesita de la instalación de los paquetes sysstat y atsar.


top

La orden top da una buena idea general de la salud de un sistema UNIX. Se trata de una herramienta de libre distribución que, dada su gran utilidad y sencillez, está disponible en la mayoría de las plataformas.
usuario@usuarioPC:~$ top

top - 23:12:37 up 2:21, 2 users, load average: 0.14, 0.19, 0.16
Tasks: 114 total, 2 running, 112 sleeping, 0 stopped, 0 zombie
Cpu(s): 3.0%us, 17.8%sy, 0.0%ni, 78.2%id, 0.7%wa, 0.3%hi, 0.0%si, 0.0%st
Mem: 380056k total, 365092k used, 14964k free, 19668k buffers
Swap: 409616k total, 44148k used, 365468k free, 158288k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2311 root 20 0 45688 14m 5480 S 10.6 3.8 0:58.89 Xorg
8997 usuario 20 0 34320 14m 9720 R 3.3 3.9 0:00.64 gnome-terminal
2902 usuario 20 0 40424 12m 7764 S 2.0 3.2 0:07.04 gnome-panel
2883 usuario 20 0 21232 9024 6540 S 1.3 2.4 0:04.93 metacity
2924 usuario 20 0 7264 1120 940 S 1.0 0.3 0:26.36 VBoxClient
3064 usuario 20 0 17184 4380 3064 S 1.0 1.2 0:05.84 gnome-screensav
2877 usuario 20 0 29724 3400 2804 S 0.3 0.9 0:02.69 gnome-settings-
2903 usuario 20 0 55772 7952 4924 S 0.3 2.1 0:02.53 nautilus
2989 usuario 20 0 22428 4380 3556 S 0.3 1.2 0:21.89 multiload-apple
9016 usuario 20 0 2448 1172 912 R 0.3 0.3 0:00.03 top
1 root 20 0 3084 528 480 S 0.0 0.1 0:02.20 init
2 root 15 -5 0 0 0 S 0.0 0.0 0:00.04 kthreadd
3 root RT -5 0 0 0 S 0.0 0.0 0:00.00 migration/0
4 root 15 -5 0 0 0 S 0.0 0.0 0:03.56 ksoftirqd/0
5 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
6 root 15 -5 0 0 0 S 0.0 0.0 0:00.44 events/0
7 root 15 -5 0 0 0 S 0.0 0.0 0:00.00 khelper

Monitorización de CPU

mpstat (Multi Processor Statistics)

En sistemas multiprocesador, muestra un informe de actividad desglosado por procesador. La ejecución va acompañada, al igual que otras órdenes similares, del intervalo de medición y el número de muestras tomadas.
Necesita de la instalación de el paquete sysstat.


Monitorización de Procesos

uptime

Muestra un breve resumen del estado del sistema. Un ejemplo de la salida de esta orden es la siguiente:
usuario@usuarioPC:~$ uptime
23:00:08 up 2:09, 2 users, load average: 0.24, 0.05, 0.03
Los tres últimos datos mostrados son la carga media (load average) del sistema en los últimos periodos de 1, 5 y 10 minutos respectivamente. La carga media del sistema se mide realizando la media de los procesos encolados a la espera de procesador y es un dato muy significativo del estado del sistema. Un sistema que mantiene permanentemente por encima de 4 veces su número de procesadores su ‘load average’ del último minuto presenta, normalmente, síntomas de sobrecarga.
Más información útil proporcionada por esta orden: el tiempo transcurrido desde la última vez que se reinició el sistema y el número de usuarios conectados en este momento.

ps (Process Status)

Muestra información sobre los procesos activos, su estado y varias medidas de alto interés referidas a ellos como el porcentaje de tiempo de procesador invertido en ellos, la memoria que consumen, tiempo acumulado de ejecución, propietario, etc.

Monitorización de Discos

iostat (Input/Output Statistics)

Aunque podríamos calificarlo también como una orden polivalente (sirve para obtener estadísticas de i/o, actividad en los terminales y dispositivos y actividad en la CPU) nosotros lo usaremos exclusivamente para obtener datos sobre la utilización de los discos mediante la opción -xnp.
Necesita de la instalación del paquete sysstat.
Un ejemplo de ejecución sería: iostat –xnp

df (Disk Free)

Visualiza información sobre la cantidad de espacio libre en el disco.
usuario@usuarioPC:~$ df
S.ficheros Bloques de 1K Usado Dispon Uso% Montado en
/dev/sda1 7850996 3094292 4357892 42% /
tmpfs 190028 0 190028 0% /lib/init/rw
varrun 190028 104 189924 1% /var/run
varlock 190028 0 190028 0% /var/lock
udev 190028 140 189888 1% /dev
tmpfs 190028 96 189932 1% /dev/shm
lrm 190028 2192 187836 2% /lib/modules/2.6.28-16-generic/volatile
Generalmente es más útil llamar a df con la opción -h que nos muestra el tamaño en unidades (GiB,MiB) en lugar de en bytes.

du (Disk Usage)

Sirve para obtener el tamaño de los ficheros. La opción más interesante es –ka, la cual muestra el tamaño en kbytes de todos los ficheros y directorios de forma recursiva desde el directorio de ejecución de la orden.

Monitorización de la red

ping

La utilidad ping envía paquetes ICMP con eco al host deseado. Se trata de uno de las órdenes más conocidas y simples que nos puede aportar fácilmente una idea de la latencia de nuestra red. Al final de la ejecución obtendremos una breve estadística de resultados.
usuario@usuarioPC:~$ ping osl.uca.es
PING osl.uca.es (150.214.76.79) 56(84) bytes of data.
64 bytes from osl.uca.es (150.214.76.79): icmp_seq=1 ttl=63 time=503 ms
64 bytes from osl.uca.es (150.214.76.79): icmp_seq=2 ttl=63 time=39.2 ms
64 bytes from osl.uca.es (150.214.76.79): icmp_seq=3 ttl=63 time=38.9 ms
64 bytes from osl.uca.es (150.214.76.79): icmp_seq=4 ttl=63 time=38.2 ms
^C
--- osl.uca.es ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 38.204/154.967/503.513/201.233 ms

traceroute

Nos proporciona, al igual que la orden ping, la latencia del sistema, pero en este caso desglosada por cada uno de los ‘saltos’ que siguen nuestros paquetes TCP/IP.
Necesita de la instalación de los paquetes traceroute y traceroute-nanog.

time

Otra orden que nos puede proporcionar una medida de la latencia de la red. Nos ofrece, entre otras cosas, el tiempo entre la ejecución de una orden y su finalización.

netstat (Network Status)

Herramienta de uso muy generalizado que sirve para diagnosticar problemas en la red y/o monitorizar la actividad en la misma. En la ejecución se presenta una línea por cada interfaz de red disponible. Brevemente, el significado de algunos de los distintos campos es el siguiente:
  • Name. Nombre del interfaz de red. El interfaz lo0 es especial y define un loopback con el propio sistema.
  • Ipkts. Número de paquetes recibidos.
  • Ierrs. Número de errores en los paquetes recibidos.
  • Opkts. Número de paquetes totales transmitidos.
  • Oerrs. Número de errores en los paquetes transmitidos.
  • Collis. Número de colisiones
  • Queue. Paquetes perdidos
Algunos de los parámetros más útiles para netstat son los siguientes:
Algunos parámetros de netstat
Parámetro Descripción
-a muestra información de todos los sockets
-p muestra el PID del programa que está utilizando un socket.
-n muestra IPs en lugar de nombres DNS y los números de puerto.
-s muestra estadísticas de red (para ver estadísticas a tiempo real se puede utilizar ifstat)
-c muestra el estado de la red de manera continua.
-r muestra la tabla de ruteo, es exactamente la misma información que proporciona route

ntop

Utilísima herramienta para monitorizar la actividad general en la red, pero que desgraciadamente no está tan extendida como su prima (top) entre sistemas no LINUX.

Monitorización de la Memoria

Antes de comenzar este punto es necesario diferenciar entre dos conceptos bien diferentes pero que a menudo se confunden y se usan de forma equivocada: paging y swapping. Un sistema que está haciendo paging (paginando) está escribiendo paginas de uso infrecuente de memoria a disco. mientras que un sistema que está haciendo swapping , está copiando procesos completos en ejecución de memoria a disco. El paginado no es un síntoma de que nuestro sistema esté corto de memoria, mientras que el swapping frecuente si suele ser indicativo de falta de memoria.

memstat (Memory Statistic)

Solaris, a partir de su versión 7, introduce nuevas estadísticas para la medición de la utilización de la memoria que pueden visualizarse con la herramienta memstat.

uax

Herramienta habitual en los sistemas Solaris, aunque no pertenece al sistema operativo. Nos da un report de la utilización de la memoria.

pmap

Posiblemente es el mejor mandato del que disponemos para conocer la utilización que hace de la memoria un proceso determinado en sistemas Solaris.

free

No se suele ver mucho fuera de los sistemas LINUX. Permite ver un resumen del estado de la memoria de la máquina.

Planificación programada de la monitorización

En todos los sistemas Unix existe un demonio llamado cron encargado de ejecutar tareas en determinados momentos con una gran flexibilidad en la planificación del momento de la ejecución. Se maneja mediante la orden crontab. Para poder usar dicha orden es preciso que estemos autorizados para ello.
Estamos autorizados para usar crontab si nuestro identificador de usuario aparece en el fichero /etc/cron.d/cron.allow o si el fichero /etc/cron.d/cron.allow no existe y nuestro identificador de usuario no aparece en el fichero /etc/cron.d/cron.deny.
La forma de usar crontab es la siguiente:
  • Edita el fichero de planificación del usuario con el editor por defecto:
crontab -e
  • Visualiza el contenido del fichero de planificación del usuario:
crontab -l
Un fichero de planificación consta de cero, una o más líneas de texto. En cada línea deben de aparecer cinco columnas de información separadas por uno o más espacios. Un ejemplo válido de fichero de planificación es el siguiente:
Archivo: crontab
0 4,5,10 10 12 * /usr/home/jmmv/bat1.sh
30 12-17 * 12 0 /usr/home/jmmv/bat2.sh


  • Primera columna: minuto de ejecución. Rángo válido: 0 a 59.
  • Segunda columna: hora de ejecución. Rango válido: 0 a 23
  • Tercera columna: día de ejecución. Rango válido: 1 a 31
  • Cuarta columna: mes de ejecución. Rango válido: 1 a 12
  • Quinta columna: dia de la semana de ejecución. Rango válido: 0 a 6 (0 es el domingo).
  • Sexta columna: orden a ejecutar. Debe de ser un mandato válido, con su path totalmente especificado (desde el raíz en absoluto o desde el directorio $HOME en relativo) y sobre el que nuestro usuario tenga permiso de ejecución.
Cualquiera de las cinco primeras columnas puede ser sustituida por:
  • Una lista de valores válidos separados por coma, indicando que la orden se ejecutará cuando se cumpla cualquiera de ellos.
  • Dos valores válidos separados por un signo menos, indicando que la orden se ejecutará para todos los valores delimitados por ese rango, incluyendo los extremos.
  • Un asterisco, significando que la orden se ejecutará para todos los valores válidos del rango de la columna.

Entornos de monitorización

Existen diversos programas que intentan ofrecer una solución integral a la monitorización del sistema, como:

Comentarios