
Estou criando um script para um novo programa que se conectará a um cluster de máquinas em um parque de VMs e, com sorte, verificará seu nível de uso. Os clientes VM são uma combinação de RHEL e CentOS e são executados em vários hosts KVM.
Espero poder encontrar as VMs que não são mais necessárias, verificando para que estão sendo usadas no momento.
Quais seriam bons indicadores para o uso do sistema e quais comandos poderiam me ajudar a avaliar o sistema adequadamente?
Estou pensando que se eu combinar comandos como uptime, "chkconfig --list", last e ps posso determinar a taxa de uso, mas em um nível muito inato.
Com o uso do sistema fico pensando se a máquina está em uso, ou se pode ser desligada, sem prejudicar nenhum aplicativo ou usuário.
Com os exemplos, posso determinar se existem servidores muito diferentes dos demais, mas não saberia afirmar se estão em uso ou não.
Responder1
Monitoramento
Esta é uma questão bastante aberta. Existem vários aplicativos que você pode usar para monitorar a carga da CPU de um servidor, tráfego de rede, E/S de arquivos, etc.
No nível mais básico, eu começaria monitorando a carga da CPU das VMs. Você pode monitorar isso de duas maneiras, dentro das próprias VMs ou externamente nos hosts da VM.
Monitoramento através do Host KVM
Como uma VM em seu nível mais básico é apenas um aplicativo, você pode simplesmente monitorar cada VM em um servidor KVM observando o processo qemu correspondente.
$ 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 o acima, por exemplo, exibiria o nome do KVM (6ª coluna) com a% CPU em uso (4ª coluna), junto com o tempo real de CPU usado até o momento (2ª coluna) e o tempo decorrido que eles estamos em execução (3ª coluna). A quinta coluna mostra a quantidade de RAM alocada para o KVM.
Monitoramento através dos convidados KVM
Se você quiser uma visão mais detalhada, precisará realmente acessar cada VM e coletar os dados dentro delas localmente. Uma maneira de obter dados muito bons é por meio da ferramenta sar
. A maioria dos sistemas operacionais RHEL, CentOS e Fedora têm este pacote instalado por padrão.
OBSERVAÇÃO: sar
faz parte do pacote sysstat!
Sem nenhum argumento, o sar
comando básico retornará a utilização da CPU para o dia atual, das 12h até o horário atual.
Por exemplo:
$ 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
A última linha mostra as médias gerais para cada medida correspondente. Observe também que os dados são amostrados a cada 10 minutos. É claro que isso é configurável.
A sar
ferramenta pode fazer muito mais do que apenas utilizar a CPU. É um pacote completo e permite monitorar E/S de arquivos, rede, paginação de memória, etc.
Além disso, pode gerar os dados nos formatos CSV ou XML (entre outros) e também pode gerar relatórios!
Instalações de pacotes
Sua ideia de usar chkconfig --list
é como eu começaria a determinar quais serviços estão configurados em uma determinada caixa. Dependendo de como a caixa está configurada, a nossa normalmente está configurada para ser executada no nível de execução 3, eu usaria 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
Login do usuário
Você pode usar a ferramenta ac
para determinar se as pessoas estão fazendo login em um sistema e por quanto tempo.
Por exemplo:
$ 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
Mostra um detalhamento diário de quantas horas um determinado usuário esteve conectado a um sistema.
Contabilidade de processos
Se você realmente quer rastrear o que está acontecendo em uma máquina Linux, você pode habilitar a conta do processo. Este é o serviço /etc/init.d/psacct
. Isso lhe dará detalhes completos sobre quando um serviço foi executado pela última vez, quais comandos um determinado usuário executou pela última vez, etc.
exemplos
comandos executados pela última vez pelo usuário 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
última vez que rm foi executado
$ 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 exemplo, esta última técnica poderia ser usada para ver a última vez que o Apache foi executado (httpd).
O psacct
pacote também possui muitas outras ferramentas. Isto é apenas para lhe dar algumas idéias e começar.
Referências
Responder2
Você pode correr
ps -C qemu-kvm -o pid,time,etime,args
no host regularmente e verifique a mudança no tempo da CPU (o time
campo). Isso permite uma avaliação durante um período maior. Você pode salvar os resultados de tempos em tempos para não perdê-los quando uma VM travar ou for desligada.