====== Munin-Überwachung via SSH ====== Munin ermöglicht es mehrere Hosts zu überwachen. Dabei lassen sich fast alle systemwichtigen Parameter monitoren. Da ich keine offenen Munin-Nodes auf den Hosts laufen lassen möchte, werden die Nodes mittels SSH-Port-Forwarding auf meinem Überwachungsserver auf verschiedenen Ports "eingehängt". Die Original-Anleitung findet sich hier: http://munin.projects.linpro.no/wiki/MuninSSHTunneling Das SSH-Tunnel-Script hat mindestens einen Typo-Fehler, außerdem Stimmt der Pfad für die Config-Datei nicht. Weiterhin wird mit keinem Wort erwähnt, dass man SSH-Keys braucht. Die Integration in die Datei ///etc/init.d/munin// finde ich auch bescheiden, da das Skript mit dem Paket mitkommt. Update-Probleme sind so vorherbestimmt. == Munin-Config anpassen == Das geht wie auf der Website beschrieben. Für jeden Host wird ein anderer Port reserviert: [localhost] # mark localhost with comments address 127.0.0.1 # this hides from munin-node check port 4949 # use_node_name yes # # use real hostnames in [] [Server-A] address 127.0.0.1 port 5001 use_node_name yes [Server-B] address 127.0.0.1 port 5002 use_node_name yes [Server-C] address 127.0.0.1 port 5003 use_node_name yes Die Kommentarzeichen hinter dem Lokalen Munin-Node ganz oben nicht vergessen, sonst wird versucht auch nach Localhost zu tunneln. ;-) Zwischen den [] muss der Hostname als ganzes rein z. B."mein.server.tld" usw. ===== SSH-Keys anlegen ===== In ///etc/passwd// statt ''/bin/false'' für den Benutzer Munin ''/bin/bash'' setzen. Dann mittels ''su munin'' der Benutzer munin werden und dort mittels ''ssh-keygen'' ein Schlüsselpaar ohne Passwort erzeugen. Den Schlüssel aus der Datei ///var/lib/munin/.ssh/id_rsa.pub// dann auf die einzelnen Hosts verteilen und dort bei einem Benutzer in die ///var/lib/munin/.ssh/authorized_keys// aufnehmen. Man kann dafür auf den Zielsystemen auch den Benutzer munin hernehmen, allerdings muss man dann dort auch die Shell auf ''/bin/bash'' in der Datei ///etc/password// ändern und dafür sorgen, dass sich niemand unberechtigt als Benutzer Munin anmelden kann (im SSH-Passwortanmeldung abschalten etc. pp.). ===== SSH-Tunnel öffnen und offen halten ===== Den SSH-Tunnel zwischen dem Server und dem Host lässt man vom Host aufbauen und offen halten. Dazu übernehmen wir das Skript von der Website, mit ein paar kleinen Korrekturen und speichern es nach ///var/lib/munin/munin-ssh-tunnel.sh// ab: #!/bin/sh # Start or restart ssh tunnel to munin clients in a DMZ # File with the munin configuration MUNINCONF=/etc/munin/munin.conf # IP-Address for localhost (local tunnel endpoint) IP=127.0.0.1 # tempoary list MUNINLIST=/tmp/munin.list cat $MUNINCONF | grep -v "#" | grep "address $IP" --before-context=1 --after-context=1 > $MUNINLIST # set an 'end of file' marker echo "--" >> $MUNINLIST COUNTER=0 cat $MUNINLIST | while read line ; do if [ "$line" != "--" ] ; then if [ "$COUNTER" = "0" ] ; then CLIENTNAME=`echo $line | tr -d '[] '` fi if [ "`echo $line | grep port`" ] ; then PORT=`echo $line | awk '{ print $2 }'` fi #echo "looking for $CLIENTNAME : $PORT" COUNTER=`echo "$COUNTER + 1" | bc` else echo "done with this triple, check for tunnel $CLIENTNAME port $PORT" if [ "`ps -eaf | grep ssh | grep nNgf | grep $PORT | grep -v grep`" ] ; then echo "tunnel to $CLIENTNAME port $PORT is up" else echo "SSH tunnel ${CLIENTNAME} NOT alive ... Restarting ..." /usr/bin/ssh -nNgf -L $PORT:localhost:4949 munin@$CLIENTNAME logger -p daemon.notice "SSH tunnel ${CLIENTNAME} NOT alive ... Restarting ..." sleep 1 fi COUNTER=0 echo fi done Hat man seinen SSH-Dienst auf einen anderen Port konfiguriert, muss natürlich die Zeile ''/usr/bin/ssh..'' mit ''-p XXX'' ergänzt werden. Mit ''chmod +x /var/lib/munin/munin-ssh-tunnel.sh'' macht man das Skript ausführbar. Nun wird für das Script noch ein Eintrag in der Contrab angelegt. Dazu ''crontab -e'' eintippen und dort einfügen: * * * * * /var/lib/munin/munin-ssh-tunnel.sh > /dev/null 2>&1 Damit sollte der Tunnel jede Minute neu aufgebaut werden, wenn sie weg ist. Da mein Munin-Server an einem Dialup hängt, verbessere ich das Timeout-Verhalten des Tunnels indem ich in ///var/lib/munin/.ssh/config// die Einstellungen wie folgt setze: Host * ConnectTimeout 5 ConnectionAttempts 5 ServerAliveCountMax 2 ServerAliveInterval 5 Abschließend einmal das Script manuell ''/var/lib/munin/munin-ssh-tunnel.sh''aufrufen und danach in der Datei ///etc/passwd// für den Benutzer Munin als Shell wieder ''/bin/false'' setzen.