Como monitorar volumes do glusterfs

12

O Glusterfs, apesar de ser um bom sistema de arquivos distribuído, quase não oferece meios de monitorar sua integridade. Os servidores podem ir e vir, os tijolos podem ficar obsoletos ou falhar e tenho medo de saber disso quando provavelmente já é tarde demais.

Recentemente, tivemos uma falha estranha quando tudo parecia funcionar, mas um tijolo caiu do volume (encontrado por pura coincidência).

Existe uma maneira simples e confiável (script cron?) que me informará sobre o status de saúde do meu volume GlusterFS 3.2 ?

    
por Arie Skliarouk 01.08.2011 / 18:55

5 respostas

2

Este tem sido um pedido para os desenvolvedores do GlusterFS há algum tempo e não há solução pronta para uso que você possa usar. No entanto, com alguns scripts, não é impossível.

Quase todo o sistema Gluster é gerenciado por um único comando gluster e, com algumas opções, você pode escrever scripts de monitoramento de integridade. Veja aqui as informações sobre tijolos e volumes - link

Para monitorar o desempenho, veja este link - link

UPDATE: considere a possibilidade de fazer upgrade para o link

Você está sempre melhor com o lançamento mais recente, pois parece que eles têm mais correções de bugs e são bem compatíveis. Claro, execute seus próprios testes antes de passar para uma versão mais recente - link :)

Existe um guia de administração com uma seção específica para monitorar sua instalação do GlusterFS 3.3 no Capítulo 10 - link

Veja aqui outro script de nagios - link

    
por 14.08.2012 / 18:05
2

Existe um plugin nagios disponível para monitoramento . Você pode ter que editá-lo para a sua versão embora.

    
por 21.09.2012 / 19:12
2

Por favor, verifique o script em anexo no link para o gluster 3.3; provavelmente é facilmente adaptável ao 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:]]+)\)$//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
    
por 18.08.2012 / 12:43
1

Consegui configurar o monitoramento nagios para glusterfs, como mencionado abaixo:

link

    
por 19.11.2014 / 13:12
1

@Arie Skliarouk, seu check_gluster.sh tem um erro de digitação - na última linha, você usa exitst em vez de exist . Fui em frente e reescrevi para ser um pouco mais compacto e para remover a exigência de um arquivo temporário.

#!/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
    
por 15.02.2013 / 14:20