
Estoy escribiendo un script para un nuevo programa que se conectará a un grupo de máquinas en un parque de máquinas virtuales y, con suerte, comprobará su nivel de uso. Los clientes de VM son una combinación de RHEL y CentOS y se ejecutan en varios hosts KVM.
Espero poder encontrar las máquinas virtuales que ya no son necesarias, verificando para qué se están utilizando ahora.
¿Cuáles serían buenos indicadores del uso del sistema y qué comandos podrían ayudarme a calificar el sistema en consecuencia?
Estoy pensando que si combino comandos como uptime, "chkconfig --list", last y ps puedo determinar la tasa de uso, pero a un nivel muy inexacto.
Con el uso del sistema, estoy pensando en si la máquina está en uso o si podría apagarse sin dañar ninguna aplicación o usuario.
Con los ejemplos puedo determinar si hay servidores que son muy diferentes al resto, pero no sabría afirmar si está en uso o no.
Respuesta1
Supervisión
Esta es una pregunta bastante abierta. Hay toneladas de aplicaciones que puedes usar para monitorear la carga de la CPU de un servidor, el tráfico de red, la E/S de archivos, etc.
En el nivel más básico, comenzaría monitoreando la carga de CPU de las máquinas virtuales. Puede monitorear esto de dos maneras, ya sea dentro de las propias máquinas virtuales o externamente en los hosts de las máquinas virtuales.
Monitoreo a través del host KVM
Dado que una VM en su nivel más básico es solo una aplicación, simplemente puede monitorear cada VM en un servidor KVM observando su proceso qemu correspondiente.
$ ps -C qemu-kvm -o pid,time,etime,pcpu,args|perl -lane 'printf "%-7s %-12s %-12s %-5s %-5s %-s\n", @F[0..3,9,13]'
PID TIME ELAPSED %CPU
3860 11:37:32 85-10:32:43 0.5 512 mungr
4005 3-22:34:33 85-10:32:25 4.6 512 cobbler
4447 4-20:11:27 85-10:31:14 5.6 2048 mercury
6788 02:28:58 54-08:59:04 0.1 1024 xwiki
23916 1-03:46:02 80-09:51:47 1.4 512 fan
32539 02:17:48 1-08:50:54 6.9 1024 visualstudio
Algo como lo anterior, por ejemplo, mostraría el nombre del KVM (sexta columna) con el % de CPU en uso (cuarta columna), junto con el tiempo real de CPU que han usado hasta ahora (segunda columna) y el tiempo transcurrido. Has estado corriendo (tercera columna). La quinta columna muestra la cantidad de RAM asignada al KVM.
Monitoreo a través de los invitados KVM
Si desea una vista más detallada, deberá acceder a cada VM y recopilar los datos dentro de ellas localmente. Una forma de obtener datos bastante buenos es a través de la herramienta sar
. La mayoría de los sistemas operativos RHEL, CentOS y Fedora tienen este paquete instalado de forma predeterminada.
NOTA: sar
¡Es parte del paquete sysstat!
Sin ningún argumento, el sar
comando básico devolverá la utilización de la CPU para el día actual, desde las 12 a. m. hasta la hora actual.
Por ejemplo:
$ date
Tue May 7 21:31:54 EDT 2013
$ sar
Linux 2.6.35.14-106.fc14.x86_64 (grinchy) 05/07/2013 _x86_64_ (4 CPU)
12:00:01 AM CPU %user %nice %system %iowait %steal %idle
12:10:01 AM all 24.86 0.00 3.98 6.01 0.00 65.16
12:20:01 AM all 25.12 0.00 3.98 5.98 0.00 64.93
...
...
09:20:01 PM all 36.06 0.00 5.00 4.95 0.00 54.00
09:30:01 PM all 35.40 0.00 4.97 4.66 0.00 54.97
Average: all 22.29 0.08 4.37 4.80 0.00 68.46
La última línea le muestra los promedios generales para cada medida correspondiente. Observe también que los datos se muestrean cada 10 minutos. Por supuesto, esto es configurable.
La sar
herramienta puede hacer mucho más que simplemente utilizar la CPU. Es un paquete completo y le permite monitorear la E/S de archivos, redes, paginación de memoria, etc.
Además, puede generar los datos en formatos CSV o XML (entre otros) y también puede generar informes.
Instalaciones de paquetes
Su idea de usar chkconfig --list
es cómo comenzaría a determinar qué servicios están configurados en un cuadro determinado. Dependiendo de cómo esté configurada la caja, las nuestras generalmente están configuradas para ejecutarse en el nivel de ejecución 3, yo usaría este comando:
$ chkconfig --list |grep 3:on
abrtd 0:off 1:off 2:off 3:on 4:off 5:on 6:off
acpid 0:off 1:off 2:on 3:on 4:on 5:on 6:off
auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
avahi-daemon 0:off 1:off 2:off 3:on 4:on 5:on 6:off
...
...
vboxdrv 0:off 1:off 2:on 3:on 4:on 5:on 6:off
vboxweb-service 0:off 1:off 2:on 3:on 4:on 5:on 6:off
xinetd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
Inicio de sesión del usuario
Puede utilizar la herramienta ac
para determinar si las personas inician sesión en un sistema y durante cuánto tiempo.
Por ejemplo:
$ ac -pd
sam 0.15
Apr 28 total 0.15
sam 0.32
Apr 29 total 0.32
sam 0.00
Apr 30 total 0.00
sam 0.01
joeuser 0.00
May 3 total 0.01
sam 1.54
May 5 total 1.54
sam 0.01
Today total 0.01
Muestra un desglose diario de cuántas horas un usuario determinado estuvo conectado a un sistema.
Contabilidad de procesos
Si realmente desea rastrear lo que sucede en una máquina Linux, puede habilitar la cuenta de proceso. Este es el servicio /etc/init.d/psacct
. Esto le brindará detalles completos sobre cuándo se ejecutó un servicio por última vez, qué comandos ejecutó por última vez un usuario determinado, etc. Son prácticamente los nueve metros completos.
ejemplos
comandos ejecutados por última vez por el usuario vivek
$ lastcomm vivek
userhelper S X vivek pts/0 0.00 secs Mon Nov 13 23:58
userhelper S vivek pts/0 0.00 secs Mon Nov 13 23:45
rpmq vivek pts/0 0.01 secs Mon Nov 13 23:45
rpmq vivek pts/0 0.00 secs Mon Nov 13 23:45
rpmq vivek pts/0 0.01 secs Mon Nov 13 23:45
gcc vivek pts/0 0.00 secs Mon Nov 13 23:45
la última vez que se ejecutó rm
$ lastcomm rm
rm S root pts/0 0.00 secs Tue Nov 14 00:39
rm S root pts/0 0.00 secs Tue Nov 14 00:39
rm S root pts/0 0.00 secs Tue Nov 14 00:38
Por ejemplo, esta última técnica podría usarse para ver la última vez que se ejecutó Apache (httpd).
El psacct
paquete también tiene muchas otras herramientas. Esto es sólo para darle algunas ideas y comenzar.
Referencias
Respuesta2
Tu puedes correr
ps -C qemu-kvm -o pid,time,etime,args
en el host regularmente y verifique el cambio en el tiempo de CPU (el time
campo). Eso le permite una evaluación durante un período más amplio. Puede guardar los resultados de vez en cuando para no perderlos cuando una máquina virtual falla o se apaga.