如何使用脚本监视GlusterFS?

Bash

1 前言

一个问题,一篇文章,一出故事。
笔者生产环境的Zabbix有设置监控GlusterFS,但笔者想稳妥点同时也通过脚本实现监视,于是创建 以下脚本。
关于GlusterFS环境,你可以参阅如下链接,

如何管理GlusterFS的分散卷?

2 最佳实践

2.1 配置监控节点的公钥认证

如何部署公钥认证?


请参阅有以上配置公钥人认证,以允许监视节点SSH到GlusterFS的节点时无需输入密码,本章可使用如下命令验证,

ssh docker01
ssh docker02
ssh docker03

2.2 配置邮件空客户端

如何实现命令行发送邮件?


注:空客户端允许服务器使用“mail”命令发送邮件

2.3 创建监视脚本

vim ~/scripts/monitorGluster.sh

加入如下配置,

#!/bin/bash

glusterServers="docker01 docker02 docker03"
mailFrom="admin@cmdschool.org"
mailTo="will@cmdschool.org"
mailMessage="/tmp/glusterMailMessage"
infoFile="/tmp/glusterInfo"


for i in $glusterServers; do
	glusterServer="$i"
	ping -c 1 "$glusterServer" > /dev/null 2>&1 
	if  [ $? -ne 0 ]; then
		continue
	fi
	ssh "$glusterServer" gluster volume status all detail > "$infoFile"
	if  [ $? -eq 0 ]; then
		break
	fi
done

echo "GlusterFS brick failure below, please notify admin to fix," > "$mailMessage"
glusterBrick=""
glusterStatus=""
IFS=$'\n'
j=0
for i in `cat "$infoFile" | egrep "^Brick|^Online"`; do
	let j=j+1
	let k=$j%2
	if [ $k -ne 0 ]; then
		glusterBrick=`echo $i | cut -d':' -f2-3 | sed 's/^ //g'`
	else
		glusterStatus=`echo $i | cut -d':' -f2 | sed 's/^ //g'`
		if [[ "$glusterStatus" == Y* ]]; then
			continue
		fi
		echo "$glusterBrick" >> "$mailMessage"
	fi
done

if [ `cat "$mailMessage" | wc -l` -gt 1 ]; then
	mailSubject='GlusterFS brick failure!'
	mail -s "$mailSubject" -r "$mailFrom" "$mailTo" < "$mailMessage"
fi

以上主要参数定义如下,
– 核心命令“gluster volume status all detail”获取存储节点状态后其他代码根据返回判断及邮件通知
– 参数“glusterServers”定义GlusterFS的数据节点,程序逐个确定节点是否可用并取存储信息后退出
– 参数“mailFrom”定义警告邮件的发件人
– 参数“mailTo”定义警告邮件的接收人

2.4 创建脚本触发

crontab -e

加入如下配置,

*/5 * * * * sh ~/scripts/monitorGluster.sh
没有评论

发表回复

Bash
如何熟悉Base Shell的变量的间接引用?

1 前言 一个问题,一篇文章,一出故事。 笔者希望以一个变量名称去引用另一个变量,于是整理此文。 2 …

Bash
如何实现文件夹路径转纯数字符串?

1 前言 一个问题,一篇文章,一出故事。 由于由于需要设置某目录的配额,配额要求为每个目录指定一个项 …

Bash
如何统计Linux打开文件前10进程?

1 前言 一个问题,一篇文章,一出故事。 笔者生产环境有台服务最近压力比较大,打开的文件数量不断地往 …