Comandos basicos para monitorizar linux/unix (Solaris)

Saludos les publicare algunos tips sumamente basicos para el  monitoreo de nuestro sistema en Linux o unix,



Primero empezaremos con " uname -a " el cual nos mostrara el nombre y versión del sistema operativo que estamos utilizando.

el comando funciona de manera genérica para cualquier plataforma unix.

También un comando sumamente importante es prtdiag -v dentro de solaris, este comando nos sirve para ver el estatus del servidor desde la ram hasta el estatus del todo el hardware que se encuentra funcionando, asi como la version de firmware y otros componentes. 

Del mismo modo tenemos " psrinfo -v " que proporciona la información de los procesadores, de favor si me corrigen ya que ignoro si esto aplique también para osx, ya que me parece solo aplicaría para solaris y algunas distros linux.

Status of virtual processor 0 as of: 05/21/2012 11:21:18
  on-line since 05/06/2012 17:12:36.
  The sparcv9 processor operates at 2520 MHz,
        and has a sparcv9 floating point processor.
Status of virtual processor 1 as of: 05/21/2012 11:21:18
  on-line since 05/06/2012 17:13:32.

Para ver la memoria disponible " prtconf | grep Memory " solo para solaris.
Memory size: 20480 Megabytes

Para conocer la cantidad de memoria ram de nuestro sistema Solaris, así como la cantidad y el tipo de CPU, tarjetas PCI y dispositivos externos con los que contamos ejecuta el siguiente comando:

/usr/platform/`uname -i`/sbin/prtdiag 

Para saber el nombre de la maquina en unix o linux, tenemos 2 opciones, " uname -n " o bien hostname, ignoro si aplica para todas las distros, los eh probado en ubuntu y solaris. 

Para saber nuestra ip, tecleamos " ifconfig -a " o solo " ifconfig " y nos proporcionara información referente a la ip (s) configuradas para nuestro equipo.

Uno muy util es cuando queremos saber los procesos asignados a nuestro usuario, en tal caso usuamos "ps -fu nombreusuario" en donde "nombreusuario" es el user id o nombre del usuario con el que iniciamos sesion o " ps -ef  " que también nos mostrara los procesos que se están ejecutando.

Para ver el estado de la memoria podemos hacerlo con "vmstat" aunque para este comando hay muchas opciones, podemos tomar por numero de muestras y/o intervalos de tiempo, para este comando le dedicare un poco mas de tiempo en futuras entradas, por lo pronto podemos usar el manual con "man vmstat" en la consola y un ejemplo seriavmstat 3 6 el cual toma muestras cada 3 segundos y tomara 6 muestras

 kthr      memory            page            disk          faults      cpu
 r b w   swap  free  re  mf pi po fr de sr m0 m1 m3 m4   in   sy   cs us sy id
 0 0 0 199603904 164565344 94 409 62 134 134 0 0 0 0 0 0 6809 13802 7377 0 1 99
 1 0 0 196558024 160959592 0 78 0 206 206 0 0 0 0 0  0 6827 16920 7403 0  1 99
 1 0 0 196557528 160959304 0 2 0 73 73 0 0  0  0  0  0 6825 9409 7181  0  2 98
 0 0 0 196557528 160958624 47 51 0 377 377 0 0 0 0 0 0 7013 9912 7734  0  1 98
 0 0 0 196557312 160959712 105 720 0 76 76 0 0 0 0 0 0 7236 17293 8342 0  1 99
 0 0 0 196557528 160960160 0 30 0 102 102 0 0 0 0 0  0 6735 12328 6987 0  2 98

Para ver el espacio en disco podemos usar df -k (bytes) o df -h (formato megabytes o human)
df -h
Filesystem             size   used      avail capacity  Mounted on
/                           68G    8.7G    59G     13%    /
/HTTPServer       2.0G   254M   1.6G    14%    /HTTPServer
/NDM36             2.0G   387M   1.5G    20%    /NDM36
/WebSphere61    5.0G    2.3G    2.5G    48%    /WebSphere61
/arqnacar            10G     20M    9.4G     1%    /arqnacar
/backlogs            2.0G   18M     1.9G     1%    /backlogs
/bladelogic          2.0G   117M   1.8G     7%    /bladelogic
/ctrlmagt             2.0G   163M   1.7G     9%    /ctrlmagt
/dev                   68G     8.7G     59G     13%    /dev

Ahora bien para saber el espacio de una carpeta / filesystem podemos usar "du -ha", este comando informara sobre el tamaño de los archivos en una carpeta de forma re cursiva.

prstat -as cpu que muestra de forma ordenada los procesos que se están ejecutando y se actualiza mas o menos cada 2 segundos, solo aplica para ciertos sistemas unix  (Solaris) y sirve para monitorizar también el consumo de CPU, memoria ram, swap, usuarios, es el equivalente de top en linux.



Actualización ------------

También para ver los usuarios conectados podemos utilizar, who y finger, ambos comandos muestran las sesiones conectadas a nuestro sistema. finger proporciona mayor detalle y puede ser un comando restringido al proporcionar información sensible.

y tenemos uptime, que muestra el tiempo que lleva nuestro equipo funcionando desde el último reinicio o bien apagado.

comandos
  • El comando uptime
    • la hora actual
    • el tiempo que el sistema está en marcha
    • el número de usuarios conectados
    • la carga promedio del sistema para los últimos 1, 5 y 15 minutos

#uptime
10:21:06 up 5 days, 19:11,  2 users,  load average: 0.08, 0.03, 0.00
  • El comando top: El comando top permite una visión dinámica del sistema en tiempo real. El comando muestra un listado de los procesos que se están ejecutando. Proporciona además un gran número de datos como el uso de la memoria y procesador…

#top
top - 10:21:48 up 5 days, 19:11,  2 users,  load average: 0.04, 0.03, 0.00
Tasks:  73 total,   2 running,  71 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0% us,  0.0% sy,  0.0% ni, 100.0% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:   3632736k total,  1049496k used,  2583240k free,   359636k buffers
Swap:  1991920k total,        0k used,  1991920k free,   255052k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                               
28566  user  16   0  2196 1088  856 R  0.3  0.0   0:00.02 top                                                                                   
    1 root      16   0  1564  532  464 S  0.0  0.0   0:01.21 init                                                                                 
  • free (solo en linux): el comando free muestra información relativa al uso de la memoria. Sin embargo, el resultado mostrado por este comando es estático, para poder visualizar el uso de la memoria de manera dinámica, se le puede agregar el comando watch:

#watch –n 1 –d free
Every 1,0s: free                                               Wed Sep 23 10:22:47 2009
             total     used       free              shared    buffers     cached
Mem:        3632736    1049556   2583180                 0     359644     255072
-/+ buffers/cache:     434840    3197896
Swap:1991920                0    1991920

La opción –n indica el tiempo de refrescamiento de la información y –d para resaltar la evolución de los snapshots.

ahora bien como se lee free?, en el caso de linux, recordemos que linux acostumbra paginar mucho y ocupar mucho espacio es decir hay veces en que la memoria luce menor con el commando top pero al revisarla con free en la segunda fila en memoria cache free, podemos ver que aunque se cacheo mucha memoria realmente tenemos 3197896mb libres, si queremos cambiar como se despliega y ver la memoria en megas o gigas solo usamos la opcio -m y -g respectivamente y asi sera mucho mas comodo, en la parte de arriba recueda que el valor en amarillo representa la memoria real libre y no la memoria total cacheada por el sistema.

  • vmstat: proporciona información sobre el uso de la memoria virtual por los threads del núcleo, el disco y la actividad del procesador.

#vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa
 1  0      0 2583032 359664 255088    0    0     1    14   63    22  1  0 99  0
  • iostat: muestra estadísticas sobre la lectura/escritura de los dispositivos (ve detalle mas abajo)

#iostat
Linux 2.6.15-23-386 (owlt02.owliancet.local)  23.09.2009
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,53    0,03    0,04    0,07    0,00   99,33

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               1,53         1,21        28,79     604661   14429814
  • du: muestra el espacio en disco usado por los directorios y sub-directorios, por defecto, partiendo del directorio en uso ‘.’. Si se pasa el nombre de un directorio como parámetro, el análisis se hará sobre éste, por ejemplo si queremos saber cuanto pesan nuestros directorio home podemos dar du -sh /home, cabe mencionar que du suele ser mucho mas preciso que df y esto debido a la forma en la que obtienen los datos uno y otro (en algun otro momento entrare en detalle con algunos "bugs del sistema donde me resulto mas util du que df .
  • df: muestra la cantidad de espacio libre en los diferentes dispositivos montados o pasados como parámetro el ejemplo mas comun es df -h que muestra los puntos de montaje y el porcentaje ocupado en formato humano es decir en Megas y Gigas.
  • ps: muestra una lista de los procesos que se están ejecutando y el nombre del usuario actual, podemos usar como ejemplops -u nombredelusuario ps -uf nombre del usuario  o ps -ef para que nos muestre todos los procesos.
  • who: muestra la lista de usuarios conectados si se usa solo, si usamos who -r veremos el runlevel del sistema, con who -bveremos la ultima ves que se reinicio el sistema o who -a nos da todas las anteriores.

Estos comandos que siguen aplican mas para solaris que para linux como tal y son comandos con información muy especifica, en el caso de vmstat, se explica con mayor profundidad cada una de las columnas, muy util para descifrar la información que realmente se requiere.

 sar (System Activity Reporter) // Solaris y algunas distros linux (red hat por ejemplo) 
Esta es una de las mas potentes herramientas con las que cuenta solaris, basicamente sar se puede encender de varias formas aqui veremos cuando ya esta corriendo el servicio (
svcadm enable sar)
podemos usar sar -r para ver las estadisticas de la memoria en kilobytes
o bien el potente sar -u para ver el comportamiento del cpu, altamente recomendable y quiza algo mas atinado que prstat.


sar
-d => display activity for all block device
-g/p => actividades de paginado
-m => mensajes y actividades de semaforos
-u => utilización de  CPU
-v => reporta el estatus de un proceso, i-node (estos me parece tambien los puedes ver con df -i ).

la información del los historicos se salva dentro de /var/adm/sa para solaris o bien para linux en /var/log/sa

 iostat (Input/Output Statistics) en Solaris

Esta herramienta reporta de manera iterativa la actividad de E/S de terminales, discos y cintas, así como el uso del CPU.
La sintáxis típica del comando es algo como lo siguiente:
> iostat 1 5
Esto significa que cada intervalo de 1 segundo y por 5 veces, el comando nos mostrará

tty        sd21          sd23          sd24          sd25           cpu
tin tout kps tps serv  kps tps serv  kps tps serv  kps tps serv   us sy wt id
0   76   0   0    0    3   0   17  192   3   75   17   3    7    3  3 22 72
0  693   0   0    0    0   0    0    0   0    0   17   4    6    0  3 48 48
0  670   0   0    0    0   0    0    8   2    5   17   4    8    1  4 24 70
0  670   0   0    0    0   0    0    9   2   12   17   4   11    2  5 24 68
0  670   0   0    0    0   0    0  384   3    7    8   2    9    8  8 40 44


Esto es, se nos muestra infomación dividida por 6 bloques de columnas, el primer bloque (tty), concentra dos datos tin y tout, aquí lo que se muestra son los caracteres de entrada y de salida.
Las siguientes cuatro columnas (sd21 a sd25), se refieren a estadísticas de 5 discos duros.
Cada uno de estos discos tiene tres columnas que significan:
  • kps: Bloques por segundo.
  • tps: Transacciones por segundo.
  • serv: Tiempo de servicio promedio, en mlisegundos.
Finalmente, viene una columna especial para el cpu:
  • us: En modo usuario.
  • sy: En modo de sustema.
  • wt: En espera de E/S.
  • id: En modo idle.
Antes de seguir adelante debo mencionarles que la primera línea corresponde a los valores acumulados desde el inicio del servidor hasta el momento de la siguiente iteración.
Las líneas siguientes se refieren a los datos obtenidos desde el momento de la última iteración hasta un segundo después (para efectos del ejemplo, aunque puede elejirse cualquier otro valor).

Sobre este comando, exíste una variante en la cual podemos ver estadísticas extendidas

iostat -xtc

Una salida típica de este comando sería:

    extended device statistics                      tty         cpu
device        r/s    w/s   kr/s   kw/s wait actv  svc_t  %w  %b  tin tout  us sy wt id
sd21          0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0    0    0   0  0  0 100
sd22          0.0    0.0    0.4    0.4  0.0  0.0   49.5   0   0
sd23          0.0    0.0    0.0    0.0  0.0  0.0    0.0   0   0
En donde cada columna significa:
  • r/s: porcentaje de Lecturas por segundo.
  • w/s: porcentaje de Escrituas por segundo.
  • Kr/s: Kb leídos por segundo. ---> importante para ver la cantidad de lectura
  • Kw/s: Kb escritos por segundo. --> importante para ver la escritura
  • wait: Número promedio de transacciones en espera de servicios (Longitud de la cola)
  • actv: Número promedio de transacciones activamente servidas.
  • svc_t: Tiempo promedio de servicio.
  • %w: Porcentaje de tiempo en que la cola no está vacía.
  • %b: Porcentaje de tiempo en que el procesador está ocupado.
En general este comando nos da información bastante útil respecto al uso que están teniendo los discos del sistema. Ahora, que lo que estaría más interesante sería saber qué procesos están haciendo uso de ellos. De alguna forma también nos puede auxiliar el comando ps, ya que entre sus variadas opciones nos puede mostrar datos sobre el uso de la memoria swap. Aunque esto es sólamente una parte muy pequeña del uso sobre el discu duro pues aún nos faltaría averiguar qué archivos tiene abiertos, en dónde está escribiendo o leyendo, etc.
otra opción seria iostat - xpnc que te arroja la utilización del total de los discos mas la controladora, te invito a que analices las opciones en el man de iostat. 

3. lsof (LiSt of Opened Files)

Para tener una idea de qué procesos tienen abiertos archivos regulares, directorios, sockets (Unix e Internet), archivos especiales de bloques, etc; podemos servirnos del comando lsof, que aunque no es nativo de SunOS, se puede incorporar bajando el paquete de http://www.sunfreeware.com/ En donde se encuentra disponible para solaris 6, 8, 9 y 10, para sistemas Linux viene instalado por default (ubuntu, redhat, fedora, centoOS, etc...).

La sintáxis típica es

> lsof 

un ejemplo en linux es lsof elpid.

fuser (solaris 10 en adelante y Linux) : identifica qué procesos están utilizando un fichero o carpeta determinada o un socket por ejemplo tenemos fuser -cunombredelarchivo o carpeta, o por ejemplo para saber quien esta ocupando un punto de montaje.


como podemos ver en la imagen de mas arriba salen los procesos que se están ejecutando (PID ) y además el usuario de tal forma que si quiero desmontar /home/rev o simplemente evitar que la ocupen, podemos matar los procesos por ejemplo o monitorizar el uso de la carpeta
<<< comando ejecutado en ubuntu 14.04LTS>>>

para mas detalle sobre fuser da click aqui

revisa las opciones de man, fuser es un comando muy potente.

vmstat (Virtual Memory Statistics) (solo para Solaris)

Reporta estadísticas del uso de la memoria virtual sobre los hilos del kernel, discos, memoria virtual, traps y actividad del CPU su equivalente en Linux puede ser free o bien top que es algo menos preciso o bien cat /proc/meminfo.

La sintáxis simple es:

> vmstat

Y su salida es:
 kthr      memory            page            disk          faults      cpu
r b w   swap  free  re  mf pi po fr de sr s3 -- -- --   in   sy   cs us sy id
0 0 0 3557544 166696 553 1866 6 3 3  0  0  8  0  0  0  397 10621 2212 9 12 78
En este caso

  • kthr: Reporta el número de hilos del kernel en cualquiera de los siguientes estados:
  1. r: El número de hilos en la cola de ejecución
  2. b: El número de hilos bloqueados, en espera de recursos de E/S.
  3. w: El número de procesos ligeros (LWPs) en swap, esperando por ecursos para finalizar.
> vmstat 2 5
 kthr      memory            page            disk          faults      cpu
r b w   swap  free  re  mf pi po fr de sr s3 -- -- --   in   sy   cs us sy id
0 0 0 3557544 166696 553 1866 6 3 3  0  0  8  0  0  0  397 10621 2212 9 12 78
2 0 0 3437616 159800 2128 5211 0 0 0 0  0  0  0  0  0  438 13856 2318 35 19 46
5 0 0 3437616 159792 2324 5604 0 0 0 0  0  1  0  0  0  425 14711 2391 39 20 41
0 0 0 3439064 161616 200 552 0 4  4  0  0  2  0  0  0  362 7254 2126  9  6 86
0 0 0 3439064 161616 7  80  0  0  0  0  0  0  0  0  0  352 6649 2099  6  4 90


Aún con lo que hemos visto hay otra opción interesante para este comando que es el switch -p

> vmstat -p 2 3

Cuya salida sería como esta:

memory page executable anonymous filesystem
swap free re mf fr de sr epi epo epf api apo apf fpi fpo fpf
3555664 166616 553 1867 3 0 0 3 0 0 0 0 0 3 3 3
3439168 157080 7 93 0 0 0 0 0 0 0 0 0 0 0 0
3439160 157072 7 80 0 0 0 0 0 0 0 0 0 0 0 0


Como se observa, se agregan nuevas columnas, esto debido a que el modificador -p hace que vmstat reporte también la actividad de la paginación. Las columnas nuevas significan:

epi Executable page-ins.

epo Executable page-outs.

epf Executable page-frees.

api Anonymous page-ins.

apo Anonymous page-outs.

apf Anonymous page-frees.
fpi File system page-ins.

fpo File system page-outs.

fpf File system page-frees.


Debe decirse que en equipos multiprocesadores, vmstat presenta estadísticas promedio de los procesadores. A fin de tener los datos específicos de cada uno de ellos es necesario usar mpstat, herramienta que se describe a continuación.

 mpstat (Multi Processor Statistics)

Este comando devuelve reportes estadísticos de cada uno de los procesadores o bien, por grupo de procesadores.

La sintáxis común es:

> mpstat

Y su salida es:

CPU minf mjf xcal  intr ithr  csw icsw migr smtx  srw syscl  usr sys  wt idl
0 1028   0  177   353  243 1083   30  366   62    0  5631   10  13   0  77
1  839   0  205    44   14 1129   29  365   51    0  4990    9  12   0  79

Esto significa básicamente que en el sistema tenemos instalados dos procesadores, y si revisamos las cuatro últimas columnas encontraremos algo interesante, ahí se describe el porcentaje que el procesador ha dedicado a procesos de usuario (usr), procesos de sistema (sys), así como el porcentaje de tiempo que ha pasado esperando por E/S (wt) y finalmente el porcantaje de tiempo que el procesador ha estado inactivo (idl).

El resto de las columnas son:
  • minf: Fallas menores
  • mjf: Fallas mallores
  • xcal: Llamadas cruzadas interprocesadores.
  • intr: Interrupciones.
  • ithr: Interrupciones como hilos.
  • csw: Cambios de contexto
  • icsw: Cambios involuntario de contexto
  • migr: Migración de hilos (a otros procesadores)
  • smtx: Spins en mutexes (bloqueo no adquirido en el primerintento)
  • srw: Spins en bloqueos de lectura/escritura (bloqueo no adquirido en el primerintento)
  • syscl: Llamadas al sistema
  • set: Grupo de procesadores al que se pertenece
  • usr: Porcentaje de tiempo en procesos de usuario.
  • sys: Porcentaje de tiempo en procesos de sistema.
  • wt: El tiempo de espera de E/S no se calcula ya como porcentaje de tiempo de CPU, por lo tanto siempre va a regresar 0 su medición.
  • idl: Porcentaje de tiempo sin utilizar.

Comandos proc (Processes Commands)

Este conjunto de comandos toma información sobre los procesos en especial entonces si queremos buscar un proceso podemos usar pgrep y el PID (process ID) 
para problemas con Java podemos utilizar pstack siendo este comando sumamente util para ver el comportamiento de una app en cuanto a consumo de memoria.

Tambien tenemos el comando pkill y el process id para matar un proceso  muy similar al kill -9 
  • pflags:
  • pcred
  • pldd
  • psig
  • pstack
  • pfiles
  • pstop
  • prun
  • pwait
  • ptime

Fuente : http://tecnoycosas.blogspot.ch/2012/05/comandos-basicos-para-monitoreo.html

Comentarios