目录

一、实现思路:

二、监控脚本:

1、配置文件:

2、具体脚本:

3、配置参数说明:

4、使用注意事项:


 

一、实现思路:

首先,通过配置文件将mongodb集群节点的IP和端口号配置好,并配置好其它相关信息,例如:邮件发送等信息。

其次,在shell脚本中遍历mongodb集群配置的各个节点,通过命令判断该节点是否正常启动,如果节点宕机,通过一个变量参数记录下该节点的IP和PORT,最后将宕机的节点IP和PORT信息组合起来,以邮件的形式发送给配置的各个管理员邮箱。

二、监控脚本:

此脚本是根据进程是否启动来判断节点是否宕机的,因此配置的IP和PORT必须是本服务器上启动的mongodb节点,如果是多个服务器上部署了节点,每个服务器上都需要部署此脚本。脚本具体代码如下:

1、配置文件:

ipAddressAndPorts=192.168.99.164:9200,192.168.99.165:9200
semdEmailTo=1123476897809@qq.com
sendEmailTitle=测试mongodb集群节点监控异常标题
sendEmailContent=测试mongodb集群节点监控异常内容。

2、具体脚本:

注意:不同linux设备的sh路径可能不同,需通过which sh查看sh的绝对路径修改即可。

#!/bin/sh

#db_backups_conf.txt文件路径
db_backups_conf="/wocloud/shell/mongodb_cluster_config.txt"

#判断文件是否存在
if [ -f "${db_backups_conf}" ];then
	
	echo $(date +'%Y-%m-%d %H:%M:%S')" 发现配置信息文件存在"

	#获取等号前内容,作为map中的Key值
	dbArrOne=($(awk -F'[=]' '{print $1}' ${db_backups_conf} ))
	
	#获取等号后内容,作为map中的value值
	dbArrTwo=($(awk -F'[=]' '{print $2}' ${db_backups_conf}))

	#创建一个空map
	declare -A map=()
	
	#通过循环,将db_backups_conf配置文件中的信息存储在map中
	for((i=0;i<${#dbArrOne[@]};i++))
	do
		map[${dbArrOne[i]}]=${dbArrTwo[i]}
	done	

	#获取要监测集群节点IP和端口号组合的字符串
	ipPortsStr=${map["ipAddressAndPorts"]}
	
	#获取收件人的邮件账号的字符串
	semdEmailTo=${map["semdEmailTo"]}
	
	#获取默认的字符串分隔符
	old_ifs="$IFS"
	
	#设置字符串分隔符为逗号
	IFS=","

	#将要集群节点IP和PORT的value值的字符串进行分隔,获取一个数组
	ipPortArr=($ipPortsStr)
	
	#将收件人的邮件账号value值的字符串进行分隔,获取一个数组
	semdEmailToArr=($semdEmailTo)

	#将字符串的分隔符重新设置为默认的分隔符
	IFS="$old_ifs"
	
	
	#定义一个是否需要发送异常提醒邮件变量
	isSendEmailStr=0
	
	#定义一个出现异常集群节点ip和端口号存储的变量
	errorIpPort=""
	
	#执行命令
	{
	
		#遍历集群节点,监测节点是否异常宕机
		for ipPort in ${ipPortArr[@]};
		do
		
			#检测mongodb节点是否异常宕机
			netstat -anop | grep ${ipPort}
			if [ $? -ne 1 ];then
				echo $(date +'%Y-%m-%d %H:%M:%S')" mongodb集群节点正常:"${ipPort}
			else
				echo $(date +'%Y-%m-%d %H:%M:%S')" mongodb集群节点异常:"${ipPort}
				isSendEmailStr=1
				errorIpPort=${errorIpPort}""${ipPort}","
			fi
			
		
		done
		
	} || {
		isSendEmailStr=1
	}
	

	#判断命令执行是否有异常,如果有异常就发送邮件
	if [ ${isSendEmailStr} == "0" ];then
			echo $(date +'%Y-%m-%d %H:%M:%S')" 执行mongodb集群节点监测全部正常"
		else 
			echo $(date +'%Y-%m-%d %H:%M:%S')" 执行mongodb集群节点监测有异常,开始发送邮件通知管理员"
			
			#遍历收件人的邮箱地址,逐个发送邮件
			for email in ${semdEmailToArr[@]};
			do
				echo $(date +'%Y-%m-%d %H:%M:%S')" 开始发送邮件:"${email}

				echo ""${map["sendEmailContent"]}",异常节点信息如下:"${errorIpPort} | mail -s ""${map["sendEmailTitle"]} ${email}
			done
			
			echo $(date +'%Y-%m-%d %H:%M:%S')" 执行mongodb集群节点监测有异常,成功发送邮件通知管理员"
	fi
	
	echo $(date +'%Y-%m-%d %H:%M:%S')" 脚本执行完毕"


else
	echo "文件不存在"
fi

3、配置参数说明:

参数意义如下:
ipAddressAndPorts=节点IP:端口号,多个节点用逗号分隔,注意冒号、逗号都必须是英文的
semdEmailTo=收件人邮箱,多个收件人邮箱用逗号隔开
sendEmailTitle=测试邮件主题(文本内容中一定不能包含=)
sendEmailContent=测试邮件内容(文本内容中一定不能包含=)

4、使用注意事项:

使用注意事项:
1、默认的是.sh、.txt文件都要放在/woclod/shell脚本下,如果放置的路径变了,需要修改.sh中读取.txt配置文件的路径
2、备份异常发送邮件提醒采用的是mail,运行的linux上提前先安装好mail并配置到mail.rc发送邮件的信息才可以。
3、此脚本是根据进程是否启动来判断节点是否宕机的,因此配置的IP和PORT必须是本服务器上启动的mongodb节点,如果是多个服务器上部署了节点,每个服务器上都需要部署此脚本。