Centos7 Shell脚本监控磁盘容量实现钉钉告警

发布于:2023-01-23 ⋅ 阅读:(604) ⋅ 点赞:(0)

前言

此脚本用来监控服务器磁盘容量实现钉钉告警功能

一、编写Shell脚本

  1. 创建脚本存放目录,存放在**/data/shell**下
mkdir -p /data/shell
vim /data/shell/DingTalk_Alert
#!/bin/bash
#设定告警峰值,设置三个峰值,也可以设置一个或多个
Disk_ls=(80 90 99)
#这里更换钉钉的tokenid,复制粘贴过来
tokenid="2435654756567567456765756476"
#以下就不用动了
New_all=$(echo ${Disk_ls[*]} | tr ' ' '\n' | sort -n)
New=$(echo $New_all | awk -F" " '{print $1}')

Servser_(){
	rpm -qa | grep ^$1 >> /dev/null
	if [ $? -ne 0 ]; then
		yum install $1 -y
	fi
}

Servser_ net-tools
Servser_ bc

HostIP_()
{
	machine_physics_net=$(ls /sys/class/net/ | grep -v "`ls /sys/devices/virtual/net/`")
	for i in $machine_physics_net; do
		IP_=$(ip addr | grep $i | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}')
		if [ ! -z $IP_ ]; then
			echo "    $i: $IP_"
		fi
	done
}   

fun(){
  curl "https://oapi.dingtalk.com/robot/send?access_token=$tokenid" \
  -H "Content-Type: application/json" \
  -d "{'msgtype': 'text', 'text': {'content': '$7\n告警主机:\n$1\n告警时间:$2\n告警事件:$3\n总容量:$4\n已使用:$5\n可使用:$6'}}" > /dev/null
}

Alarm_recovery(){
	Date=`date +"%Y-%m-%d %H:%M:%S"`
	if [ $1 -ge $2 ]; then
		echo ${variable_list[*]} | grep -w $3$2 >> /dev/null
		if [ $? -eq 1 ]; then
			variable_list[${#variable_list[*]}]=$3$2
			print_Alarm="$3 使用率大于$2%,请尽快处理"
			fun "$HostIP" "$Date" "$print_Alarm" "$4" "$5" "$6" "[流鼻血] 【Disk 触发告警】"
		fi
	else
		echo ${variable_list[*]} | grep -w $3$2 >> /dev/null
		if [ $? -eq 0 ]; then
			variable_list=("${variable_list[*]/"$3$2"}")
			Recovery="$3 告警恢复"
			if [ "$3$2" == "$3$7" ]; then
				fun "$HostIP" "$Date" "$Recovery" "$4" "$5" "$6" "[加油] 【Disk 告警恢复】"
			fi
		fi
	fi
}

Df_Th(){
    DF=(`df -Th | grep -w $1$`)
    echo ${DF[$2]}
}

while true
do
	sleep 3
	HostIP=$(HostIP_)
	Mountdisk=`lsblk | grep -v /snap | grep -v /boot | grep -v swap | grep -v loop0 | awk -F" " '{print $7}' | grep -v "^$" | awk 'NR!=1 {print}' | sort -u`
	df -t nfs4 > /dev/null 2>&1
	if [ $? -eq 0 ];then
		Nfs4_all=`df -t nfs4 | awk 'NR!=1 {print}' | awk -F" " '{print $NF}'`
		Mountdisk="$Mountdisk $Nfs4_all"
	fi

	for i in $Mountdisk; do
		Usei=$(Df_Th $i 5)
		Use=`echo $Usei | awk -F % '{print $1}'`
		Avail=$(Df_Th $i 4)
		Used=$(Df_Th $i 3)
		Size=$(Df_Th $i 2)

		for x in $New_all;do
			Alarm_recovery "$Use" "$x" "$i" "$Size" "$Used" "$Avail" "$New"
		done
	done
done

二、编写启动文件,实现开机自启

  1. 编写启动文件,实现开机自启
vim /usr/lib/systemd/system/DingDing.service
[Unit]
Description=DingDing

[Service]
Type=simple
WorkingDirectory=/data/shell/
ExecStart=/usr/bin/bash DingTalk_Alert
ExecStop=/usr/bin/ps -ef | /usr/bin/grep "bash" | /usr/bin/grep "DingTalk_Alert" | /usr/bin/awk '{print $2}' | /usr/bin/xargs/usr/bin/kill -9
User=root
Group=root

[Install]
WantedBy=multi-user.target
  1. 设置开机自启
systemctl restart DingDing.service
systemctl enable DingDing.service

机器人需要添加关键词,不然有问题哦

在这里插入图片描述

效果图

在这里插入图片描述

结言

关于监控服务器磁盘告警就写到这里了,理论上可以在不同系统服务中监控,稍微修改下就可以了。


网站公告

今日签到

点亮在社区的每一天
去签到