Instalação


A última versão de gappmon trabalha com Ganglia 3.x.x, se você ainda utiliza Ganglia 2.5.x clique aqui.

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

  $ cp gappmon-ganglia-web-3.0.0.shar ganglia-3.0.0/web/
  $ cd ganglia-3.0.0/web/
  $ sh gappmon-ganglia-web-3.0.0.shar
  x - creating lock directory
  x - extracting ...
  # cp ../web/ /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.

Ganglia 3.0.0 não possui um intervalo de listening, isto é, os dados são recebidos pelo multicast em tempo real. Assim não é necessário utilizar primeiro patch (usar somente para a familia 2.5.x).

Para aplicar o patch de alteração faça (para a versão 3.0.0):

  $ tar -xzf ganglia-3.0.0.tar.gz
  $ cd ganglia-3.0.0
  $ patch -p1 < ../gmetad-polling-rrds-ganglia-3.0.0.patch 
  patching file gmetad/data_thread.c
  patching file gmetad/rrd_helpers.c
  
  # continue a instalação normalmente...

Para informações sobre a instalação de Ganglia, visite http://ganglia.sourceforge.net/docs/.

Nesse exemplo o intervalo escolhido foi de 2 segundos. 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.