Instalação


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. :-)

Utilização


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.