0
点赞
收藏
分享

微信扫一扫

zabbix 系统监控脚本

船长_Kevin 2022-03-12 阅读 44
#!/bin/bash
src_dir=$(cd `dirname $0` && pwd)
source /etc/profile

## 信息采集
# CPU实时频率
cpu_mhz() {
	lscpu|grep "CPU MHz"|awk '{print $NF}'
}

# 内存实际使用率
mem_used() {
	echo "100-$(free -m|grep -w 'Mem'|awk '{print $NF'/'$2}')*100"|bc
}

## 磁盘信息获取
# 磁盘写入速度
disk_w() {
	num=1
	info=($(iostat -x -m -d $@ 1 1|grep "Device"))
	stat='wMB/s'
	for i in ${info[@]}
	do
		if [ ${i} == "${stat}" ];then
			break
		fi
		let num++
	done
	iostat -x -m -d $1 1 2|grep -v "^$"|tail -1|awk "{print \$${num}}"
}

# 磁盘写I/O次数
disk_wio() {
	num=1
	info=($(iostat -x -m -d $@ 1 1|grep "Device"))
	stat='w/s'
	for i in ${info[@]}
	do
		if [ ${i} == "${stat}" ];then
				break
		fi
		let num++
	done
	iostat -x -m -d $1 1 2|grep -v "^$"|tail -1|awk "{print \$${num}}"
}

# 磁盘读取速度
disk_r() {
	num=1
	info=($(iostat -x -m -d $@ 1 1|grep "Device"))
	stat='rMB/s'
	for i in ${info[@]}
	do
		if [ ${i} == "${stat}" ];then
				break
		fi
		let num++
	done
	iostat -x -m -d $1 1 2|grep -v "^$"|tail -1|awk "{print \$${num}}"
}

# 磁盘读I/O次数
disk_rio() {
	num=1
	info=($(iostat -x -m -d $@ 1 1|grep "Device"))
	stat='r/s'
	for i in ${info[@]}
	do
		if [ ${i} == "${stat}" ];then
				break
		fi
		let num++
	done
	iostat -x -m -d $1 1 2|grep -v "^$"|tail -1|awk "{print \$${num}}"
}

# 磁盘IOPS
disk_iops() {
	INPUT=$(disk_rio $@)
	OUTPUT=$(disk_wio $@)
	echo "${INPUT}+${OUTPUT}"|bc
}

# 磁盘读I/O使用率
disk_ioutil() {
	num=1
	info=($(iostat -x -m -d $@ 1 1|grep "Device"))
	stat='%util'
	for i in ${info[@]}
	do
		if [ ${i} == "${stat}" ];then
				break
		fi
		let num++
	done
	iostat -x -m -d $1 1 2|grep -v "^$"|tail -1|awk "{print \$${num}}"
}

# 磁盘每次I/O耗时(不适用于ubuntu 20及以上系列系统)
disk_svctm() {
	num=1
	info=($(iostat -x -m -d $@ 1 1|grep "Device"))
	stat='svctm'
	for i in ${info[@]}
	do
		if [ ${i} == "${stat}" ];then
				break
		fi
		let num++
	done
	iostat -x -m -d $1 1 2|grep -v "^$"|tail -1|awk "{print \$${num}}"
}

# 磁每次I/O读取耗时
disk_r_await() {
	num=1
	info=($(iostat -x -m -d $@ 1 1|grep "Device"))
	stat='r_await'
	for i in ${info[@]}
	do
		if [ ${i} == "${stat}" ];then
				break
		fi
		let num++
	done
	iostat -x -m -d $1 1 2|grep -v "^$"|tail -1|awk "{print \$${num}}"
}

# 磁盘每次I/O写入耗时
disk_w_await() {
	num=1
	info=($(iostat -x -m -d $@ 1 1|grep "Device"))
	stat='w_await'
	for i in ${info[@]}
	do
		if [ ${i} == "${stat}" ];then
				break
		fi
		let num++
	done
	iostat -c 1 2|grep -v "^$"|tail -1|awk "{print \$${num}}"
}

## CPU信息获取
# CPU iowait%
cpu_iowait() {
	num=0
	info=($(iostat -c 1 1|grep "avg-cpu"))
	stat='%iowait'
	for i in ${info[@]}
	do
		if [ ${i} == "${stat}" ];then
				break
		fi
		let num++
	done
	iostat -c 1 2|grep -v "^$"|tail -1|awk "{print \$${num}}"
}

# CPU 空闲时间%
cpu_idle() {
	num=0
	info=($(iostat -c 1 1|grep "avg-cpu"))
	stat='%idle'
	for i in ${info[@]}
	do
		if [ ${i} == "${stat}" ];then
				break
		fi
		let num++
	done
	iostat -c 1 2|grep -v "^$"|tail -1|awk "{print \$${num}}"
}

# 检测异常占用CPU的进程,如果CPU使用率长时间超过80%以上,且进程非lotus,则返回数字1
proc_test() {
	proc=$(ps aux|grep -v PID|sort -rn -k +3|head -1|awk '{print $11}')
	cpu_used=$(vmstat -w 1 3|tail -1|awk '{print $13}')
	if [ ${cpu_used} -gt 80 ];then
	        if echo ${proc}|grep "lotus" >/dev/null 2>&1;then
	                echo 0
	        elif echo ${proc}|grep "chia" >/dev/null 2>&1;then
			echo 0
	        else
	                echo 1
	        fi
	else
	        echo 0
	fi
}

# GPU数量监控
gpu_mon() {
        #- 返回 0 表示显卡数量正常
        #- 返回 [1-9] 表示有相对数量的显卡无法使用(掉显卡)
        #- 返回 10 表示没有显卡
        #- 返回 11 表示显卡硬件故障
    	#- 返回 12 表示显卡驱动有问题

        sys_gpus=$(lspci|grep -i vga|grep -i nvidia|wc -l)
        if [ ${sys_gpus} -eq 0 ];then                           # 如果统计结果为0,则表示该机器没有显卡
                echo "10"
        else
                nvidia-smi -L|wc -l >${src_dir}/.gpus 2>&1 &            # 检查系统当前能识别到的显卡数量
		nvidia-smi -L | awk 'NR==1 {print $1}' >${src_dir}/.gpu 2>&1 & #检查系统是否安装显卡驱动
                sleep 10 ; pkill -9 nvidia-smi                          # 如果nvidia-smi命令因硬件故障而卡住,直接kill掉命令进程
                load_gpus=$(cat ${src_dir}/.gpus)                       # 查看系统能正常使用的显卡数量
		load_gpu=$(cat ${src_dir}/.gpu)
                if [ ! -e ${src_dir}/.gpus ];then
                        echo 11
		elif [ "$load_gpu" != "GPU" ];then
                        echo 12
               	else
                       	echo "${sys_gpus}-${load_gpus}"|bc
		fi
        fi
	rm -rf ${src_dir}/.gpu
        rm -rf ${src_dir}/.gpus
}

$@

举报

相关推荐

0 条评论