Ganglia: Installation, Konfiguration, Inbetriebnahme

Diesen Beitrag schrieb ich 15 Jahre und 7 Monate zuvor; die nachfolgenden Ausführungen müssen heute weder genau so nach wie vor funktionieren, noch meiner heutigen Meinung entsprechen. Behalte das beim Lesen (und vor allem: beim Nachmachen!) bitte stets im Hinterkopf.

Geschätzte Lesezeit: 2 Minuten

Um lustig bunte Bildchen unseres Clusters zu erhalten, installieren wir Ganglia. Für die Auswertung der Daten ist gmetad zuständig, der nur auf master01 zum Einsatz kommen wird; der gmond hingegen, der für das Einsammeln der Daten zuständig ist, muss auf jedem Host laufen, der überwacht werden soll.

Zuerst müssen die Abhängigkeiten aufgelöst werden; die Vorgehensweise ist für Debian und CentOS leicht unterschiedlich. Insbesondere benötigen wir auf master01 einen apache mit PHP, da hier die Bildchen gemalt und angezeigt werden sollen.

Abhängigkeiten auf master01 installieren (Debian)

$ apt-get install librrd2 librrd2-dev \
rrdtool libxpat1 libexpat1-dev libapr1 \
libapr1-dev libconfuse0 libconfuse-dev apache2 php5

Ganglia auf master01 installieren

Sobald diese fehlerfrei installiert sind, nach /usr/src wandern, das Source-Paket von ganglia herunterladen, auspacken, kompilieren, installieren; wichtig ist hier die Option --with-gmetad, da der gmetad für das Sammeln und Auswerten der Daten zuständig sein wird.

$ cd /usr/src$ wget http://heanet.dl.sourceforge.net/sourceforge/ganglia/ganglia-3.1.0.tar.gz 
$ tar xvfz ganglia-3.1.0.tar.gz
$ cd ganglia-3.1.0
$ ./configure --prefix=/opt/local --with-gmetad 
$ make && make install

Besonderheit bei CentOS

Wie eingangs bereits erwähnt ist die Vorgehensweise bei auf einem CentOS-System eine leicht andere:

$ yum install apr.i386 apr-devel.i386 tar.i386 make.i386 libxml2-devel.i386 gcc-c++.i386 expat-devel.i386 gettext-devel.i386
$ export CC="/usr/bin/cc -I/opt/local/include -L/opt/local/lib"

Danach die Konfiguration für ldconfig beackern:

## file: /etc/ld.so.conf.d/i486-linux-gnu.conf"
/opt/local/lib
/lib
/usr/lib
/usr/local/lib

libconfuse gibt es nicht als RPM, das müssen wir also von Hand nach /opt/local bauen:

$ cd /usr/src
$ wget http://bzero.se/confuse/confuse-2.6.tar.gz
$ tar xvfz confuse-2.6.tar.gz
$ cd confuse-2.6
$ ./configure --prefix=/opt/local --enable-shared
$ make && make install
$ ldconfig -v

Konfiguration der Dienste

Die Konfigurationsdateien finden sich, sofern dies beim configure nicht anders angegeben wurde, unter /etc/ganglia und heißen gmond.conf (für den gmond, der die Daten liefert) und gmetad.conf (für den gmetad, der die gesammelten Daten auswertet und die Bildchen malt). Diese Dateien müssen wir anlegen.

Webinterface

Als erstes müssen wir herausfinden, wo unser apache2 seine Daten ablegt; da dieser Webserver nur genau diese eine Aufgabe hat im Moment – nämlich das Ganglia-Webinterface anzeigen – orientieren wir uns an der Konfiguration des apache-Default und finden heraus, welches DocumentRoot es verwendet:

$ grep -i documentroot /etc/apache2/sites-enabled/000-default
   DocumentRoot /var/www/

Also legen wir uns innerhalb von /var/www einen Ordner an und schaufeln die benötigten Daten hinein:

$ mkdir /var/www/ganglia
$ cp -r /usr/src/ganglia-3.1.0/web/* /var/www/ganglia/

gmetad

gmetad dient der Auswertung der Daten und läuft ausschließlich auf unserem master01, der auch das Webinterface zur Verfügung stellen wird.

$ mkdir /etc/ganglia
$ cd /etc/ganglia

Dann folgt die eigentliche Konfiguration des Dienstes:

## file: "/etc/ganglia/gmetad.conf"
data_source "testcluster01" 30 localhost
scalable on
gridname "SpielCluster01"
trusted_hosts 127.0.0.1 10.16.0.0/24
setuid on
setuid_username "nobody"
xml_port 8651
interactive_port 8652
server_threads 10
rrd_rootdir "/var/ganglia/rrd"

Die Angabe in der letzten Zeile, rrd_rootdir, ist Geschmackssache; die ursprüngliche Installation sah vor, dass diese Daten in /var/lib/ganglia/rrds abgelegt werden – ich hab das mal angepasst. Doch wichtig: ändert man diese Variable, muss man auch die conf.php des Webinterface anpassen!

## file: "/var/www/ganglia/conf.php"
# Where gmetad stores the rrd archives.
$gmetad_root = "/var/ganglia";
$rrds = "$gmetad_root/rrd";

Wichtig ist dann, das Verzeichnis anzulegen, entsprechende Zugriffsrechte zu setzen – und den Dienst ein erstes Mal (als root!) zu starten:

$ mkdir -p /var/ganglia/rrd
$ chown -R nobody /var/ganglia
$ /opt/local/sbin/gmetad --debug=9
Going to run as user nobody  
Sources are ...
Source: [testcluster01, step 30] has 1 sources
        127.0.1.1
xml listening on port 8651 
interactive xml listening on port 8652
cleanup thread has been started
Data thread 262161 is monitoring [testcluster01] data source
        127.0.1.1
data_thread() got no answer from any [testcluster01] datasource
data_thread() got no answer from any [testcluster01] datasource

Sobald der Dienst gmetad gestartet ist, ist auch das Webinterface verfügbar; natürlich wird hier noch nicht viel angezeigt, da ja noch keine Daten einlaufen. Deshalb werden im nächsten Schritt die gmond-Instanzen konfiguriert und gestartet.

gmond

$ /opt/local/sbin/gmond -t > /etc/ganglia/gmond.conf

Dieser kleine Befehl erstellt und eine Basiskonfiguration für den gmond, die nur in wenigen Punkten angepasst werden muss.

## file: "/etc/ganglia/gmond.conf"
...
globals {                    
  daemonize = yes              
  setuid = yes             
  user = compute
  debug_level = 0               
  max_udp_msg_len = 1472        
  mute = no             
  deaf = no             
  host_dmax = 0 /*secs */ 
  cleanup_threshold = 300 /*secs */ 
  gexec = no             
  send_metadata_interval = 0     
} 
...
cluster { 
  name = "SpielCluster01" 
  owner = "Bla and Fasel GmbH and Co. KG" 
  latlong = "N49.xxxxxx E6.xxxxxx" 
  url = "http://10.16.0.1/ganglia/" 
} 
...
host { location="master01" }
udp_send_channel { mcast_join = 224.0.0.0 port = 8649 ttl = 1 }
udp_recv_channel { mcast_join = 224.0.0.0 port = 8649 }
tcp_accept_channel { port = 8649 }
...

Netzwerkkonfiguration

Wie hier zu sehen ist, basiert das Setup der Dienste darauf, dass auf den Maschinen die entsprechende Multicast-Route gesetzt ist; für den Moment setzen wir diese von Hand und überall:

$ /sbin/route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0

Um sie boot safe zu machen, kann man den Aufruf beispielsweise in die /etc/rc.local hineinschreiben. Und natürlich müsst ihr das Netzwerk-Interface nehmen, das das für euch richtige ist! Anschließend kann auch dieser Dienst gestartet werden:

gmond starten

$ su - compute
$ /opt/local/sbin/gmond --debug=9

Dass das funktioniert zeigt sich an Meldungen wie „Processing a metric value message from“ oder „Got a heartbeat message“; funktioniert es nicht wie gewünscht ist es wichtig, das syslog zu checken, ggf. auch das Error-Log des apache2.

Alle Bilder dieser Seite: © Marianne Spiller – Alle Rechte vorbehalten
Hintergrundbild: Bild genauer anschauen – © Marianne Spiller – Alle Rechte vorbehalten

Eure Gedanken zu „Ganglia: Installation, Konfiguration, Inbetriebnahme“

Ich freue mich über jeden Kommentar, es sei denn, er ist blöd. Deshalb behalte ich mir auch vor, die richtig blöden kurzerhand wieder zu löschen. Die Kommentarfunktion ist über GitHub realisiert, weshalb ihr euch zunächst dort einloggen und „utterances“ bestätigen müsst. Die Kommentare selbst werden im Issue-Tracker und mit dem Label „✨💬✨ comment“ erfasst – jeder Blogartikel ist ein eigenes Issue. Über GitHub könnt ihr eure Kommentare somit jederzeit bearbeiten oder löschen.