So überwachen Sie glusterfs Volumes

12

Glusterfs ist zwar ein schönes verteiltes Dateisystem, bietet aber fast keine Möglichkeit, seine Integrität zu überwachen. Server können kommen und gehen, Backsteine ​​könnten abgestanden sein oder ausfallen, und ich fürchte, das zu wissen, wenn es wahrscheinlich zu spät ist.

Vor kurzem hatten wir einen seltsamen Fehler, als alles funktionierte, aber ein Ziegelstein fiel aus dem Volumen (gefunden durch reinen Zufall).

Gibt es einen einfachen und zuverlässigen Weg (Cron-Skript?), Der mich über den Gesundheitszustand meines GlusterFS 3.2- Volumes informiert ?

Arie Skliarouk
quelle
Im Moment verwenden
Arie Skliarouk
Schauen Sie sich glfs-health.sh an .
Quanten
1
Ich habe die Datei glfs-health.sh überprüft und es sieht so aus, als ob es sich um alte Versionen von glusterfs handelt, die durch Konfigurationsdateien gesteuert wurden. Ich werde meine Frage zur Darstellung von glusterfs 3.2 klären.
Arie Skliarouk

Antworten:

3

Dies ist seit einiger Zeit eine Anfrage an die GlusterFS-Entwickler und es gibt keine sofort einsatzbereite Lösung, die Sie verwenden können. Mit ein paar Skripten ist dies jedoch nicht unmöglich.

Nahezu das gesamte Gluster-System wird mit einem einzigen Gluster-Befehl verwaltet. Mit wenigen Optionen können Sie sich selbst Skripte zur Überwachung des Zustands schreiben. Informationen zu Steinen und Bänden finden Sie hier - http://gluster.org/community/documentation/index.php/Gluster_3.2:_Displaying_Volume_Information

Informationen zum Überwachen der Leistung finden Sie unter folgendem Link: http://gluster.org/community/documentation/index.php/Gluster_3.2:_Monitoring_your_GlusterFS_Workload

UPDATE: Erwägen Sie ein Upgrade auf http://gluster.org/community/documentation/index.php/About_GlusterFS_3.3

Mit der neuesten Version sind Sie immer besser dran, da sie anscheinend mehr Fehlerbehebungen enthält und gut unterstützt wird. Natürlich sollten Sie Ihre eigenen Tests durchführen, bevor Sie zu einer neueren Version wechseln - http://vbellur.wordpress.com/2012/05/31/upgrading-to-glusterfs-3-3/ :)

In Kapitel 10 - http://www.gluster.org/wp-content/uploads/2012/05/Gluster_File_System-3.3.0-Administration_Guide-en-US finden Sie ein Administratorhandbuch mit einem speziellen Abschnitt zum Überwachen Ihrer GlusterFS 3.3-Installation .pdf

Hier finden Sie ein weiteres Nagios-Skript: http://code.google.com/p/glusterfs-status/

Chida
quelle
Danke Chida, ich denke, was mich aufgehängt hat, ist, dass einige Leute ( github.com/semiosis/puppet-gluster ) Glanz über die Proc-Tabelle ('--with-brick', etc) und Protokolldateien (egrep 'E') überwachen. und einige Leute benutzen die CLI und ich habe keine Ahnung, welche wahrscheinlich den Zustand des Glanzes genau wiedergibt.
r_2
Ich würde die Verwendung der CLI empfehlen, da diese von GlusterFS empfohlen wird und auf dem neuesten Stand sein muss.
Chida
2

Bitte überprüfen Sie das angehängte Skript unter https://www.gluster.org/pipermail/gluster-users/2012-June/010709.html auf Glanz 3.3; es ist wahrscheinlich leicht anpassbar an gluster 3.2.

#!/bin/bash

# This Nagios script was written against version 3.3 of Gluster.  Older
# versions will most likely not work at all with this monitoring script.
#
# Gluster currently requires elevated permissions to do anything.  In order to
# accommodate this, you need to allow your Nagios user some additional
# permissions via sudo.  The line you want to add will look something like the
# following in /etc/sudoers (or something equivalent):
#
# Defaults:nagios !requiretty
# nagios ALL=(root) NOPASSWD:/usr/sbin/gluster peer status,/usr/sbin/gluster volume list,/usr/sbin/gluster volume heal [[\:graph\:]]* info
#
# That should give us all the access we need to check the status of any
# currently defined peers and volumes.

# define some variables
ME=$(basename -- $0)
SUDO="/usr/bin/sudo"
PIDOF="/sbin/pidof"
GLUSTER="/usr/sbin/gluster"
PEERSTATUS="peer status"
VOLLIST="volume list"
VOLHEAL1="volume heal"
VOLHEAL2="info"
peererror=
volerror=

# check for commands
for cmd in $SUDO $PIDOF $GLUSTER; do
    if [ ! -x "$cmd" ]; then
        echo "$ME UNKNOWN - $cmd not found"
        exit 3
    fi
done

# check for glusterd (management daemon)
if ! $PIDOF glusterd &>/dev/null; then
    echo "$ME CRITICAL - glusterd management daemon not running"
    exit 2
fi

# check for glusterfsd (brick daemon)
if ! $PIDOF glusterfsd &>/dev/null; then
    echo "$ME CRITICAL - glusterfsd brick daemon not running"
    exit 2
fi

# get peer status
peerstatus="peers: "
for peer in $(sudo $GLUSTER $PEERSTATUS | grep '^Hostname: ' | awk '{print $2}'); do
    state=
    state=$(sudo $GLUSTER $PEERSTATUS | grep -A 2 "^Hostname: $peer$" | grep '^State: ' | sed -nre 's/.* \(([[:graph:]]+)\)$/\1/p')
    if [ "$state" != "Connected" ]; then
        peererror=1
    fi
    peerstatus+="$peer/$state "
done

# get volume status
volstatus="volumes: "
for vol in $(sudo $GLUSTER $VOLLIST); do
    thisvolerror=0
    entries=
    for entries in $(sudo $GLUSTER $VOLHEAL1 $vol $VOLHEAL2 | grep '^Number of entries: ' | awk '{print $4}'); do
        if [ "$entries" -gt 0 ]; then
            volerror=1
            let $((thisvolerror+=entries))
        fi
    done
    volstatus+="$vol/$thisvolerror unsynchronized entries "
done

# drop extra space
peerstatus=${peerstatus:0:${#peerstatus}-1}
volstatus=${volstatus:0:${#volstatus}-1}

# set status according to whether any errors occurred
if [ "$peererror" ] || [ "$volerror" ]; then
    status="CRITICAL"
else
    status="OK"
fi

# actual Nagios output
echo "$ME $status $peerstatus $volstatus"

# exit with appropriate value
if [ "$peererror" ] || [ "$volerror" ]; then
    exit 2
else
    exit 0
fi
S19N
quelle
1

@Arie Skliarouk, du hast check_gluster.sheinen Tippfehler - in der letzten Zeile greifst du nach exitstanstatt exist. Ich ging voran und schrieb es um, um ein bisschen kompakter zu sein und die Anforderung für eine temporäre Datei zu entfernen.

#!/bin/bash

# Ensure that all peers are connected
gluster peer status | grep -q Disconnected && echo "Peer disconnected." && exit 1

# Ensure that all bricks have a running log file (i.e., are sending/receiving)
for vol in $(gluster volume list); do
  for brick in $(gluster volume info "$vol" | awk '/^Brick[0-9]*:/ {print $2}'); do
    gluster volume log locate "$vol" "$brick";
  done;
done |
 grep -qE "does not (exist|exitst)" &&
 echo "Log file missing - $vol/$brick ." &&
 exit 1
BMDan
quelle
1
Der "exitst" Tippfehler ist, was in den Protokollen geschrieben wird. Ich kaufe nicht den "kompakten" Vorteil - das Skript ist viel schwerer zu verstehen, wenn Zeilen überladen sind. Temporäre Datei ist ein günstiger Preis für den leicht verständlichen Code.
Arie Skliarouk
@ArieSkliarouk: Aktualisiert, um beide Fälle abzudecken, aber seien Sie gewarnt, dass die relevante Nachricht im November 2011 entfernt wurde. siehe git.gluster.org/… . Daher wird dies bei neueren Glustern wahrscheinlich nicht funktionieren. Wenn Sie den kürzeren Code schwieriger zu verstehen finden, ist das in Ordnung, aber er ist wesentlich robuster als die Verwendung einer temporären Datei. Überlegen Sie sich daher, ob Sie ihn aus Gründen der Lesbarkeit überarbeiten möchten, anstatt ihn aufgrund eines vermeintlichen Fehlens dieses Attributs zu verwerfen.
BMDan
1
Ein anonymer Redakteur hat darauf hingewiesen, dass gluster volume info | awk ...dies abgekürzt werden kann gluster volume list.
Lekensteyn