|
|
O sistema implementado consiste em dois programas, gappmon e gcleanup, que realizam a monitoração de um processo e a limpeza da base de dados, respectivamente.
O gappmon foi implementado utilizando rotinas da biblioteca libProc, que coletam informações relativas a um dado processo. gappmon deve ser lançado, em todos os nós do cluster, antes da aplicação. Assim, cada gappmon localiza os processos da aplicação no nó local e acompanha sua execução, desde o inicio, coletando métricas e enviando-as diretamente ao multicast de Ganglia.
Para instalar gappmon faça (deve ser instalado em todos os nós de execução do cluster):
tar -xzf gappmon-0.1.1.tar.gz cd gappmon-0.1.1 ./configure make make install
Instalação utilizando pacotes rpm:
# rpm -Uvh gappmon-0.1.1-1.i386.rpm
Preparing... ########################################### [100%]
1:gappmon ########################################### [100%]
Quando uma nova métrica é publicada no multicast, o centralizador gmetad cria uma base de dados (RRDtool) para armazenar as novas informações de monitorações. Quando a aplicações termina essa base de dados pode ser descartada. Por isso, foi implementado o programa rrdcleanup, que deve ser instalado em todos os servidores que possuem uma cópia da base de dados RRD (isto é, que rodam um gmetad). rrdcleanup entra em execução a cada 5 minutos e procura por dados que não são mais necessários, isto é, compara a base de dados com as métricas de uma xml query feita ao gmetad local. Os RRDs que não estão mais sendo usados são apagados. Isto evita que a base de dados cresça muito.
Para instalar gcleanup faça (deve ser instalado no frontend do cluster, que possui gmetad):
tar -xzf gcleanup-0.1.1.tar.gz cd gcleanup-0.1.1 ./configure make make install cp gcleanup.init /etc/rc.d/init.d/gcleanup chkconfig --add gcleanup chkconfig --list gcleanup 0:off 1:off 2:on 3:on 4:on 5:on 6:off etc/init.d/gcleanup start Starting GANGLIA gcleanup: [ OK ]
Para Gentoo Linux, utilize esta versão do script de inicialização gcleanup.init e faça:
cp gcleanup.init /etc/init.d/gcleanup rc-update add gcleanup default rc-status /etc/init.d/gcleanup start Starting GANGLIA gcleanup: [ OK ]
A visualização das informações coletadas é feita através de gráficos criados com RRDtool. Para facilitar a visualização foi implementada uma extensão da interface Web de Ganglia. Essa extensão agrupa as informações de uma mesma aplicação e permite a seleção do intervalo e da granularidade de tempo a ser visualizada.
Para instalar gappmon-webfrontend faça (deve ser instalado no servidor web):
$ tar -xzf gappmon-webfrontend-2.5.7.tar.gz $ cp gappmon-ganglia-webfrontend-2.5.7.shar gappmon-webfrontend-2.5.7 $ cd gappmon-webfrontend-2.5.7 $ sh gappmon-ganglia-webfrontend-2.5.7.shar x - creating lock directory x - extracting ... cp ../gappmon-webfrontend-2.5.7 /var/www/html/ganglia -r
Após a instalação teste http://localhost/ganglia, irá aparecer um link para "Application View" na pagina de visualização de cluster e host.
Na monitoração de programas paralelos, o intervalo de coleta de dados é um ponto crítico, uma vez que a dinamicidade das aplicaçãoes requer um acompanhamento com uma pequena granularidade de tempo. Para tornar a visualização mais significativa, foi necessário implementar 2 patchs que alteram a versão original de Ganglia. O primeiro permite a escolha do intervalo entre heartbeats do gmond via arquivo de configuração /etc/gmond.conf. Isto é importante porque pode reduzir o intervalo de publicação das métricas definidas pelo usuário através do programa gmetric ou gappmon. O outro permite intervalos de polling menores que 5 segundos para o gmetad e aumenta a capacidade dos arquivos rrd de acordo com os intervalos.
A escolha do invervalo de polling é um ponto crítico, que pode limitar a escalabilidade da ferramenta. Um intervalo muito pequeno pode levar a um consumo elevedo do tempo de CPU (essa figura mostra a utilização de CPU do gmetad, em um cluster com 20 nós e um intervalo de polling de 1 segundo). Além disso, quanto menor o intervalo de tempo, maior será a base de dados gerada. A tabela a seguir mostra o tamanho de base de dados resultante para cada intervalo de polling (step) em segundos.
Para aplicar os patchs de alteração faça (para a versão 2.5.7):
$ tar -xzf ganglia-monitor-core-2.5.7.tar.gz $ cd ganglia-monitor-core-2.5.7 $ patch -p1 < ../gmetad-polling-rrds-ganglia-2.5.7.patch patching file gmetad/cleanup.c patching file gmetad/data_thread.c patching file gmetad/gmetad.c patching file gmetad/rrd_helpers.c $ patch -p1 < ../gmond-heartbeat-ganglia-2.5.7.patch patching file gmond/gmond.conf patching file gmond/monitor.c patching file lib/ganglia/gmond_config.h patching file lib/gmond_config.c # continue a instalação normalmente...
Para informações sobre a instalação de Ganglia, visite http://ganglia.sourceforge.net/docs/.
Após a instalação, altere o heartbeat dos gmonds (edite /etc/gmond.conf):
vim /etc/gmetad.conf ... # # Listenig interval # default: 0 (gmond uses a random number between 10 and 20) heartbeat 2 #
Nesse exemplo o intervalo escolhido foi de 2 segundos. Agora, altere o intervalo de polling do gmetad (edite /etc/gmetad.conf):
vim /etc/gmetad.conf ... data_source "my cluster" 2 localhost my.machine.org ...
Feito! Instalação concluída. :-)
Para monitorar uma aplicação basta iniciar o gappmon em todos os nós, antes de lançar a aplicação. Por exemplo, para monitorar a execução do programa MPI ex19 execute em cada um dos nós do cluster:
gappmon ex19
gappmon irá aguardar, em background, o incio da execução de ex19! Lançar o programa:
mpirun -np 4 ex19 -dmmg_nlevels 8
Após a aplicação ser laçada, gappmon começa a monitoração da execução dos processos espalhados pelo cluster (isso pode ser observado de forma on-line, através da interface Web de Ganglia). Quando a aplicação termina usa execução os gappmons encerram a monitoração e morrem. Para automatizar o processo, convém a utilização de algum sistema de execução remota de comando, como gexec ou um shell paralelo qualquer.