题 如何监控glusterfs卷


Glusterfs虽然是一个很好的分布式文件系统,却几乎无法监控它的完整性。服务器可以来去匆匆,砖块可能变得陈旧或失败,我害怕知道它可能为时已晚。

最近我们遇到了一个奇怪的失败,当一切都工作正常,但是一块砖从卷上掉了下来(纯粹的巧合发现)。

是否有一种简单可靠的方法(cron脚本?)可以让我了解GlusterFS的健康状况 3.2 体积?


12
2017-08-01 16:55




现在我们使用基于脏shell脚本的监视: check_gluster.sh - Arie Skliarouk
看一下 glfs-health.sh。 - quanta
我检查了glfs-health.sh,它看起来像是旧版本的glusterfs,它们是配置文件控制的。我将澄清我的问题来代表glusterfs 3.2。 - Arie Skliarouk


答案:


这已经向GlusterFS开发人员提出了一段时间的请求,并且您无法使用任何开箱即用的解决方案。但是,使用一些脚本并不是不可能的。

几乎整个Gluster系统都由一个gluster命令管理,只需几个选项,您就可以自己编写健康监控脚本。在这里查看有关砖块和体积的列表信息 - http://gluster.org/community/documentation/index.php/Gluster_3.2:_Displaying_Volume_Information

要监控性能,请查看此链接 - http://gluster.org/community/documentation/index.php/Gluster_3.2:_Monitoring_your_GlusterFS_Workload

更新:请考虑升级到 http://gluster.org/community/documentation/index.php/About_GlusterFS_3.3 

因为它们似乎有更多错误修复并得到很好的支持,所以你最好能够使用最新版本。当然,在转向更新版本之前运行自己的测试 - http://vbellur.wordpress.com/2012/05/31/upgrading-to-glusterfs-3-3/ :)

第10章中有一个管理指南,其中包含用于监控GlusterFS 3.3安装的特定部分 - http://www.gluster.org/wp-content/uploads/2012/05/Gluster_File_System-3.3.0-Administration_Guide-en-US.pdf

在这里看到另一个nagios脚本 - http://code.google.com/p/glusterfs-status/


2
2017-08-14 16:05



谢谢Chida,我想是什么让我挂断的是一些人(github.com/semiosis/puppet-gluster)通过proc表(' - with-brick'等)监视gluster和logfiles(egrep'E'表示错误),有些人正在使用CLI,我不知道哪个更有可能准确报告gluster的州。 - r_2
我建议使用CLI,因为这是GlusterFS建议的,并且必须是最新的。 - Chida


有一个nagios插件可用于监控。您可能需要为您的版本编辑它。


2
2017-09-21 17:12





请查看附带的脚本 https://www.gluster.org/pipermail/gluster-users/2012-June/010709.html 对于gluster 3.3;它可能很容易适应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

2
2017-08-18 10:43





我能够为glusterfs配置nagios监控,如下所述:

http://gopukrish.wordpress.com/2014/11/16/monitor-glusterfs-using-nagios-plugin/


1
2017-11-19 12:12



因为链接随着时间的推移而死亡,如果您可以在ServerFault上包含答案的本质,我们会更喜欢它。 - Ladadadada


@Arie Skliarouk,你的 check_gluster.sh 在最后一行有一个拼写错误,你grep for exitst 代替 exist。我继续将其重写为更紧凑,并删除了临时文件的要求。

#!/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

1
2018-02-15 13:20



“最直接”错字是在日志中写的内容。我不买“紧凑”的优势 - 当线路过载时,脚本更难理解。临时文件是易于理解的代码支付的便宜价格。 - Arie Skliarouk
@ArieSkliarouk:更新以涵盖这两个案例,但预先警告相关消息已于2011年11月删除;看到 git.gluster.org/... 。因此,这可能不适用于较新的Glusters。如果您发现较短的代码更难理解,那很好,但它比使用临时文件更强大,因此请考虑重构它以提高可读性,而不是因为缺少该属性而忽略它。 - BMDan
一位匿名编辑指出 gluster volume info | awk ... 可以缩写为 gluster volume list。 - Lekensteyn