Al parecer hay un poco de confusión sobre cómo Ganglia y específicamente gmond (ganglia monitoring daemon) recolectan y distribuyen los datos para que gmetad (ganglia meta daemon) los procese. Sucede que por defecto gmond usa multicast para enviar los datos, ésto provoca que todos nuestros nodos estén enviando y recibiendo la información entre sí.

Lo mejor es definir a un sólo nodo de un clúster para que maneje la información del resto de nodos. En éstos desactivaremos la opción udp_recv_channel y sólo trabajaremos con udp_send_channel:

udp_send_channel {
  host = X.X.X.X
  port = 8650
  ttl = 1
}

Dónde X.X.X.X es nuestro nodo recolector en éste clúster. En X.X.X.X usaremos udp_send_channel (para que se envíe los datos a sí mismo), udp_recv_channel (para recibir los datos de los otros nodos) y tcp_accept (para que gmetad en otro servidor consulte la información vía un puerto TCP):

udp_send_channel {
  host = X.X.X.X
  port = 8650
  ttl = 1
}
udp_recv_channel {
  port = 8650
  bind = X.X.X.X
}
tcp_accept_channel {
  port = 8649
}

En nuestro servidor donde esté gmetad y seguramente donde esté la interfaz web de ganglia pondremos:

data_source "nombredecluster" X.X.X.X:8649

Los puertos pueden variar e incluso a veces será necesario hacer túneles si es que no tenemos acceso directo a los puertos de los nodos a monitorear pero eso ya es materia de otro post. Eso sí hay que verificar que los hostnames se correspondan entre sí en los nodos para que gmetad pueda diferenciar quién es quién.

Ganglia

jul 4, 19:13

Ganglia es una herramienta originalmente dirigida al monitoreo de sistemas tipo clusters o grids recolectando información de todos los nodos y procesándola para mostrarla en gráficos consolidados. Lo he encontrado particularmente útil porque me permite obtener el dato en el mismo servidor origen (digamos número de consultas mysql) y enviarlo a otro servidor central que hace tareas de monitoreo.

Se instala de manera muy sencilla y se compone de tres partes: Gmond que es un servicio que recolecta los datos y los envía a otro servidor. Gmetad se encarga de procesar esta información y generar los archivos para el rrdtool . Y finalmente un frontend web para mostrar la información.

En el equipo o nodo que queremos monitorear instalamos ganglia y gmond. En el archivo /etc/gmond.conf cambiamos sólo el nombre del cluster al que pertenece nuestro nodo para agruparlo con otros. Gmond utiliza multicast para enviar su información pero también se puede accesar a través de un puerto TCP (por defecto el 8649).

En el servidor de monitoreo instalamos ganglia, gmetad y el frontend. Y ahí más bien solo nos interesa modificar el archivo /etc/gmetad.conf con los datos de los nodos que vamos a monitorear:

data_source “micluster” x.x.x.x:8649

Y listo, reiniciamos los servicios en cada lado y ya debería existir comunicación entre ambos. Para comprobarlo accesamos a ganglia via web y ya veremos nuestro cluster “micluster” y los nodos que hemos accesado además de una serie de información que de arranque nos ofrece ganglia (carga de CPU, memoria, etc.). Además nos ofrece un consolidado de todos los equipos en el cluster.

Claro que se puede hacer lo mismo con Cacti , pero el proceso se me hizo mucho más sencillo y te permite graficar la información que desees siempre y cuando la puedas obtener como un valor numérico. Este proceso lo veremos en otra ocasión.

Pueden darle una mirada a una demo de Ganglia para el UC Berkeley Millenium Project . Aunque ya sabía de Ganglia anteriormente no había notado su poder hasta ahora y en parte fue gracias a la presentación que hizo John Allspaw de Flickr para la conferencia Velocity, en la cual habla de Ganglia como una de las herramientas que usan en Flickr para el planeamiento de capacidad.