Comandos para determinar o nível de uso do servidor

Comandos para determinar o nível de uso do servidor

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: sarfaz parte do pacote sysstat!

Sem nenhum argumento, o sarcomando 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 sarferramenta 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 acpara 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 psacctpacote 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 timecampo). 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.

informação relacionada