或许会有些数据计算多余情况,因为刚写好,还有很多需要完善的地方
#!/bin/bash
#zabbix自定义通用监控脚本
#VERSION:1.0.7
#定义传入参数
#COM1为函数匹配参数
#COM2为查询参数
COM1=$1
COM2=$2
case $COM1 in
################系统资源################
time)
uptime |awk -F "[ up,]+" '{print $3}'
#系统运行时间
;;
user)
who | awk '{print $5}' | sort | uniq | wc -l
#当前系统已经登录数量
;;
address)
who | awk '{print $1,$NF}'
#用户登录地址
;;
osinfo)
cat /etc/redhat-release
#当前操作系统信息
;;
cpu)
ps -aux|awk -F '[ ]+' 'BEGIN{sum=0}{sum+=$3}END{print sum}'
#CPU占用率
;;
mem)
ps -aux|awk -F '[ ]+' 'BEGIN{sum=0}{sum+=$4}END{print sum}'
#MEN占用率
;;
cpuh)
ps aux|sort -nr -k3|awk 'NR==1{print $2}'
#查看占用CPU最高的进程号
;;
memh)
ps aux|sort -nr -k4|awk 'NR==1{print $2}'
#查看占用MEM最高的进程号
;;
cpuload)
[ ! -n "$COM2" ] && COM2=3
cores=`grep 'cpu cores' /proc/cpuinfo|awk 'NR==1{print $NF}'`
cpumax=`echo "$cores*0.7"|bc`
[ $COM2 -eq 1 ] && COM2=1
[ $COM2 -eq 5 ] && COM2=2
[ $COM2 -eq 15 ] && COM2=3
[ $COM2 -ne 1 ] && [ $COM2 -ne 3 ] && [ $COM2 -ne 15 ] && COM2=3
cpuload=`cat /proc/loadavg|awk '{print $'$COM2'}'`
echo "$cpuload >= $cpumax"|bc
#cpu前1、5、15分钟的负载
;;
################网卡信息################
IPv4)
[ ! -n "$COM2" ] && COM2=`ifconfig |egrep -v "^ |^$|docker"|awk -F ":" 'NR==1{print $1}'`
ifconfig $COM2|awk 'NR==2{print $2}'
#显示IPv4信息
;;
IPv6)
[ ! -n "$COM2" ] && COM2=`ifconfig |egrep -v "^ |^$|docker"|awk -F ":" 'NR==1{print $1}'`
ifconfig $COM2|awk 'NR==3{print $2}'
#显示IPv6信息
;;
ehter)
[ ! -n "$COM2" ] && COM2=`ifconfig |egrep -v "^ |^$|docker"|awk -F ":" 'NR==1{print $1}'`
ifconfig $COM2|awk 'NR==4{print $2}'
#显示物理网卡信息
;;
################TCP连接数################
tcp)
cat /proc/net/snmp|awk 'NR==8{print $10}'
#打开的TCP连接数
;;
opens)
echo $((`cat /proc/net/snmp|awk 'NR==8{print $7}'`/240))
#每秒被动打开TCP连接数
;;
################流量监控################
#接受流量/下行/入口/上传
net_in)
[ ! -n "$COM2" ] && COM2=`ifconfig |egrep -v "^ |^$|docker"|awk -F ":" 'NR==1{print $1}'`
TIME_1=`cat /proc/net/dev|grep $COM2|awk '{print $2}'`
sleep 1
TIME_2=`cat /proc/net/dev|grep $COM2|awk '{print $2}'`
echo "($TIME_2-$TIME_1)/1024*1000"|bc
;;
#发送流量/上行/出口/下载
net_out)
[ ! -n "$COM2" ] && COM2=`ifconfig |egrep -v "^ |^$|docker"|awk -F ":" 'NR==1{print $1}'`
TIME_3=`cat /proc/net/dev|grep $COM2|awk '{print $10}'`
sleep 1
TIME_4=`cat /proc/net/dev|grep $COM2|awk '{print $10}'`
echo "($TIME_4-$TIME_3)/1024*1000"|bc
;;
################磁盘监控################
/)
df -hT | grep "/$"|awk -F '[ %]+' '{print $6}'
#磁盘[ / ] 使用率
;;
/home)
df -hT | grep "/home$"|awk -F '[ %]+' '{print $6}'
#磁盘[ /home ] 使用率
;;
/opt)
df -hT | grep "/opt$"|awk -F '[ %]+' '{print $6}'
#磁盘[ /opt ] 使用率
;;
/var)
df -hT | grep "/var$"|awk -F '[ %]+' '{print $6}'
#磁盘[ /var ] 使用率
;;
rKBps)
[ ! -n "$COM2" ] && COM2=`awk '{print $3}' /proc/diskstats|grep -v "[0-9]$"`
iostat -dxkt 1 2|grep "\b$COM2\b" |tail -1|awk '{print $6}'
#每秒完成读数据量
;;
wKBps)
[ ! -n "$COM2" ] && COM2=`awk '{print $3}' /proc/diskstats|grep -v "[0-9]$"`
iostat -dxkt 1 2|grep "\b$COM2\b" |tail -1|awk '{print $7}'
#每秒完成写数据量
;;
avgrq-sz)
[ ! -n "$COM2" ] && COM2=`awk '{print $3}' /proc/diskstats|grep -v "[0-9]$"`
iostat -dxkt 1 2|grep "\b$COM2\b" |tail -1|awk '{print $8}'
#平均每次IO操作的数据量
;;
avgqu-sz)
[ ! -n "$COM2" ] && COM2=`awk '{print $3}' /proc/diskstats|grep -v "[0-9]$"`
iostat -dxkt 1 2|grep "\b$COM2\b" |tail -1|awk '{print $9}'
#平均等待处理IO请求队列长度
;;
await)
[ ! -n "$COM2" ] && COM2=`awk '{print $3}' /proc/diskstats|grep -v "[0-9]$"`
iostat -dxkt 1 2|grep "\b$COM2\b" |tail -1|awk '{print $10}'
#平均每次IO请求等待时间(单位毫秒)
;;
svctm)
[ ! -n "$COM2" ] && COM2=`awk '{print $3}' /proc/diskstats|grep -v "[0-9]$"`
iostat -dxkt 1 2|grep "\b$COM2\b" |tail -1|awk '{print $11}'
#平均每次IO请求的处理时间(单位毫秒)
;;
util)
[ ! -n "$COM2" ] && COM2=`awk '{print $3}' /proc/diskstats|grep -v "[0-9]$"`
echo "`iostat -dxkt 1 2|grep "\b$COM2\b" |tail -1|awk '{print $NF}'`"
#磁盘忙碌情况,采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
#一般超过80%表示该磁盘可能处于繁忙状态
;;
help|*)
echo -e " VERSION:1.0.1
=======================================================================
setup:key=agent_status[time]|默认第一网卡|
setup:key=agent_status[IPv4,]
setup:key=agent_status[IPv4,em1]
setup:key=agent_status[cpuload,5]
time: 系统运行时间
user: 当前系统已经登录数量
address: 用户登录地址
osinfo: 当前操作系统信息
cpu: 查看CPU占用率
mem: 查看内存占用率
cpuh: 查看占用CPU最高的进程号
memh: 查看占用MEM最高的进程号
cpuload: 显示最近时间CPU负载,参数2为1时,为前一分钟负载,仅支持1,5,15
IPv4: 显示IPv4信息
IPv6: 显示IPv6信息
ehter: 显示物理网卡信息
tcp: 打开的TCP连接数
opens: 每秒被动打开的TCP连接数
net_in: 接受流量/下行/入口(对于服务器而言)
net_out: 发送流量/上行/出口(对于服务器而言)
=======================================================================
setup:key=agent_status[/,]
setup:key=agent_status[/,vda]
/: 磁盘 [ / ] 使用率
/home: 磁盘 [ /home ] 使用率
/opt: 磁盘 [ /opt ] 使用率
/var: 磁盘 [ /var ] 使用率
=======================================================================
setup:key=agent_status[rKBps,]|默认第一磁盘|
setup:key=agent_status[rKBps,vda]
rKBps: 每秒完成读数据量
wKBps: 每秒完成写数据量
avgrq-sz: 平均每次IO操作的数据量
avgqu-sz: 平均等待处理IO请求队列长度
await: 平均每次IO请求等待时间(单位毫秒)
svctm: 平均每次IO请求的处理时间(单位毫秒
util: 磁盘忙碌情况,采用周期内用于IO操作的时间比率
即IO队列非空的时间比率
=======================================================================
"
;;
esac