Netaddict



Sie befinden sich hier: Netaddict.de » howtos » Munin-Überwachung via SSH

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.shaufrufen und danach in der Datei /etc/passwd für den Benutzer Munin als Shell wieder /bin/false setzen.

 

 
XHTML 1.1 CSS 2 Creative Commons License
Netaddict Version 6.0 - © 1996-2017 by netaddict.de - Kontakt